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

適用於:SQL 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)

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

A. 還原 AdventureWorks 資料庫上的快照集

此範例假設 AdventureWorks2022 資料庫目前只有一個快照集。 如需建立還原資料庫的快照集範例,請參閱建立資料庫快照集 (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 database_id 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)