如何:準備鏡像資料庫以進行鏡像 (Transact-SQL)
更新: 2008 年 11 月 17 日
鏡像資料庫必須存在,才能啟動資料庫鏡像工作階段。鏡像資料庫的名稱必須和主體資料庫的名稱相同。資料庫擁有人或系統管理員可以從主體資料庫最近的完整備份,以及至少一個後續記錄備份,來建立鏡像資料庫。鏡像資料庫必須維持在 RESTORING 狀態,鏡像才能正常運作。因此,將備份還原至鏡像資料庫時,您必須一律使用 WITH NORECOVERY 來進行每一項還原作業。
如果鏡像已經移除,而且鏡像資料庫仍處於 RECOVERING 狀態,您就可以重新啟動鏡像。不過,必須先為主體資料庫建立至少一個記錄備份。然後,在鏡像資料庫上,您必須利用 WITH NORECOVERY 來 還原自從移除鏡像之後對主體資料庫進行的所有記錄備份。
附註: |
---|
您無法鏡像 master、msdb、temp 或 model 系統資料庫。 |
程序
建立資料庫來進行資料庫鏡像
請確定主體和鏡像伺服器執行個體都已安裝 Microsoft SQL Server 2005。
請確認資料庫使用完整復原模式。
如需詳細資訊,請參閱<如何:檢視或變更資料庫的復原模式 (SQL Server Management Studio)>或<sys.databases (Transact-SQL)>和<ALTER DATABASE (Transact-SQL)>。
將主體資料庫備份至完整資料庫備份。
如需詳細資訊,請參閱<如何:備份資料庫 (SQL Server Management Studio)>或<如何:建立完整資料庫備份 (Transact-SQL)>。
附註: 此外,您也可以還原現有的完整資料庫備份,而選擇性還原差異資料庫備份,再接著還原每個後續記錄備份。 確認您規劃建立鏡像資料庫的系統上是否已配備具有足夠空間可以保存資料庫的磁碟機。
除非備份位於兩個系統都可以存取的網路磁碟機,否則請將資料庫備份複製到該系統。
若要建立鏡像資料庫,請將完整資料庫備份還原到鏡像伺服器執行個體。RESTORE DATABASE database_name 陳述式必須指定 WITH NORECOVERY,其中 database_name 是要鏡像之資料庫的名稱。
附註: 如果您是按檔案群組逐一還原資料庫,請務必還原整個資料庫。 另外,建議鏡像資料庫的路徑 (包括磁碟機代號) 最好和主體資料庫的路徑完全相同。
如果檔案配置必須不同,比方說,如果主體資料庫在磁碟機 F:,但鏡像系統沒有 F: 磁碟機,您就必須在 RESTORE STATEMENT 中包含 MOVE 選項。
重要事項: 在鏡像工作階段期間,若要加入檔案但又不影響工作階段,則檔案路徑必須同時存在兩個伺服器上。因此,如果您在建立鏡像資料庫時移動資料庫檔案,之後在鏡像資料庫上進行的檔案加入作業可能會失敗,而且會導致鏡像暫停。如需有關處理失敗之檔案建立作業的詳細資訊,請參閱<資料庫鏡像設定疑難排解>。 如需詳細資訊,請參閱<RESTORE (Transact-SQL)>和<RESTORE 引數 (Transact-SQL)>。
一般而言,您至少必須在主體資料庫上建立一個記錄備份,將備份複製到鏡像伺服器,並於鏡像資料庫上加以還原 (使用 WITH NORECOVERY)。不過,如果資料庫剛剛建立,而且尚未建立任何記錄備份,或是如果復原模式剛剛從 SIMPLE 變更為 FULL,可能就不需要有記錄備份。
若要將記錄備份套用到鏡像資料庫,您可以在鏡像伺服器上使用 SQL Server 或 Transact-SQL:
如果在必要的記錄備份之後,在主體資料庫上建立過任何額外的記錄備份,您也必須將這些備份複製到鏡像伺服器,並從最早的記錄開始,將每一個記錄備份套用到鏡像資料庫,且一律使用 WITH NORECOVERY。
安全性注意事項: |
---|
備份資料庫時,TRUSTWORTHY 設為 OFF。因此,新鏡像資料庫上的 TRUSTWORTHY 一律為 OFF。您必須採取額外的設定步驟,以確保資料庫在容錯移轉之後的可信度。如需詳細資訊,請參閱<如何:設定鏡像資料庫以使用 Trustworthy 屬性>。 |
重要事項: |
---|
如果資料庫鏡像已經停止,則必須先將在主體資料庫上建立的所有後續記錄備份套用到鏡像資料庫,然後才能重新啟動鏡像。 |
範例
開始進行資料鏡像工作階段之前,您必須先建立鏡像資料庫。您應該在開始鏡像工作階段之前完成此動作。
此範例使用 AdventureWorks 範例資料庫,依預設採用簡單復原模式。
若要以 AdventureWorks 資料庫來使用資料庫鏡像,請將它修改為使用完整復原模式:
USE master; GO ALTER DATABASE AdventureWorks SET RECOVERY FULL; GO
將資料庫的復原模式從 SIMPLE 修改為 FULL 之後,請建立完整備份,以便用於建立鏡像資料庫。因為剛剛才變更復原模式,會指定 WITH FORMAT 選項以建立新的媒體集。要區分在完整復原模式與簡單復原模式建立的備份時,此方式非常有幫助。為了完成此範例的目的,會在資料庫所在的相同磁碟機上建立備份檔 (
C:\AdventureWorks.bak
)。附註: 對於實際執行的資料庫,您必須備份至其他裝置。 在主體伺服器執行個體 (於
PARTNERHOST1
) 上,為主體資料庫建立完整備份,陳述式如下:BACKUP DATABASE AdventureWorks TO DISK = 'C:\AdventureWorks.bak' WITH FORMAT GO
將完整備份複製到鏡像伺服器。
使用 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\Dat
a\
。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
建立完整備份之後,您必須在主體資料庫上建立記錄備份。例如,下列 Transact-SQL 陳述式會將記錄備份至前一次完整備份所使用的相同檔案:
BACKUP LOG AdventureWorks TO DISK = 'C:\AdventureWorks.bak' GO
您必須先套用必要的記錄備份 (以及任何後續記錄備份),才能啟動鏡像。
例如,下列 Transact-SQL 陳述式會從C:\AdventureWorks.bak
還原第一筆記錄:RESTORE LOG AdventureWorks FROM DISK = 'C:\AdventureWorks.bak' WITH FILE=1, NORECOVERY GO
如果啟動鏡像之前執行了任何額外的記錄備份,您也必須使用 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 Management Studio)
如何:使用 Windows 驗證建立資料庫鏡像工作階段 (Transact-SQL)
概念
準備鏡像資料庫以進行鏡像
資料庫鏡像傳輸安全性
資料庫鏡像和全文檢索目錄
資料庫鏡像概觀
複寫和資料庫鏡像
其他資源
BACKUP (Transact-SQL)
RESTORE 引數 (Transact-SQL)
RESTORE (Transact-SQL)