--DBCC SHRINKDATABASE
--收縮數據庫
--USAGE:
dbcc SHRINKDATABASE
(
{ 'database_name' | database_id | 0 }
[ , target_percent ]
[ , { NOTRUNCATE | TRUNCATEONLY } ]
)
[ WITH NO_INFOMSGS ]
--DBCC SHRINKFILE
--收縮指定數據庫中特定文件
dbcc SHRINKFILE
(
{ 'file_name' | file_id }
{
[ , EMPTYFILE]
| [ [, target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]
}
)
[ WITH NO_INFOMSGS ]
--NOTRUNCATE
--在指定或不指定target_percent 的情況下,將已分配的頁從數據文件的末尾移動到該文件前面的未分配頁。文件末尾的可用空間不會返回給操作系統,文件的物理大小也不會更改。因此,指定NOTRUNCATE 時,文件看起來未收縮。
--NOTRUNCATE 只適用於數據文件。日志文件不受影響。
--TRUNCATEONLY
--將文件末尾的所有可用空間釋放給操作系統,但不在文件內部執行任何頁移動。數據文件只收縮到最后分配的區。
--如果隨TRUNCATEONLY 指定了target_size,則會忽略該參數。
--TRUNCATEONLY 只適用於數據文件
--1. SHRINKFILE 並不獨占數據文件,且可以隨時終止,停止之前收縮的工作將被保留。
--2. SHRINKFILE 針對區做收縮,將使用的區前移,將不使用的區刪除,但不會合並區,也不合並和刪除區中的頁,因此當區中空頁過多或者頁面填充度較低時,SHRINKFILE並不能釋放過多的空間。
--3. 如果碎片過多,可以先重建索引后再做SHRINKFILE
--在SHRINKFILE后,需檢查文件的真實大小,可能文件已被收縮,但SHRINKFILE結果顯示沒有收縮
--由於sp_spaceused這個存儲過程依賴於SQLSERVER存儲在一些系統視圖里的空間使用統計信息來算出結果,但是SQLSERVER並不保證實時更新空間使用統計信息。尤其是數據庫剛剛發生大的變化之后,sp_spaceused的結果常常不准確
--參考:
--http://www.cnblogs.com/lyhabc/articles/3219563.html
--http://msdn.microsoft.com/zh-cn/library/ms189493.aspx