準備鏡像資料庫以進行鏡像 (SQL Server)

適用于:SQL Server (所有支援的版本)

資料庫擁有者或系統管理員必須確認鏡像資料庫已經建立且做好鏡像的準備,才能啟動資料庫鏡像工作階段。 建立新的鏡像資料庫時,最少需要建立主體資料庫的完整備份,以及一個後續記錄備份,並使用 WITH NORECOVERY 將這兩者同時還原到鏡像伺服器執行個體。

本主題描述如何使用 SQL Server Management Studio 或 Transact-SQL,在SQL Server中準備鏡像資料庫。

開始之前

規格需求

  • 主體和鏡像伺服器實例必須在相同版本的SQL Server上執行。 雖然鏡像伺服器有可能擁有較高版本的 SQL Server,但是只有在仔細規劃的升級程序中才建議使用這個組態。 在這種組態中,您會遇到自動容錯移轉的風險,此時資料移動會自動暫停,因為資料無法移到較低版本的 SQL Server。 如需詳細資訊,請參閱 升級鏡像執行個體

  • 主體和鏡像伺服器實例必須在相同版本的SQL Server上執行。 如需SQL Server中資料庫鏡像支援的相關資訊,請參閱SQL Server 2017 的版本和支援功能

  • 資料庫必須使用完整復原模式。

    如需詳細資訊,請參閱檢視或變更資料庫 (SQL Server) sys.databases (Transact-SQL) ALTER DATABASE (Transact-SQL)

  • 鏡像資料庫的名稱必須和主體資料庫的名稱相同。

  • 鏡像資料庫必須處於 RESTORING 狀態,鏡像作業才能正常運作。 當準備鏡像資料庫時,您必須使用 RESTORE WITH NORECOVERY 來進行每一項還原作業。 至少需要使用 RESTORE WITH NORECOVERY 還原主體資料庫的完整備份,接著還原所有後續記錄備份。

  • 您打算建立鏡像資料庫的系統必須配備具有足夠空間可以保存鏡像資料庫的磁碟機。

限制事項

  • 您無法鏡像 mastermsdbtempmodel 系統資料庫。

  • 您無法針對屬於 AlwaysOn 可用性群組的資料庫進行鏡像處理。

建議

  • 使用主體資料庫的最近完整資料庫備份或最近差異資料庫備份。

  • 如果主體資料庫上排程執行記錄備份作業的頻率很高,您可能必須停用備份作業,直到鏡像啟動為止。

  • 如果可行的話,鏡像資料庫的路徑 (包括磁碟機代號) 應該要和主體資料庫的路徑完全相同。

    如果檔案路徑必須不同,例如,如果主體資料庫在磁碟機 'F:',但鏡像系統沒有 F: 磁碟機,您就必須在 RESTORE 陳述式中包含 MOVE 選項。

    重要事項

    在鏡像工作階段期間,若要加入檔案但又不影響工作階段,則檔案路徑必須同時存在兩個伺服器上。 因此,如果您在建立鏡像資料庫時移動資料庫檔案,之後在鏡像資料庫上加入檔案的作業可能會失敗,而且導致鏡像暫停。 如需處理失敗的建立檔案作業的詳細資訊,請參閱針對資料庫鏡像組態進行疑難排解 (SQL Server)

  • 如果主體資料庫有任何全文檢索目錄,建議您看到資料庫鏡像和Full-Text目錄 (SQL Server)

  • 對於實際執行的資料庫,您一定要備份至其他裝置。

安全性

備份資料庫時,TRUSTWORTHY 設為 OFF。 因此,新鏡像資料庫上的 TRUSTWORTHY 一律為 OFF。 您必須採取額外的設定步驟,以確保資料庫在容錯移轉之後的可信度。 如需詳細資訊,請參閱 將鏡像資料庫設定為使用 Trustworthy 屬性 (Transact-SQL)

