DECLARE @strSql VARCHAR(1000) ,@strSqlCmd VARCHAR(1000) ,@timeDateDiff INT ,@strWeekDay VARCHAR(20) SET @timeDateDiff= DATEDIFF(week,0,GETDATE()) SET @timeDateDiff= CASE DATEPART(WEEKDAY,GETDATE()) WHEN 1 THEN @timeDateDiff-1 ELSE @timeDateDiff END SET @strSql='D:\DataBase\BackData\MyDb_' -- 備份目錄及備份的檔案頭 +CONVERT(CHAR(8),DATEADD(week,@timeDateDiff,0),112) -- 完全備份日期 +'_0100' -- 完全備份時間 +'差異備份' +'_'+CONVERT(CHAR(8),GETDATE(),112) -- 差異備份日期 +'_0300' -- 差異備份時間 SET @strWeekDay= CASE DATEPART(WEEKDAY,GETDATE()) WHEN 1 THEN '星期天' WHEN 2 THEN '星期一' WHEN 3 THEN '星期二' WHEN 4 THEN '星期三' WHEN 5 THEN '星期四' WHEN 6 THEN '星期五' WHEN 7 THEN '星期六' END SET @strSqlCmd= 'ECHO 壓縮開始日期: '+CONVERT(VARCHAR(20),GETDATE(),120)+' '+@strWeekDay+' >> D:\DataBase\BackData\CompressDataBase\MyDb_'+CONVERT(CHAR(6),DATEADD(week,@timeDateDiff,0),112)+'.txt' EXEC master.dbo.XP_CMDSHELL @strSqlCmd,NO_OUTPUT SET @strSqlCmd= 'RAR.EXE A -R '+@strSql+'.RAR '+@strSql+'.BAK >> D:\DataBase\BackData\CompressDataBase\MyDb_'+CONVERT(CHAR(6),DATEADD(week,@timeDateDiff,0),112)+'.txt' PRINT LEN(@strSqlCmd) PRINT (@strSqlCmd) EXEC master.dbo.XP_CMDSHELL @strSqlCmd,NO_OUTPUT SET @strSqlCmd= 'ECHO 壓縮結束日期: '+CONVERT(VARCHAR(20),GETDATE(),120)+' '+@strWeekDay+' >> D:\DataBase\BackData\CompressDataBase\MyDb_'+CONVERT(CHAR(6),DATEADD(week,@timeDateDiff,0),112)+'.txt' EXEC master.dbo.XP_CMDSHELL @strSqlCmd,NO_OUTPUT 這時我們已經建立好了步驟,只是現在建立作業調度的時候有些變化,我們看圖五: 圖五 建立差異備份作業調度 對比完全備份建立的作業調度,在這裡我們可以看到,我們選擇的時間是除了周日以外的每天夜裡3點的時候,自動執行此次調度。 當然時間是自己靈活分配的,如資料發生的變化比較大,我們可以選擇每天,然後頻率選擇發生周期性短一點,這樣我們資料在遭到破壞的時候,我們就可以及時的恢複了。 如果在SQL Server2000中,我們可以建立如上的作業就可以對資料進行備份了,而對於SQL Server2005,還有一點細微的變化,因為它預設是不支援xp_cmdshell執行命令的,SQL Server 已封鎖元件 'xp_cmdshell' 的 程式 'sys.xp_cmdshell' 之存取,因為此元件已經由此伺服器的安全性組態關閉。系統管理員可以使用sp_configure來啟用 'xp_cmdshell' 的使用。所以我們得恢複其執行命令: 用下面一句話就可以瞭解決了。
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE; |
|