SQLSERVER壓縮數據文件的用處有多大
前奏:
前些天因為客戶那邊的問題(其實是盜版問題),只能使用免費的SQLSERVER EXPRESS版本
SQLSERVER2005 的express版本的SQLSERVER的整個數據庫的數據文件大小限制為4GB(SQLSERVER2012express版本限制是10G),就是說不管你用多少個文件組,多少個輔助數據文件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
如果你們有其他解決方法希望你們告訴我,謝謝您們了!!