如何排程及自動 SQL Server SQL Server Express 中的資料庫備份

文章翻譯 文章翻譯
文章編號: 2019698
全部展開 | 全部摺疊

結論

SQL Server Express 版不提供排程作業或維護計劃,因為這些版本中並未包含 SQL Server 代理程式元件的方式。因此,您必須採用不同的方法來備份資料庫,當您使用這些版本。  

目前 SQL Server 表示使用者可以備份他們的資料庫使用下列方法之一:

使用 SQL Server Management Studio 快速。這會安裝與 SQL Server 表達進階服務或 SQL Server 表達工具組。如需詳細資訊,請移至下列的 Microsoft 開發人員網路 (MSDN) 網站:

建立完整資料庫備份 (SQL Server)

  • 使用異動性 SQL 指令碼所使用的命令的資料庫備份系列。如需詳細資訊,請移至下列 MSDN 網站:

    備份 (交易 SQL)

    本文說明如何使用 Windows 工作排程器搭配考慮改用 SQL 指令碼來自動化 SQL Server 表達的資料庫,在排定的備份。

  • 其他相關資訊

    您一定要照著這些備份 SQL Server 資料庫,藉由使用 Windows 工作排程器的三個步驟:

    步驟 a: 使用 SQL Server Management Studio 明示或 Sqlcmd master 資料庫中建立下列預存程序:

    / / 著作權 (c) 微軟公司。國際著作權公約保護。

    / / 這段程式碼釋放條款

    / / Microsoft 公用授權 (MS PL, http://opensource.org/licenses/ms-pl.html。)

    使用 [母片]
    GO 
    / ****** 物件:預存程序 [dbo]。[sp_BackupDatabases] ****** /
    設定 ANSI_NULLS ON
    設定 QUOTED_IDENTIFIER ON
    -=============================================
    -作者: Microsoft
    -建立日期: 2010年-02-06
    -描述: SQLExpress 的備份資料庫
    -參數 1: 資料庫名稱
    -參數 2: backupType F = 完整、 D = [差異],[L = 記錄檔
    -參數 3: 備份檔案位置
    -=============================================
    建立程序 [dbo]。 [sp_BackupDatabases]
    @ databaseName sysname = null,
    @ backupType CHAR(1),
    @ backupLocation nvarchar(200)
    AS
    SET NOCOUNT ON ;
               
                DECLARE @DBs TABLE
                (
                      ID int IDENTITY PRIMARY KEY,
                      DBNAME nvarchar(500)
                )
               
                 -- Pick out only databases which are online in case ALL databases are chosen to be backed up
                 -- If specific database is chosen to be backed up only pick that out from @DBs
                INSERT INTO @DBs (DBNAME)
                SELECT Name FROM master.sys.databases
                where state=0
                AND name=@DatabaseName
                OR @DatabaseName IS NULL
                ORDER BY Name
               
                -- Filter out databases which do not need to backed up
                IF @backupType='F'
                      BEGIN
    刪除 @ DBs 其中 dbname 引數中 (',tempdb 'Northwind','pubs','AdventureWorks')
    結束
    ELSE IF @ backupType = 有 '
    開始
    刪除 @ DBs 其中 dbname 引數中 ('tempdb' 'Northwind'] 'pubs','主要','AdventureWorks')
    結束
    ELSE IF @ backupType = 'L'
    開始
    刪除 @ DBs 其中 dbname 引數中 ('tempdb' 'Northwind'] 'pubs','主要','AdventureWorks')
    結束
    ELSE
    開始
    傳回
    結束
    -宣告變數
    宣告 @ BackupName varchar(100)
    宣告 @ BackupFile varchar(100)
    宣告 @ dbname 引數的 varchar(300)
    DECLARE @ sql 命令 NVARCHAR(1000)
    DECLARE @ dateTime NVARCHAR(20)
    宣告 @ 迴圈 int
    -迴圈逐一檢查資料庫,一個接一個
    選取 @ 迴圈 = min(ID) FROM @ DBs
    WHILE 迴圈 IS NOT NULL @
    開始
    --一定要在 [dbname 引數] 格式,因為有些還具有-或 _ 名稱中的資料庫名稱
    設定 @ dbname 引數 = '['+(SELECT DBNAME FROM @DBs WHERE ID = @Loop) +'] '
    --設定目前的日期和時間 n yyyyhhmmss 格式
    組 @ 日期時間 = 取代 (轉換 (VARCHAR,GETDATE(),101),'/','') + '_' +取代 (轉換 (VARCHAR、 GETDATE(),108),':','')
    --建立以 path\filename.extension 格式的完整]、 [差異比對及 [記錄檔備份的備份檔案名稱
    如果 @ backupType = 'F'
    設定 @ BackupFile = @ backupLocation + 取代 (取代 (@ dbname 引數,' [','),']',') '_FULL_' + @ 日期時間 + +'。BAK'
    ELSE IF @ backupType = 有 '
    設定 @ BackupFile @ backupLocation + 取代 = (取代 (@ dbname 引數,'[','),']',') '_DIFF_' + @ 日期時間 + +'。BAK'
    ELSE IF @ backupType = 'L'
    設定 @ BackupFile @ backupLocation + 取代 = (取代 (@ dbname 引數,'[','),']',') '_LOG_' + @ 日期時間 + +'。TRN'
    --提供備份存放媒體中的名稱
    如果 @ backupType = 'F'
    設定 @ BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' 完整備份的 '+ @ 日期時間
    如果 @ backupType = 有 '
    設定 @ BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' 差異式備份,' + @ dateTime
    如果 @ backupType = 'L'
    設定 @ BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' 記錄檔備份,' + @ 日期時間
    --產生動態的 SQL 命令,執行
    如果 @ backupType = 'F'
    開始
    組 @ sql 命令 = ' 備份資料庫 ' +@DBNAME+ ' 存到磁碟 = ' ' +@BackupFile+ '' 與初始化, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'
                      END
           IF @backupType = 'D'
                      BEGIN
                   SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH DIFFERENTIAL, INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'        
                      END
           IF @backupType = 'L' 
                      BEGIN
                   SET @sqlCommand = 'BACKUP LOG ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'        
                      END
     
    -- Execute the generated SQL command
           EXEC(@sqlCommand)
     
    -- Goto the next database
    SELECT @Loop = min(ID) FROM @DBs where識別碼 > @ 迴圈
    結束

    步驟 b: 在文字編輯器] 中,建立批次檔名為 Sqlbackup.bat,然後再從下列的範例之一的文字複製到該檔案中,視您的案例而定:

    Example1:SQLEXPRESS 藉由使用 Windows 驗證的本機具名執行個體中的所有資料庫的完整備份

    / / Sqlbackup.bat

    s sqlcmd。 \EXPRESS – E-Q"EXEC sp_BackupDatabases @ backupLocation = 有: \SQLBackups\',@ backupType = 'F'" 

    Example2: SQLEXPRESS,藉由使用 SQLLogin 和其密碼的本機具名執行個體中的所有資料庫的差異式備份

    / / Sqlbackup.bat

    sqlcmd-U SQLLogin-P 密碼-S。 \SQLEXPRESS-Q"EXEC sp_BackupDatabases @ backupLocation = 'D:\SQLBackups'、 @ BackupType = 有 '"

    附註: 在 SQLLogin shouldhave SQL Server 中的最小備份操作員角色。


    範例 3:SQLEXPRESS 藉由使用 Windows 驗證本機具名執行個體中的所有資料庫的記錄檔備份

    / / Sqlbackup.bat

    -S sqlcmd。 \SQLEXPRESS E-Q"EXEC sp_BackupDatabases @ backupLocation='D:\SQLBackups\',@backupType='L'"

    範例 4:完整備份的資料庫中的本機具名執行個體 SQLEXPRESS 藉由使用 Windows 驗證的 USERDB

    / / Sqlbackup.bat

    S sqlcmd。 \SQLEXPRESS E-Q"EXEC sp_BackupDatabases @ backupLocation = 有: \SQLBackups\'、 @ databaseName = 'USERDB' @ backupType = 'F'"

    同樣地,您可以進行差異式備份 USERDB 貼上在會 ' @ backupType參數和貼上 「 L 」 @ backupType參數的 USERDB 記錄檔備份。

    步驟 c:排程的工作,藉由使用 Windows 工作排程器來執行批次檔,您在步驟 b。若要這麼做,請依照下列步驟執行:

    1. 在電腦上正在執行 SQL Server 表達,按一下 [開始、 指向 [所有程式、 都指向 [附屬應用程式、 都指向 [系統工具],然後按一下 [排定的工作。 
    2. 連按兩下 [新增排定的工作 
    3. 在 [排程工作精靈] 中,按一下 [下一步]。 
    4. 按一下 [瀏覽],按一下您在步驟 b,建立批次檔,然後按一下 [開啟 
    5. 鍵入工作名稱SQLBACKUP 每日、,再按 [下一步] 
    6. 指定要執行 「 工作排程的資訊。(我們建議您執行這項工作至少一次每一天)。然後,請按一下 [下一步]。
    7. 輸入使用者名稱] 欄位中,輸入使用者名稱,然後再輸入密碼] 欄位中輸入密碼。

      附註這位使用者應至少指派 BackupOperator 層級角色 SQL Server 如果您正在使用其中一個批次檔,在範例 1、 3 或 4。
    8. 按一下 [下一步,,然後按一下 [完成] 
    9. 執行至少一次排定的工作,以確定備份已成功建立。

      附註SQLCMD 可執行檔的資料夾通常是伺服器的路徑變數之後安裝 SQL Server 之後,但如果 Path 變數中未列出此資料夾,可以找到在< 安裝位置 > \90\Tools\Binn下 (例如: 檔必要 SQL Server\90\Tools\Binn)。

      當您使用本文所述的程序時,會注意下列幾點:

      • 「 Windows 工作排程器服務必須在執行排定的工作階段執行。我們建議您將這項服務的啟動類型設定為自動。這樣可以確保服務會執行即使在重新啟動電腦。
      • 應該是區域的許多要寫入備份的磁碟機上。我們建議您清除舊的檔案,在 [備份] 資料夾定期以確定您並不執行磁碟空間不足。指令碼不包含邏輯,以清除舊的檔案。

      其他參考資料

    屬性

    文章編號: 2019698 - 上次校閱: 2012年6月29日 - 版次: 1.0
    關鍵字:?
    kbmt KB2019698 KbMtzh
    機器翻譯
    重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
    按一下這裡查看此文章的英文版本:2019698
    Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

    提供意見

     

    Contact us for more help

    Contact us for more help
    Connect with Answer Desk for expert help.
    Get more support from smallbusiness.support.microsoft.com