失敗時完全備份
我制定了一個維護計劃,每週日對所有數據庫進行完整備份,每天進行差異備份。此外,每小時會觸發一次日誌備份。
但是,此架構存在問題。如果我在一周中添加一個新數據庫,差異和日誌備份作業將失敗,因為它們缺少完整備份映像。
因此,無論差異備份或日誌備份作業失敗,我都需要能夠進行完整備份。
例如,我可以添加一個新步驟來進行完整備份,以防前一個失敗。但是,此完整備份作業將在我的所有數據庫上執行,但我只想使用失敗的數據庫。
有什麼方法可以要求 SQL 伺服器對新數據庫進行完整備份?它可以在數據庫創建之後或在差異或日誌備份作業失敗的情況下。
不幸的是,SQL Server 中的維護計劃在功能上非常有限,據我所知,您正在尋找的選項並不存在。
正如 Shanky 所提到的,您需要查看其他一些工具,例如 ( Ola Hallengren ) 的優秀開源備份和維護解決方案。
這具有您正在尋找的特定備份參數@ChangeBackupType = ‘Y’。從文件
DatabaseBackup 檢查 sys.master_files 中的 different_base_lsn 以確定是否可以執行差異備份。如果無法進行差異備份,則預設跳過數據庫。或者,您可以將 ChangeBackupType 設置為 Y 以改為執行完整備份。
我認為盡快知道您沒有
FULL
在新創建的數據庫上進行備份是明智的(而不是等待作業失敗),但我不確定我是否會嘗試自動化FULL
備份在創建時。您可能會考慮Chad Churchwell在 SQL Server 中創建新數據庫時生成電子郵件警報的方法
他建議創建一個SERVER TRIGGER,可用於在任何時候創建新數據庫時向 DBA 組發送電子郵件通知。
以下是 Chad 文章中的範例腳本:
USE master GO CREATE TRIGGER [ddl_trig_database] ON ALL SERVER FOR CREATE_DATABASE AS declare @results varchar(max) declare @subjectText varchar(max) declare @databaseName VARCHAR(255) SET @subjectText = 'DATABASE Created on ' + @@SERVERNAME + ' by ' + SUSER_SNAME() SET @results = (SELECT EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')) SET @databaseName = (SELECT EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]', 'VARCHAR(255)')) --Uncomment the below line if you want to not be alerted on certain DB names --IF @databaseName NOT LIKE '%Snapshot%' EXEC msdb.dbo.sp_send_dbmail @profile_name = 'SQLAlerts', @recipients = 'SQLDBAGROUP@YOURDOMAIN.COM', @body = @results, @subject = @subjectText, @exclude_query_output = 1 --Suppress 'Mail Queued' message GO
以下項目需要在您的環境中進行自定義。
- @profile_name = 用於發送電子郵件的數據庫郵件配置文件。
- @recipients = 要將電子郵件發送到組織內的通訊組電子郵件地址。
如果您確實想在創建數據庫時生成自動完整備份,則可以
BACKUP
在觸發器中動態生成命令。