Sql-Server

縮小鏡像和複製的數據庫

  • November 15, 2018

我從生產數據庫中刪除了一張大表

磁碟上的目前 DB 大小 = 264 GB

表的實際大小 = 32.164 GB

我要縮小這個數據庫。雖然不推薦,但這是我必須回收這個空間的唯一選擇,我會為這個表做每月存檔,所以我確信它不會再增長到這個大小

我的問題是

這個數據庫有鏡像和複製,我該怎麼辦?

有沒有辦法在不停機的情況下做到這一點?如果不是,應該有什麼計劃以最少的停機時間來做到這一點

收縮只是影響索引還是對性能有其他影響?

收縮會對事務日誌產生巨大影響,進而會極大地影響鏡像的性能,我認為在較小程度上影響複製。

我的建議是:不要嘗試揮動魔杖並立即恢復 200+GB ,而是逐步分塊進行。每晚或每 6 小時或在其他合理的時間間隔內,執行以下命令之一:

-- day 1
DBCC SHRINKFILE(data_file_name, 245000);

-- day 2
DBCC SHRINKFILE(data_file_name, 232500);

-- day 3
DBCC SHRINKFILE(data_file_name, 225000);

是的,這不太令人滿意,而且顯然需要更長的時間,但誰在乎呢?你現在有多需要那個空間?恕我直言,如果沒有大規模的破壞,您的功能和使用者將會變得更好。

另一種方法是關閉鏡像和/或複制,並在收縮操作完成後完全重新初始化它們(並且您已經備份了日誌並將其設置為正常大小)。但我認為一次縮小一點遠沒有那麼複雜、破壞性和風險那麼大。

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