SQL Server自動備份並壓縮

來源:互聯網
上載者:User

 這裡有兩個方法,其中第一個比較繁瑣但是比較詳細,第二個較為簡單,推薦用第二個方法!

 方法一: 

SQL Server代理沒有啟動,我們先把其啟動,然後建立立一個作業,名稱命名為“MyDb完全備份”,在分類下面選擇“資料庫維護”,然後建立立作業第一個步驟,步驟名為“對資料進行完全備份”,然後在命令框中輸入如下的SQL代碼:

如果

 DECLARE @strSql   VARCHAR(1000)
 ,@strSqlCmd VARCHAR(1000)
 ,@timeDateDiff INT
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'    -- 完全備份時間
 +'完全備份' 
SET @strSqlCmd= @strSql+'.BAK'    --備份檔案的副檔名 
BACKUP DATABASE [MyDb] 
 TO  DISK = @strSqlCmd WITH INIT 
 ,NOUNLOAD 
 ,NAME = N'MyDb 備份'
 ,NOSKIP 
 ,STATS = 10
 ,NOFORMAT 

 

   操作一: 

    然後開始執行對資料庫的 壓縮,在步驟中再建立一個作業,步驟名為“壓縮資料庫”,然後在命令框中輸入如下的SQL代碼: 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'    -- 完全備份時間
 +'完全備份'
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 

 

  操作二:    完成後我們可以看到操作步驟的對話方塊,三,資料完全備份的步驟:    我們對照,注意兩點,第一個是步驟1“成功時”這一列的顯示,當成功的時候轉到下一步,“失敗時”當失敗的時候失敗後退出,步驟2“成功時”當成功的時候成功後退出,“失敗時”當失敗時失敗後退出。確保兩個步驟對資料操作的正常。  再執行“調度”一欄,主要實現在什麼時候執行這些作業,我們定在每周日一點的時候開始執行,四:  

這樣就可以建立好對資料庫的整個完全備份了。

  有時我們資料在遭到破壞的時候,而在恢複到上次的整個備份時,就會產生很多丟失的資料了,這時我們就必須還得建立另外一種備份的機制—差異備份。

  步驟還和上面一樣,我們建立一個作業,命名為“MyDb差異備份”,在步驟裡面同樣是建立兩個步驟,分別是差異備份和差異壓縮,步驟一在命令框中輸入內容如下: DECLARE @strSql   VARCHAR(1000)
 ,@strSqlCmd VARCHAR(1000)
 ,@timeDateDiff INT
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 @strSqlCmd= @strSql+'.BAK'    --備份檔案的副檔名 
BACKUP DATABASE [webEIMS2008] 
 TO  DISK = @cSqlCmd WITH INIT 
 ,NOUNLOAD 
 ,DIFFERENTIAL 
 ,NAME = N'MyDb差異備份'
 ,NOSKIP 
 ,STATS = 10
 ,NOFORMAT 

 

  我們可以看到,差異備份除了檔案名稱命名格式不一樣外,就在備份執行SQL語句時增加了了下DIFFERENTIAL參數,然後再執行。

 

  步驟二在命令框中執行如下:View Code

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;

 

 

利用自動壓縮 WINRAR 實現 SQL SERVER  面為您介紹的方法可以實現SQL SERVER自動壓縮,有了SQL SERVER自動壓縮,就不必每天再浪費時間進行手動的壓縮了。
  當SQL資料庫大於2G時XP_MAKECAB擴充預存程序壓縮失敗,結合WINDOWS 作業系統的任務計劃,建立命令列下的批次檔(.BAT),實現每天 SQL SERVER自動壓縮,如下:
  1、SQL SERVER自動備份
  2、COPY WINRAR目錄到以下批次檔所在的目錄
  3、用文字編輯器建立批次檔(.BAT),如下內容: @echo off
echo.
echo.
color a
cls
@echo off
echo.
echo                 歡迎來到Database Backup壓縮批處理_dudumao
echo.
echo.
echo.
echo.                    ....正在自動壓縮備份資料....
echo ------------------------------------------------------------------------------
echo.
echo.
echo.
echo.
echo.
@echo off
if not exist zsimcmis_db_%date:~0,4%%date:~5,2%%date:~8,2%1830.bak goto existfile   --檢查是否存在未被壓縮Database Backup檔案
goto backup
:backup
echo 已經找到備份好的備份檔案zsimcmis_db_%date:~0,4%%date:~5,2%%date:~8,2%1830.bak
echo .
echo !!!提示:正在壓縮備份檔案....!!!
echo .
echo !!!提示:正在將備份檔案zsimcmis_db_%date:~0,4%%date:~5,2%%date:~8,2%1830.bak壓縮到G:\Cabfiles\zsimcmis_db_%date:~0,4%%date:~5,2%%date:~8,2%2000.RAR檔案中.......   --只是顯示螢幕而已,中間的檔案名稱沒實際用處
WinRAR\winrar a -as -ibck G:\Cabfiles\zsimcmis_db_.rar -m3 -agyyyymmddhhmmss zsimcmis_db_%date:~0,4%%date:~5,2%%date:~8,2%1830.bak      --什麼不知道意思,WINRAR命令列的參數參考一下。
goto end
:existfile
echo.
echo !!!備份失敗!!!
echo 沒有找到已經備份好的備份檔案zsimcmis_db_%date:~0,4%%date:~5,2%%date:~8,2%1830.bak
echo.
echo.
echo.
pause
goto end
:end
echo 操作完畢 

 

  其中:XP   system c:\> md   d:\%Date:~0,4%%Date:~5,2%%Date:~8,2%

     2k   system c:\> md   d:\%Date:~4,4%%Date:~9,2%%Date:~12,2%

 

  4、在WIN的任務計劃中,建立運行計劃,命令就是運行上以批次檔就是OK!不必每天手工壓縮了。。。

 

方法二

  建立兩個步驟,第一步備份出BAK資料庫檔案,第二步打包壓縮Database Backup檔案後並刪除原備份檔案

  執行備份的命令:

declare @filename varchar(200)
set @filename='D:\'+convert(char(10),getdate(),120)+'.bak'  --設定備份檔案的路徑和檔案名稱
print @filename
backup database[DatabaseName] to disk=@filename with NOINIT,NOUNLOAD,NAME='backup',NOSKIP,STATS=10,NOFORMAT  --執行備份

 

  壓縮並刪除源檔案的命令:declare @file varchar(200)
set @file='c:\winrar.exe a -ep -df D:\DatebaseName_'+convert(char(10),getdate(),120)+'.rar D:\'+convert(char(10),getdate(),120)+'.bak'  --將壓縮備份檔案並刪除源檔案的winrar命令列命令
exec master..xp_cmdshell @file  --執行命令

 

  winrar命令列的壓縮命令是:[winrar路徑] a [參數] [壓縮後的路徑] [需要壓縮的檔案路徑],這是本文需要用到的命令格式。

  a就是winrar壓縮檔的命令參數
  -ep參數的作用是不壓縮檔的完整路徑,也就是指壓縮指定的檔案。
  -df參數的作用就是壓縮後刪除源檔案
  後面命令的意思就是把D盤根目錄下以當天日期命名的備份檔案壓縮到D盤根目錄,並命名為當天日期的rar檔案

  一般預設下winrar的程式都是安裝在C:\Program Files\WinRAR下的,但是由於其中的Program Files目錄名中有空格,CMD命令列中是不支援有空格的名字的,所以把程式複製到一個簡單的路徑方便調用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.