Sql-Server

縮小海量數據庫文件

  • April 12, 2018

我有一個客戶,它為一家養老金公司提供 2 TB 的數據庫。該數據庫包含許多大文件。

他們想歸檔所有不是今年的東西。到目前為止沒問題 - 我只會為批次插入和刪除做一個 while 循環,然後在每個批次之備份份日誌。

執行歸檔後,我可以縮小數據庫嗎?如果我們談論移動的 400GB 可能需要多長時間?

對於這樣的伺服器來說,這聽起來像是一個非常繁重的過程。我可以在周末做,但我不確定它是否會及時停止執行。

首先,這需要預先提到,僅在實際需要時才收縮文件,因為您會導致大量索引碎片,之後您需要清理這些碎片。

話雖如此,如果您擔心執行整個收縮文件所需的時間,那麼您可以分階段進行(總體上需要更長的時間,但技術上可以更輕鬆地停止和恢復),我個人使用它來放棄它在 2GB 階段(在高事務數據庫上也很有用,以減少操作爭用以縮小我發現的更小的塊)

DECLARE @value int = 2048
DECLARE @target int = 1536
SET @value = (@value *1024)-2048

WHILE @value >= (@target*1024)
BEGIN
   DBCC SHRINKFILE(filename ,@value)
   SET @value = @value - 2048
END

代替

@value以 MB 為單位的文件的目前大小和

@target你想縮小到什麼尺寸和

filename使用您希望縮小的文件的名稱

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