DBCC SHRINKFILE收缩日志/收缩数据库/收缩文件
DBCC SHRINKFILE
收縮相關(guān)數(shù)據(jù)庫的指定數(shù)據(jù)文件或日志文件大小。
語法
DBCC SHRINKFILE
????(?{?file_name?|?file_id?}
????????{ [?,target_size?]
????????????| [?,?{ EMPTYFILE | NOTRUNCATE | TRUNCATEONLY } ]?
????????}
????)
參數(shù)
file_name
是已收縮文件的邏輯名稱。文件名必須符合標(biāo)識符的規(guī)則。有關(guān)更多信息,請參見使用標(biāo)識符。
file_id
是要收縮的文件的標(biāo)識 (ID) 號。若要獲得文件 ID,請使用 FILE_ID 函數(shù)或在當(dāng)前數(shù)據(jù)庫中搜索?sysfiles。
target_size
是用兆字節(jié)表示的所要的文件大小(用整數(shù)表示)。如果沒有指定,DBCC SHRINKFILE 將文件大小減少到默認(rèn)文件大小。
如果指定?target_size,DBCC SHRINKFILE 將試圖將文件收縮到指定大小。將要釋放的文件部分中的已使用頁將重新定位到保留的文件部分中的可用空間。例如,如果數(shù)據(jù)文件為 10MB,則帶有?target_size?為 8 的 DBCC SHRINKFILE 將導(dǎo)致文件最后 2 MB 中所有已用頁重新分配到文件前 8 MB 中的任何可用槽中。DBCC SHRINKFILE 不會將文件收縮到小于存儲文件中的數(shù)據(jù)所需要的大小。例如,如果使用 10MB 數(shù)據(jù)文件中的7 MB,帶有?target_size?為 6 的 DBCC SHRINKFILE 語句只能將該文件收縮到 7 MB,而不能收縮到 6 MB。
EMPTYFILE
將所有數(shù)據(jù)從指定文件中遷移到同一文件組中的其它文件。Microsoft? SQL Server? 不再允許將數(shù)據(jù)放在用于 EMPTYFILE 選項的文件上。該選項允許使用 ALTER DATABASE 語句除去文件。
NOTRUNCATE
導(dǎo)致將釋放的文件空間保留在文件中。
當(dāng)與?target_size?一起指定 NOTRUNCATE 時,釋放的空間不會釋放給操作系統(tǒng)。DBCC SHRINKFILE 的唯一影響是將已使用的頁從?target_size?行上面重新定位到文件的前面。當(dāng)未指定 NOTRUNCATE 時,所有釋放的文件空間返回給操作系統(tǒng)。
TRUNCATEONLY
導(dǎo)致文件中的任何未使用的空間釋放給操作系統(tǒng),并將文件收縮到上一次分配的大小,從而減少文件大小,而不移動任何數(shù)據(jù)。不嘗試將行重新定位到未分配頁。如果使用 TRUNCATEONLY,將忽略?target_size。
注釋
DBCC SHRINKFILE 適用于當(dāng)前數(shù)據(jù)庫中的文件。將上下文切換到數(shù)據(jù)庫,以發(fā)出引用該特定數(shù)據(jù)庫中文件的 DBCC SHRINKFILE 語句。有關(guān)更改當(dāng)前數(shù)據(jù)庫的更多信息,請參見?USE。
所生成的數(shù)據(jù)庫不能比?model?數(shù)據(jù)庫更小。
使用 DBCC SHRINKFILE 以將文件減小到比其最初創(chuàng)建時更小。之后,文件的最小大小重置為新指定的大小。
若要刪除在文件中可能出現(xiàn)的任何數(shù)據(jù),請在執(zhí)行ALTER DATABASE 之前執(zhí)行 DBCC SHRINKFILE('file_name', EMPTYFILE)。
要收縮的數(shù)據(jù)庫不必在單用戶模式下;收縮文件時,同時其他用戶可以在數(shù)據(jù)庫中工作。不必在單用戶模式下運行 SQL Server 以對系統(tǒng)數(shù)據(jù)庫進(jìn)行收縮。
對于日志文件,SQL Server 使用?target_size?以計算整個日志的目標(biāo)大小;因此,target_size?是收縮操作完成后日志中的可用空間大小。之后,整個日志的目標(biāo)大小可以解釋為每個日志文件的目標(biāo)大小。DBCC SHRINKFILE 嘗試立即將每個物理日志文件收縮至其目標(biāo)大小。如果虛擬日志中的所有邏輯日志部分都沒有超出日志文件的目標(biāo)大小,該文件將成功截斷,DBCC SHRINKFILE 完成且不顯示任何消息。然而,如果虛擬日志中的邏輯日志部分超出目標(biāo)大小,則 SQL Server 釋放盡可能多的空間并發(fā)出一條消息。該信息告訴您需要執(zhí)行什么操作來移動文件末尾超出虛擬日志的邏輯日志部分。執(zhí)行完該操作后,可以重新發(fā)出 DBCC SHRINKFILE 命令以釋放剩余的空間。有關(guān)收縮事務(wù)日志的更多信息,請參見收縮事務(wù)日志。
因為日志文件只能收縮到虛擬日志文件邊界,所以不可能將日志文件收縮到比虛擬日志文件更小(即使現(xiàn)在沒有使用該文件)。例如,可以將數(shù)據(jù)庫的 1 GB 日志文件收縮到只有 128 MB。有關(guān)截斷的更多信息,請參見截斷事務(wù)日志。有關(guān)確定虛擬日志文件大小的更多信息,請參見虛擬日志文件。
結(jié)果集
下表描述結(jié)果集內(nèi)的列。
DbIdSQL Server 試圖收縮的文件的數(shù)據(jù)庫標(biāo)識號。FileIdSQL Server 試圖收縮的文件的文件標(biāo)識號。CurrentSize文件當(dāng)前占用的 8KB 頁數(shù)。MinimumSize文件可以占用的最小 8KB 頁數(shù)。這與文件的最小大小或最初創(chuàng)建時的大小相對應(yīng)。UsedPages文件當(dāng)前使用的 8KB 頁數(shù)。EstimatedPagesSQL Server 估計文件能夠收縮到的 8KB 頁數(shù)。
權(quán)限
DBCC SHRINKFILE 權(quán)限默認(rèn)授予?sysadmin?固定服務(wù)器角色或?db_owner?固定數(shù)據(jù)庫角色的成員且不可轉(zhuǎn)讓。
示例
下例將?UserDB?用戶數(shù)據(jù)庫中名為 DataFil1 的文件收縮到 7 MB。
USE UserDB
GO
DBCC SHRINKFILE (DataFil1, 7)
GO
?
原文參見"http://www.yesky.com/imagesnew/software/tsql/ts_dbcc_8b51.htm"
轉(zhuǎn)載于:https://www.cnblogs.com/gered/p/9366256.html
總結(jié)
以上是生活随笔為你收集整理的DBCC SHRINKFILE收缩日志/收缩数据库/收缩文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 枚举类型使用
- 下一篇: BZOJ3245: 最快路线 拆点dij