Sql-Server-2008-R2
SQL Server 備份,內嵌 SQL 的作業
我有一個 SQL Server 2008 R2 實例,其中包含許多來來去去的數據庫。每次數據庫離開伺服器或另一個數據庫彈出時,我都需要執行一個殺手常式:
我在 SQL Server Management Studio 中執行此腳本
SET NOCOUNT ON SELECT 'BACKUP DATABASE [' + name + '] TO DISK = N''C:\Program Files\Microsoft SQL Server\MSSQL10_50.HART\MSSQL\Backup\' + 'BCK\' +name + '.bak'' WITH NOFORMAT, INIT, NAME = N''Full Database Backup'', SKIP, NOREWIND, NOUNLOAD, STATS = 10' FROM sys.databases WHERE state_desc = 'ONLINE' AND name NOT IN ('master','tempdb','model','msdb','blah','blah2') SET NOCOUNT OFF
,我將結果轉換為文本並將其粘貼到 SQL 代理作業步驟視窗中。
是否有機會將此腳本放入 SQL Server 代理作業中,以便每次數據庫離開或進入我的伺服器時,我不必手動更改我的作業步驟定義?
謝謝!
從某種意義上說,該腳本會創建一個備份,並且每次執行它時您都會覆蓋它……那麼您絕對可以將其放入單個作業的一個步驟中以按您的計劃執行。只需了解每個數據庫只有一個完整備份,如果您需要返回曆史來還原,則無法執行。
您可以對該腳本進行的一項調整以獲取每天的額外備份,只需輸入一個日期值。
Ola 的 SQL Server 備份腳本提供了一個更強大的解決方案,可以在刪除和創建數據庫時優雅地處理。只需設置參數
@database='USER_DATABASES'
即可為您處理此問題,當然還有其他必需的參數。
同意樓上的回答。我強烈建議使用Ola 的備份和索引維護解決方案以及完整性檢查解決方案。
為了解決您的情況,您只需要使用可以作為 sql 代理作業執行的動態 sql,如下所示:
SET NOCOUNT ON declare @sqltext nvarchar(max) = N'' select @sqltext = @sqltext+ N'BACKUP DATABASE [' + name + '] TO DISK = N''C:\Program Files\Microsoft SQL Server\MSSQL10_50.HART\MSSQL\Backup\' + 'BCK\' +name + '.bak'' WITH INIT, NAME = N''Full Database Backup'', STATS = 10 ;'+char(10) + 'GO'+char(10) FROM sys.databases WHERE state_desc = 'ONLINE' AND name NOT IN ('master','tempdb','model','msdb','blah','blah2') print @sqltext -- review the output and then uncomment out below -- This will actually run the sql -- exec sp_executesql @sqltext SET NOCOUNT OFF