如需啟用鏡像資料庫的資料庫主要金鑰之自動解密的相關資訊,請參閱 設定加密鏡像資料庫

權限

資料庫擁有者或系統管理員。

若要準備現有的鏡像資料庫以重新啟動鏡像

如果鏡像已經移除,而且鏡像資料庫仍處於 RECOVERING 狀態,您就可以重新啟動鏡像。

  1. 至少取得主體資料庫上的一個記錄備份。 如需詳細資訊,請參閱備份交易記錄 (SQL Server)

  2. 在鏡像資料庫上,使用 RESTORE WITH NORECOVERY 來還原自從移除鏡像之後對主體資料庫進行的所有記錄備份。 如需詳細資訊,請參閱還原交易記錄備份 (SQL Server)

若要準備新的鏡像資料庫

準備鏡像資料庫

注意

如需此程式的 Transact-SQL 範例,請參閱本節稍後 的範例 (Transact-SQL)

  1. 連接到主體伺服器執行個體。

  2. 建立主體資料庫的完整資料庫備份或差異資料庫備份。

  3. 一般來說,您必須至少取得主體資料庫上的一個記錄備份。 不過,如果資料庫剛剛建立,而且尚未建立任何記錄備份,或是如果復原模式剛剛從 SIMPLE 變更為 FULL,可能就不需要有記錄備份。

  4. 除非備份位於可從兩個系統存取的網路磁碟機上,否則請將資料庫備份和記錄備份複製到將裝載鏡像伺服器執行個體的系統。

  5. 連接到鏡像伺服器執行個體。

  6. 使用 RESTORE WITH NORECOVERY,藉由還原完整資料庫備份來建立鏡像資料庫,然後可選擇將最近的差異資料庫備份還原到鏡像伺服器執行個體。

    注意

    如果您是按檔案群組逐一還原資料庫,請務必還原整個資料庫。

  7. 使用 RESTORE WITH NORECOVERY,將任何未完成的記錄備份套用到鏡像資料庫。

範例 (Transact-SQL)

開始進行資料鏡像工作階段之前,您必須先建立鏡像資料庫。 您應該在開始鏡像工作階段之前完成此動作。

