自動刪除備份和交易日誌會留下損壞的備份點

自動刪除備份和交易日誌會留下損壞的備份點

TLDR:預設日誌傳送作業和維護計畫正在從磁碟中刪除舊文件,但備份仍顯示在 SSMS 中,這使得顯示「復原」視窗非常緩慢。如何正確刪除舊的.trn/.bak?


(Azure 虛擬機器、Windows Server 2016 Datacenter (10.0)、Microsoft SQL Server Web(2017 相容等級)、SMMS 17.3)

(顯示的日期採用 YYYY-MM-DD 或 DD-MM-YYYY 格式,採用 24 小時制)

管理資料庫既不屬於我的技能範圍,也不屬於我的工作描述,但我的任務是在 MS Sql Server 上準備備份,因此請在這個主題上將我視為外行人。

我決定每天建立完整的資料庫備份(當然複製到外部儲存),為了方便起見,在伺服器上保留一些備份,刪除舊的備份,然後用交易日誌填充漏洞,以便在幾天內進行日點復原。經過谷歌搜尋後,我在測試資料庫上做了以下操作:

  1. 建立手動完整備份,因為日誌傳送需要它 - 這裡不會失敗

  2. 產生預設交易日誌傳送計劃任務並刪除舊檔案。效果很好,每分鐘都會發送垃圾郵件 .trn 並從磁碟中刪除舊文件 日誌傳送作業

  3. 設定維護計劃以在午夜建立和刪除測試資料庫的舊完整備份 - 這裡也沒有問題

維護計劃

  1. 讓它從週五運行到週一,.trn 和 .bak 都已正確建立和刪除,因此我有兩天的備份可以使用: 紀錄

  2. 嘗試從備份恢復,這導致了交易文件遺失的問題。開啟任務\復原\資料庫非常非常慢,SMMS 正在為大約 10MB .trn 的空資料庫消耗 100% 磁碟幾分鐘。對於沒有自動完整備份的資料庫,它列出了所有已建立的.trn(首先是手動完整備份),顯然伴隨著「檔案未找到」錯誤。為上次完整備份和還原工作正常,但僅顯示備份清單仍然很慢,瀏覽時間軸也很慢(幾分鐘「沒有回應」)。

我找到了用於獲取腳本歷史記錄的腳本https://www.mssqltips.com/sqlservertip/1601/script-to-retrieve-sql-server-database-backup-history-and-no-backups/(稍作修改以傳回感興趣的資料庫的所有備份)

SELECT 
CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server, 
msdb.dbo.backupset.database_name, 
msdb.dbo.backupset.backup_start_date, 
msdb.dbo.backupset.backup_finish_date, 
msdb.dbo.backupset.expiration_date, 
CASE msdb..backupset.type 
WHEN 'D' THEN 'Database' 
WHEN 'L' THEN 'Log' 
END AS backup_type, 
msdb.dbo.backupset.backup_size, 
msdb.dbo.backupmediafamily.logical_device_name, 
msdb.dbo.backupmediafamily.physical_device_name, 
msdb.dbo.backupset.name AS backupset_name, 
msdb.dbo.backupset.description 
FROM msdb.dbo.backupmediafamily 
INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id 
WHERE 
--(CONVERT(datetime, msdb.dbo.backupset.backup_start_date, 102) >= GETDATE() - 7) 
--and
 [database_name] = 'test'
ORDER BY 
msdb.dbo.backupset.database_name, 
msdb.dbo.backupset.backup_finish_date 

它包括刪除的 .trn 和 .bak 檔案: 在此輸入影像描述

依此類推,截至目前,總共 29682 個備份點。

我希望“恢復”視窗能夠再次響應,並且我有兩個測試資料庫可以自由測試。我可以安全地清除備份清單嗎?我怎樣才能使它自動化,以很好地配合我目前的日程安排工作?

我在資料庫和作業系統上擁有完全的管理權限,完全的創意控制和虛擬機器上留下的大量資源,因此對可能的解決方案幾乎沒有任何限制。

答案1

可以使用sp_delete_backuphistory預存程序清除舊歷史記錄。請注意,它不知道您是否刪除了哪些內容,但它會清除比您提供的 X 日期更舊的歷史記錄。

一旦清除了大量的備份條目,它就會變得快速回應。透過呼叫 SP,將目前日期減去 X 天數作為作業的最後一步,可以輕鬆地將其包含到代理作業中。

相關內容