Sql-Server
第一次執行 sp_delete_backuphistory 對 msdb 事務日誌的影響?
有一台定期備份數據庫的伺服器,但奇怪的是從未安排過 sp_delete_backuphistory,因此 msdb 比預期的要大。該表中的備份歷史可以追溯到 5 年,但只需要最近 30 天的備份歷史。如果我們執行 sp_delete_backuphistory 僅保留 30 天的歷史記錄,事務日誌空間不足是否存在風險?MSDB 使用簡單的恢復模式。MSDB 日誌文件目前在 C 盤上為 388544kb。C盤有45g的空閒空間。
您可能希望以較小的塊執行刪除,以避免此一次性清理的日誌文件過度增長,特別是因為您的
msdb
數據庫位於 C:\ 驅動器上。如果您有 5 年的數據要清理,最簡單的方法可能是簡單地呼叫
sp_delete_backuphistory
幾次,以清除 6 個月或 1 年的數據塊的備份歷史記錄。例如:
EXEC sp_delete_backuphistory @oldest_date = '20150101'; --Jan 2015 EXEC sp_delete_backuphistory @oldest_date = '20160101'; --Jan 2016 EXEC sp_delete_backuphistory @oldest_date = '20170101'; --Jan 2017 EXEC sp_delete_backuphistory @oldest_date = '20180101'; --Jan 2018 EXEC sp_delete_backuphistory @oldest_date = '20190101'; --Jan 2019 EXEC sp_delete_backuphistory @oldest_date = '20200101'; --Jan 2020
只需執行此程序並嘗試使用
@oldest_date
,您就可以很容易地確定您可以多快完成分塊。根據數據庫的數量和備份的頻率,每年進行一次塊可能就足夠了。如果這是一台伺服器,一次性清理,這將是我使用的方法。您還可以編寫腳本定義
sp_delete_backuphistory
並創建自己的副本,以更有效地進行清理。Erik Darling創建了一個替代方案,可在 GitHub 上作為我自己的DBA 數據庫項目的一部分分發。如果問題比需要一次性清理的單個伺服器更普遍,我會使用此選項進行持續/長期清理。