Sql-Server-2008-R2

SQL Server 備份,內嵌 SQL 的作業

  • December 4, 2016

我有一個 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

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