Sql-Server

DBCC SHRINKFILE 命令中哪些參數是預設參數?

  • September 13, 2022

我知道收縮不是一個好習慣,但如果我只執行 ie: dbcc shrinkfile (filename,1024),這是預設的嗎?notruncate還是truncateonly?我在文件中沒有找到任何關於它的資訊。

NOTRUNCATE 將分配的頁面從數據文件的末尾移動到文件前面的未分配頁面,無論是否指定 target_percent。文件末尾的可用空間不會返回給作業系統,文件的物理大小也不會改變。因此,如果指定了 NOTRUNCATE,則文件似乎不會收縮。

NOTRUNCATE 僅適用於數據文件。日誌文件不受影響。

FILESTREAM 文件組容器不支持此選項。

……

TRUNCATEONLY 將文件末尾的所有可用空間釋放給作業系統,但不執行文件內的任何頁面移動。數據文件僅收縮到最後分配的範圍。

如果使用 TRUNCATEONLY 指定,則忽略 target_size。

TRUNCATEONLY 選項不會移動日誌中的資訊,但會從日誌文件的末尾刪除不活動的 VLF。FILESTREAM 文件組容器不支持此選項。

預設行為是不做這些事情。該命令的這兩個修飾符都會DBCC SHRINKFILE更改預設行為。

預設情況下,DBCC SHRINKFILE會將數據移動到文件的開頭(在數據文件中),然後從文件的末尾釋放可用空間(在日誌文件和數據文件中)。

NOTRUNCATE選項只會將數據移動到文件的開頭(在數據文件中),而不釋放文件末尾的可用空間。因為日誌文件不會在文件內移動數據,所以在事務日誌文件上使用此選項時沒有意義。

TRUNCATEONLY選項將僅從文件末尾釋放可用空間,而不移動數據文件中的任何數據。因為日誌文件不會在文件中移動數據,所以這實際上日誌文件的預設行為。

引用自:https://dba.stackexchange.com/questions/316814