SQLSERVER2008R2 T-SQL備份指令碼

germany006發表於2015-10-09
背景:
使用管理---&gt維護計劃--&gt新增備份計劃--&gt報錯:
訊息
已以使用者 FSLGZ\rfadmin 的身份執行。 Microsoft (R) SQL Server 執行包實用工具  Version 10.0.1600.22 for 64-bit  版權所有 (C) Microsoft Corp 1984-2005。保留所有權利。    SQL Server 執行包實用工具要求 Integration Services 由 SQL Server 2008 的以下某個版本安裝: Standard、Enterprise、Developer 或 Evaluation。若要安裝 Integration Services,請執行 SQL Server 安裝程式並選擇 Integration Services。.  包執行失敗。.  該步驟失敗。

經查,發現是在安裝資料庫時未安裝SSIS包,導致無法使用維護計劃來進行備份。

使用指令碼進行備份:
SQLSERVER2008R2
開啟SQL SERVER 代理---&gt作業---&gt新建作業---&gt在步驟處編寫T-SQL指令碼---&gt設定好計劃任務


T-SQL備份指令碼:

declare @device varchar(50);
declare @filename varchar(50);
declare @filename2 varchar(50);
declare @datetime varchar(50);
declare @weekname varchar(50);
declare @weeknametmp varchar(4);
declare @weekday int;
declare @database varchar(10);
set @weekname=datename(weekday,getdate());
set @datetime =  convert(varchar(20),getdate(),112);
set @weeknametmp=substring(@weekname,3,1);
if (@weeknametmp='一')
set @weekday=1;
else if (@weeknametmp='二')
set @weekday=2;
else if (@weeknametmp='三')
set @weekday=3;
else if (@weeknametmp='四')
set @weekday=4;
else if (@weeknametmp='五')
set @weekday=5;
else if (@weeknametmp='六')
set @weekday=6;
else if (@weeknametmp='日')
set @weekday=0;
set @datetime =  convert(varchar(20),getdate()-@weekday,112);
set @device= 'QQTT_backup' + @datetime;                                     --備份裝置名,隨便命名吧
set @filename='D:\BACKUP\QQTT_backup'+@datetime+ '_all.bak'        --備份檔案儲存路徑及檔名
set @filename2='E:\BACKUP\QQTT_backup'+@datetime+ '_all.bak'   
set @filename3='D:\BACKUP\QQTT_backup'+@datetime+ '_incr.bak'
set @filename4='E:\BACKUP\QQTT_backup'+@datetime+ '_incr.bak'
set @database='QQTT'
if (@weekname='星期日') 
begin
execute sp_addumpdevice 'disk',@device,@filename;                            --新增備份裝置
backup database @database to disk=@filename mirror to disk=@filename2 with format,init,checksum;         --加上with checksum為校驗備份檔案的引數
                                                                                                 --mirror to disk=XXX  表示映象備份,相當於在不同路徑做了2份一樣的備份
exec sp_dropdevice @device;                                                            --刪除備份裝置
end
else
begin
execute sp_addumpdevice 'disk',@device,@filename2;
backup database @database to disk=@filename3 mirror to disk=@filename4 with differential,format,init,checksum;         --加上with differential為差異備份的引數
exec sp_dropdevice @device;
end


另外還可以新增其他引數:
WITH CHECKSUM        --校驗備份檔案
WITH FORMAT            --覆蓋任何現有的備份和建立一個新的媒體集,可以避免一些由於備份設定產生的錯誤.
WITH INIT                   --覆蓋同名的備份檔案
WITH COMPRESSION  --壓縮備份
WITH DIFFERENTIAL   --差異備份
WITH BUFFERCOUNT = 10  --指定用於備份操作的 I/O 緩衝區總數
WITH MAXTRANSFERSIZE = 4194304  --指定要在 SQL Server 和備份介質之間使用的最大傳輸單元(位元組)
取值範圍:  65536 位元組 (64 KB) 的倍數至4194304位元組(4M)

檢視所有備份裝置
select * from sys.backup_devices
刪除備份裝置
exec sp_dropdevice 'QQTT_backup20151009'


注意:
備份語句還可以備份多個備份集(存放多個目錄路徑)
例如:
BACKUP DATABASE [databasename]
TO  DISK = 'C:\Backup\BakFile1.bak',  DISK = 'C:\Backup\BakFile2.bak',  WITH FORMAT, INIT,  NAME = 'TEST-完整 資料庫 備份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

也可以用變數替代
backup database @database to disk=@filename,disk=@filename2,@devicewith checksum;  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28371090/viewspace-1813610/,如需轉載,請註明出處,否則將追究法律責任。

相關文章