將資料庫還原成資料庫快照集

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

如果線上資料庫中的資料已經損毀,在某些情況下,將資料庫還原成發生損毀之前的資料庫快照集可能是從備份還原資料庫的正確替代方式。 例如,還原資料庫可用於反轉最近發生的嚴重使用者錯誤,例如誤將資料表卸除。 不過,在快照集之後進行的所有變更都將遺失。

開始之前

限制事項

在下列狀況下,不支援還原:

  • 資料庫有多個快照集。 您打算還原的目標資料庫只能有一個快照集,才能進行還原。

  • 任何唯讀或壓縮的檔案群組存在資料庫中。

  • 建立快照集時原本處於線上狀態的所有檔案,現在都變成離線狀態。

在還原資料庫之前,請仔細考慮以下限制:

  • 還原不適用於媒體復原。 資料庫快照集是不完整的資料庫檔案複本,因此如果資料庫或資料庫快照集已損毀,很可能無法從快照集還原。 此外,即使可以還原,但是在損毀的情況下還原也不太可能會更正問題。 因此,建立定期備份和測試還原計畫是保護資料庫的基本措施。 如需詳細資訊,請參閱 SQL Server 資料庫的備份與還原

    注意

    如果您必須能夠將來源資料庫還原到您建立資料庫快照集當時的時間點,請使用完整復原模式並實作可讓您執行此作業的備份原則。

  • 還原的資料庫會覆寫原始的來源資料庫,因此自從建立快照集以來對資料庫進行的任何更新都將遺失。

  • 還原作業也會覆寫舊的記錄檔並重建記錄檔。 所以,您無法將還原的資料庫向前復原至發生使用者錯誤的時間點。 因此,我們建議您先備份記錄檔,然後再還原資料庫。

    注意

    雖然您不能藉由還原原始記錄檔來向前復原資料庫,但原始記錄檔中的資訊對於重建失去的資料還是非常有用。

  • 還原會中斷記錄備份鏈結。 因此,您必須先進行完整資料庫備份或檔案備份,然後才能進行已還原資料庫的記錄備份。 我們建議您進行完整資料庫備份。

  • 在還原作業期間,將無法使用快照集和來源資料庫。 源資料庫和快照集都標示為「還原中」。如果在還原作業期間發生錯誤,當資料庫再次啟動時,還原作業會嘗試完成還原。

  • 已還原之資料庫的中繼資料,將與建立快照時的中繼資料相同。

  • 還原會卸除所有全文檢索目錄。

必要條件

請確定來源資料庫和資料庫快照集符合下列必要條件:

安全性

權限

任何擁有來源資料庫之 RESTORE DATABASE 權限的使用者都可以將它還原成建立資料庫快照集時的狀態。

如何將資料庫還原成資料庫快照集 (使用 Transact-SQL)

若要將資料庫還原成資料庫快照集

注意

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

  1. 識別您要將資料庫還原成哪一個資料庫快照集。 您可以在 SQL Server Management Studio 中檢視資料庫上的快照集, (請參閱 檢視 SQL Server) (資料庫快照 集) 。 此外,您可以從sys.databases (Transact-SQL) 目錄檢視的source_database_id資料行,識別檢視的源資料庫。

  2. 卸除任何其他資料庫快照集。

    如需卸載快照集的資訊,請參閱 卸載資料庫快照集 (Transact-SQL) 。 如果資料庫使用完整復原模式,您應該在還原之前備份記錄。 如需詳細資訊,請參閱 備份交易記錄 (SQL Server) 當資料庫損毀時備份交易記錄 (SQL Server)

  3. 執行還原作業。

    還原作業需要來源資料庫上的 RESTORE DATABASE 權限。 若要還原資料庫,請使用下列 Transact-SQL 陳述式:

    RESTORE DATABASE 資database_name FROM DATABASE_SNAPSHOT =database_snapshot_name

    其中 database_name 是來源資料庫,而 database_snapshot_name 是要用來還原資料庫的快照集名稱。 請注意,在此陳述式中,您必須指定快照名稱,而非備份裝置。

    如需詳細資訊,請參閱 RESTORE (Transact-SQL)

    注意

    在還原作業期間,將無法使用快照和來源資料庫。 源資料庫和快照集都標示為「還原中」。如果在還原作業期間發生錯誤,它會嘗試在資料庫再次啟動時完成還原。

  4. 如果建立資料庫快照集之後,資料庫擁有者有變更過,您可以更新所還原資料庫的資料庫擁有者。

    注意

    還原的資料庫會保留資料庫快照集的權限和組態 (例如,資料庫擁有者和復原模式)。

  5. 啟動資料庫。

  6. 您可以選擇性地備份還原的資料庫,特別是當它使用完整 (或大量記錄) 復原模式時。 若要備份資料庫,請參閱 建立完整資料庫備份 (SQL Server)

範例 (Transact-SQL)

本節包含將資料庫還原成資料庫快照集的下列範例:

答。 還原 AdventureWorks 資料庫上的快照集

此範例假設 AdventureWorks2012 資料庫上目前只有一個快照集存在。 如需建立還原資料庫之快照集的範例,請參閱 建立資料庫快照集 (Transact-SQL)

USE master;  
-- Reverting AdventureWorks to AdventureWorks_dbss1800  
RESTORE DATABASE AdventureWorks from   
DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';  
GO  

B. 還原 Sales 資料庫上的快照集

此範例假設 Sales 資料庫中目前有兩個快照集: sales_snapshot0600sales_snapshot1200。 此範例會刪除較舊的快照集,並將資料庫還原到較新的快照集。

如需建立範例資料庫與此範例使用之快照的程式碼,請參閱:

--Test to see if sales_snapshot0600 exists and if it   
-- does, delete it.  
IF EXISTS (SELECT dbid FROM sys.databases  
    WHERE NAME='sales_snapshot0600')  
    DROP DATABASE SalesSnapshot0600;  
GO  
-- Reverting Sales to sales_snapshot1200  
USE master;  
RESTORE DATABASE Sales FROM DATABASE_SNAPSHOT = 'sales_snapshot1200';  
GO  

相關工作

另請參閱

資料庫快照集 (SQL Server)
RESTORE (Transact-SQL)
sys.databases (Transact-SQL)
資料庫鏡像和資料庫快照集 (SQL Server)