共用方式為


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

更新: 2005 年 12 月 5 日

資料庫快照集並不是備援儲存體,因此無法針對磁碟錯誤或其他損毀類型提供保護。但是,如果線上資料庫發生使用者錯誤,您可以將資料庫還原到發生錯誤之前的資料庫快照集。

ms189281.note(zh-tw,SQL.90).gif重要事項:
建立定期備份和測試還原計劃對於保護資料庫很重要。如果您必須將來源資料庫還原到您建立資料庫快照集當時的時間點,請實作可讓您執行此作業的備份原則。

還原會使用還原的資料庫覆寫原始來源資料庫。還原為快照集會卸除所有全文檢索目錄。

ms189281.note(zh-tw,SQL.90).gif重要事項:
在還原之前,您應該先詳讀<還原至資料庫快照集>中的資訊。

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

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

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

    如需有關卸除快照集的詳細資訊,請參閱<如何:卸除資料庫快照集 (Transact-SQL)>。如果資料庫使用完整復原模式,您應該在還原之前備份記錄。如需詳細資訊,請參閱<如何:備份交易記錄檔 (SQL Server Management Studio)>或<如何:在資料庫損毀時備份交易記錄檔 (Transact-SQL)>。

  3. 執行還原作業。

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

    RESTORE DATABASE <database_name> FROM DATABASE_SNAPSHOT =<database_snapshot_name>

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

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

    ms189281.note(zh-tw,SQL.90).gif附註:
    在還原作業期間,將無法使用快照和來源資料庫。來源資料庫和快照集都會標示為「還原中」。如果還原作業期間發生錯誤,它會在資料庫重新啟動時嘗試完成還原。
  4. 如果建立資料庫快照集之後,資料庫擁有者有變更過,您可以更新所還原資料庫的資料庫擁有者。

    ms189281.note(zh-tw,SQL.90).gif附註:
    還原的資料庫會保留資料庫快照集的權限和組態 (例如,資料庫擁有者和復原模式)。
  5. 啟動資料庫。

  6. 您可以選擇性地備份還原的資料庫,特別是當它使用完整 (或大量記錄) 復原模式時。如需有關備份資料庫的資訊,請參閱<如何:備份資料庫 (SQL Server Management Studio)>或<如何:建立完整資料庫備份 (Transact-SQL)>。

範例

本節包含還原資料庫到資料庫快照集的範例。

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

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

請參閱

工作

如何:建立資料庫快照集 (Transact-SQL)
如何:卸除資料庫快照集 (Transact-SQL)
如何:檢視資料庫快照集 (SQL Server Management Studio)

概念

資料庫快照集如何運作
資料庫鏡像和資料庫快照集

其他資源

RESTORE (Transact-SQL)
SQL Server Management Studio 教學課程
sys.databases (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助