iT邦幫忙

0

在MS SQL 內如何壓縮交易資料庫

linyt 2009-10-12 10:18:1918644 瀏覽

各位大大..這邊有個問題要麻煩大家幫忙想辦法(雖然這題目有點古董..但我還是在無解中..ldf天天長300MB多), 因為上網找了幾個壓縮語法(語法1,2,3)都還是沒用, 是否各位大大還有其他方式或是密招?? 另外有查到網友提到(語法4)查Status=2的話是要讓它變成0才能將交易資料檔壓縮變小, 請問這要如何作業?(Win2003 Server+MS SQL server 2003 Enterprise)

[語法1]

USE DB_name
BACKUP LOG DB_name WITH TRUNCATE_ONLY
DBCC SHRINKDATABASE (DB_name,1)

[語法2]

DUMP TRANSACTION DB_name WITH NO_LOG
BACKUP LOG DB_name WITH TRUNCATE_ONLY
DBCC SHRINKDATABASE ('DB_name',1,TRUNCATEONLY)

[語法3]以下網址提到的最後一個script範例
http://support.microsoft.com/kb/256650/zh-tw

[語法4]

DBCC LOGINFO(N'DB_name') 
jameslwg iT邦新手 4 級 ‧ 2015-09-01 21:13:32 檢舉
如果現在database太大, 可以考慮外置儲存硬碟ahsay來做備份,9TB 一體式外置儲存, 可備份任何資料檔案, 適合不同企業使用, 還有30天試用版http://www.ahsay.com/jsp/tc/home/
16
pantc328
iT邦研究生 1 級 ‧ 2009-10-12 10:29:25
最佳解答

這個地方我看很多文件,都是霧煞煞.
我做後研究出的心得.
1.備份並裁切交易檔.
2.對交易檔做壓縮的動作.
而我做的維護計畫是每周完整備份.每天做差異備份.每小時做交易備份.
在這種情形下,資料庫就不會暴漲.

linyt iT邦研究生 1 級 ‧ 2009-10-12 15:50:05 檢舉

pantc328大大:
想請問一下, 您是用MS SQL 內的維護計劃去做管理, 還是以T-SQL去做管理? 或是您使用那些statement的語法? 因為我try過多種statement 的組合, 不見transaction log 有比較大的縮小, 大概都是少少的減少幾10MB, 過幾小時後由再長回來.

10
sphinx
iT邦研究生 3 級 ‧ 2009-10-13 06:37:26

以前曾在網路上看過一篇相關的文章,連結如下:
http://www.nigelrivett.net/TransactionLogFileGrows\_1.html

主要的關鍵似乎是在資料庫的復原模式要設為"簡單",但因為我很少使用資料庫,所以沒有實際測試過,希望這資料能幫上忙。

8
jamesjan
iT邦高手 1 級 ‧ 2009-10-13 09:37:31

我使用的是 SQL Server 2000
如同樓上兩位大大所提,將復原模式設為簡單(Simple),再使用維護計畫做備份,這樣就不會有問題了

注意自動壓縮(Auto Shrink)選項要勾

一般交易檔與資料檔的比例配置,我記得以前上課的時候,老師是以 20% 或是 10% 的比例來教學
如果您之前未做上述的設定,但是 Transaction Log 已經長到非常大了

您必須要先將 Transaction Log 檔做 Shrink
透過 Enterprise Manager 選擇壓縮資料庫,以檔案壓縮的方式(選擇交易檔)
壓縮完再去做上面所提的設定,這樣交易檔案的 Size 才會 Down 下來

壓縮資料庫 Shrink Database 是沒有作用的,只是將儲存空間釋放出來,檔案大小不會壓縮

看更多先前的回應...收起先前的回應...
pantc328 iT邦研究生 1 級 ‧ 2009-10-13 09:51:20 檢舉

我不建議用簡單模式.
寫小程式或單機程式是沒差.但這樣位什麼買SQL Server?
寫企業程式或分散式系統.很多地方會用到交易.比如你做ATM..交易程式.在整個過程都會寫到Log檔.等雙方交易都沒問題.他才會寫到MDB檔.如果你沒用這種方式.直接動MDB的資料假如一方交易成功.另一方失敗,你的資料就不一致.

jamesjan iT邦高手 1 級 ‧ 2009-10-13 13:12:46 檢舉

謝謝 pantc328 大的提醒與補充
因為沒有處理過大型的系統,所以對復原模型是否會對 two phase commit 的交易模式造成影響
這部份就沒有深入去研究了

charmmih iT邦研究生 5 級 ‧ 2011-12-22 10:03:44 檢舉

資料一致與否, 不在於復原模式是否是"完整"及"簡單", 是在於程式的一個完整交易是否寫在同一個交易中. 簡單模式是交易完成後, 交易記錄會自動刪除, 因此交易記錄檔不會累加上去, 如同oralce noarchive ; 而復原模式完整主要是做當還原時, 是否要達到時間點回溯, 因此在交易完成後交易記錄不會自動刪除, 要由交易記錄備份後, 再刪除己備份部份, 如同 oracle archive.

charmmih iT邦研究生 5 級 ‧ 2011-12-22 10:03:52 檢舉

資料一致與否, 不在於復原模式是否是"完整"及"簡單", 是在於程式的一個完整交易是否寫在同一個交易中. 簡單模式是交易完成後, 交易記錄會自動刪除, 因此交易記錄檔不會累加上去, 如同oralce noarchive ; 而復原模式完整主要是做當還原時, 是否要達到時間點回溯, 因此在交易完成後交易記錄不會自動刪除, 要由交易記錄備份後, 再刪除己備份部份, 如同 oracle archive.

charmmih iT邦研究生 5 級 ‧ 2011-12-22 10:25:41 檢舉
  1. 復原模式改為"簡單", 時間不要浪費在備份很大的交易記錄檔上, 由系統自動將交易記錄檔截斷; 2.壓縮交易記錄檔案; 3. 復原模式改為"完整"; 4. 馬上做"完整備份"; 5.排程做"交易記錄備份". 建議做這些作業時, 找離峰時間作業.

我要發表回答

立即登入回答