Sql-Server-2008

失敗時完全備份

  • September 21, 2017

我制定了一個維護計劃,每週日對所有數據庫進行完整備份,每天進行差異備份。此外,每小時會觸發一次日誌備份。

但是,此架構存在問題。如果我在一周中添加一個新數據庫,差異和日誌備份作業將失敗,因為它們缺少完整備份映像。

因此,無論差異備份或日誌備份作業失敗,我都需要能夠進行完整備份。

例如,我可以添加一個新步驟來進行完整備份,以防前一個失敗。但是,此完整備份作業將在我的所有數據庫上執行,但我只想使用失敗的數據庫。

有什麼方法可以要求 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在觸發器中動態生成命令。

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