Sql-Server

第一次執行 sp_delete_backuphistory 對 msdb 事務日誌的影響?

  • October 5, 2020

有一台定期備份數據庫的伺服器,但奇怪的是從未安排過 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 數據庫項目的一部分分發。如果問題比需要一次性清理的單個伺服器更普遍,我會使用此選項進行持續/長期清理。

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