此範例使用 AdventureWorks2012 範例資料庫,預設會使用簡單復原模式。

  1. 若要搭配 AdventureWorks2012 資料庫使用資料庫鏡像,請將其修改為使用完整復原模式:

    USE master;  
    GO  
    ALTER DATABASE AdventureWorks   
    SET RECOVERY FULL;  
    GO  
    
  2. 將資料庫的復原模式從 SIMPLE 修改為 FULL 之後,請建立完整備份,以便用於建立鏡像資料庫。 因為剛剛才變更復原模式,所以指定了 WITH FORMAT 選項以建立新的媒體集。 要區分在完整復原模式與簡單復原模式建立的備份時,此方式非常有協助。 為了完成這個範例的目的,我們會在資料庫所在的相同磁碟機上建立備份檔案 (C:\AdventureWorks.bak)。

    注意

    對於實際執行的資料庫,您必須備份至其他裝置。

    在主體伺服器執行個體 (於 PARTNERHOST1) 上,為主體資料庫建立完整備份,陳述式如下:

    BACKUP DATABASE AdventureWorks   
        TO DISK = 'C:\AdventureWorks.bak'   
        WITH FORMAT  
    GO  
    
  3. 將完整備份複製到鏡像伺服器。

  4. 使用 RESTORE WITH NORECOVERY,將完整備份還原到鏡像伺服器執行個體上。 還原命令需視主體與鏡像資料庫的路徑是否相同而定。

    • 若路徑相同:

      在鏡像伺服器執行個體 (於 PARTNERHOST5) 上,還原完整備份,陳述式如下:

      RESTORE DATABASE AdventureWorks   
          FROM DISK = 'C:\AdventureWorks.bak'   
          WITH NORECOVERY  
      GO  
      
    • 若路徑不同:

      若鏡像資料庫的路徑與主體資料庫的路徑不同 (例如,磁碟機代號不同),則建立鏡像資料庫時,還原作業中必須包含 MOVE 子句。

      重要事項

      若主體與鏡像資料庫的路徑名稱不同,您將無法新增檔案。 這是因為接收新增檔案的記錄檔時,鏡像伺服器執行個體會嘗試將新檔案放在主體資料庫所使用的位置。

      例如,下列命令會將位於 C:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\Data\ 之主體資料庫的備份還原到鏡像資料庫所在的不同位置 D:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\Data\

      RESTORE DATABASE AdventureWorks  
         FROM DISK='C:\AdventureWorks.bak'  
         WITH NORECOVERY,   
            MOVE 'AdventureWorks_Data' TO   
               'D:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\Data\AdventureWorks_Data.mdf',   
            MOVE 'AdventureWorks_Log' TO  
               'D:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\Data\AdventureWorks_Log.ldf';  
      GO  
      
  5. 建立完整備份之後,您必須在主體資料庫上建立記錄備份。 例如,下列 Transact-SQL 語句會將記錄備份到上述完整備份所使用的相同檔案:

    BACKUP LOG AdventureWorks   
        TO DISK = 'C:\AdventureWorks.bak'   
    GO  
    
  6. 您必須先套用必要的記錄備份 (以及任何後續記錄備份),才能啟動鏡像。

    例如,下列 Transact-SQL 語句會從 C:\AdventureWorks.bak 還原第一個記錄:

    RESTORE LOG AdventureWorks   
        FROM DISK = 'C:\AdventureWorks.bak'   
        WITH FILE=1, NORECOVERY  
    GO  
    
  7. 如果啟動鏡像之前執行了任何額外的記錄備份,您也必須使用 WITH NORECOVERY,依序將這些記錄備份全部還原到鏡像伺服器。

    例如,下列 Transact-SQL 語句會從 C:\AdventureWorks.bak 還原兩個額外的記錄:

    RESTORE LOG AdventureWorks   
        FROM DISK = 'C:\AdventureWorks.bak'   
        WITH FILE=2, NORECOVERY  
    GO  
    RESTORE LOG AdventureWorks   
        FROM DISK = 'C:\AdventureWorks.bak'   
        WITH FILE=3, NORECOVERY  
    GO  
    

如需設定資料庫鏡像、顯示安全性設定、準備鏡像資料庫、設定夥伴和新增見證的完整範例,請參閱設定資料庫鏡像 (SQL Server)

後續操作:準備鏡像資料庫之後

  1. 如果您在最近的 RESTORE LOG 作業之後已經建立任何額外的記錄備份,則必須使用 RESTORE WITH NORECOVERY 手動套用每一份額外的記錄備份。

  2. 啟動鏡像工作階段。 如需詳細資訊,請參閱使用 Windows 驗證建立資料庫鏡像會話 (SQL Server Management Studio) 或使用Windows 驗證建立資料庫鏡像會話 (Transact-SQL)

  3. 如果已停用主體資料庫上的備份作業,請重新啟用這項作業。

  4. 您必須在鏡像開始之後執行額外的設定步驟,以確保資料庫在容錯移轉之後的可信度。 如需詳細資訊,請參閱 設定鏡像資料庫以使用 Trustworthy 屬性 (Transact-SQL)

相關工作

另請參閱

資料庫鏡像 (SQL Server)
資料庫鏡像和Always On可用性群組的傳輸安全性 (SQL Server)
設定資料庫鏡像 (SQL Server)
備份並還原全文檢索目錄與索引
資料庫鏡像和Full-Text目錄 (SQL Server)
資料庫鏡像和複寫 (SQL Server)
BACKUP (Transact-SQL)
RESTORE (Transact-SQL)
RESTORE 引數 (Transact-SQL)