SQLSERVER壓縮資料檔案的用處有多大
前奏:
前些天因為客戶那邊的問題(其實是盜版問題),只能使用免費的SQLSERVER EXPRESS版本
express版本的SQLSERVER的整個資料庫的資料檔案大小限制為4GB,就是說不管你用多少個檔案組,多少個輔助資料檔案ndf
所有加起來都不能超過4GB(mdf+ndf)
交易記錄檔大小沒有限制
因為我們的資料庫只是使用了一個主要資料檔案GPOS.mdf和一個交易記錄檔GPOS.ldf
本人的解決思路:
本人在想如果是這樣,到時候就收縮資料庫唄
在網上查了一下資料:由於DBCC SHRINKDATABASE一次運行會同時影響所有的檔案(包括資料檔案和記錄檔),使用者不能
指定每個檔案的目標大小,其結果可能不能達到預期的要求。所以建議先做好規劃,對每個檔案確定預期目標,然後使用DBCC SHRINKFILE
來一個檔案一個檔案地做比較穩妥
本來很開心的,網上資料都說使用DBCC SHRINKFILE來收縮檔案,那這樣就不怕拉 (我不怕不怕拉~)
但是,往下看那個資料:
1、首先瞭解資料檔案當前的使用方式
收縮量的大小不可能超過當前檔案的空閑空間的大小。如果想要壓縮資料庫的大小,首先要確認資料檔案裡的確有相應未被使用的空間。如果空間都在
使用中,那就要確認大量佔用空間的對象(表格或索引)。然後通過歸檔曆史資料,先把空間釋放出來
2、主要資料檔案(primary file)是不能被清空的。能被完全清空的只有輔助資料檔案
3、如果要把一個檔案組整個清空,要刪除分配在這個檔案組上的對象(表格或索引),或者把他們移到其他檔案組上。
DBCC SHRINKFILE不會幫你做這個工作
把資料檔案裡面資料和對象清除完、確認資料檔案(組)有足夠的空閑空間後,管理員就可以使用DBCC SHRINKFILE來縮小或清空指定檔案了。
如果要縮小檔案,就填上需要的target_size,如果要清空檔案,就選擇EMPTYFILE
根據上面資料所說,本人的解決思路是:
1、確認大量佔用空間的對象(表格或索引)。然後通過歸檔曆史資料,先把空間釋放出來再壓縮資料檔案
2、重建索引,把一些資料頁面重排一次,原先的頁面被釋放,所佔用的分區也被釋放,再去DBCC SHRINKFILE
如果你們有其他解決方案希望你們告訴我,謝謝您們了!!