RESTORE (Transact-SQL)

更新: 2006 年 12 月 12 日

還原利用 BACKUP 命令取得的備份。這個命令可讓您執行下列動作:

  • 從完整資料庫備份還原整個資料庫 (完整還原)。
  • 還原部分資料庫 (部分還原)。
  • 將特定檔案、檔案群組或分頁還原到資料庫 (檔案或分頁還原)。
  • 將交易記錄還原到資料庫 (交易記錄還原)。
  • 將資料庫還原到資料庫快照集所擷取的時間點。

如需有關資料庫備份和還原的詳細資訊,請參閱<在 SQL Server 中備份和還原資料庫>。

ms186858.note(zh-tw,SQL.90).gif附註:
如需引數的描述,請參閱<RESTORE 引數 (Transact-SQL)>。

主題連結圖示Transact-SQL 語法慣例

語法

--To restore a complete database from a full database backup (a Complete Restore):
RESTORE DATABASE { database_name | @database_name_var } 
[ FROM <backup_device> [ ,...n ] ]
[ WITH 
   [ { CHECKSUM | NO_CHECKSUM } ]
   [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]
   [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ] 
   [ [ , ] KEEP_REPLICATION ] 
   [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 
   [ [ , ] MEDIAPASSWORD = { mediapassword |
                    @mediapassword_variable } ] 
   [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ] 
                [ ,...n ] 
   [ [ , ] PASSWORD = { password | @password_variable } ] 
    [ [ , ] BLOCKSIZE = { blocksize | @blocksize_variable } ] 
    [ [ , ] BUFFERCOUNT = { buffercount | @buffercount_variable } ] 
   [ [ , ]    MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable } ] 
   [ [ , ] ENABLE_BROKER ] 
   [ [ , ] ERROR_BROKER_CONVERSATIONS ] 
   [ [ , ] NEW_BROKER ] 
   [ [ , ] { RECOVERY | NORECOVERY | STANDBY = 
          {standby_file_name | @standby_file_name_var } 
   } ] 
   [ [ , ] REPLACE ] 
   [ [ , ] RESTART ] 
   [ [ , ] RESTRICTED_USER ] 
   [ [ , ] { REWIND | NOREWIND } ] 
   [ [ , ] { UNLOAD | NOUNLOAD } ] 
   [ [ , ] STATS [ = percentage ] ] 
    [ [ , ] { STOPAT = { 'date_time' | @date_time_var } 
    |  STOPATMARK = { 'lsn:lsn_number' }
              [ AFTER 'datetime' ] 
    |  STOPBEFOREMARK = { 'lsn:lsn_number' }
             [ AFTER 'datetime' ]
   } ] 
]
[;]

<backup_device> ::=
{ 
   { logical_backup_device_name |
            @logical_backup_device_name_var }
   | { DISK | TAPE } = { 'physical_backup_device_name' |
              @physical_backup_device_name_var } 
} 

--Restore part of a database (a partial restore):
RESTORE DATABASE { database_name | @database_name_var } 
  <files_or_filegroups> [ ,...n ] 
 [ FROM <backup_device> [ ,...n ] ] 
 [ WITH 
     PARTIAL 
   [ [ , ] { CHECKSUM | NO_CHECKSUM } ]
   [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]
   [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ] 
   [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 
   [ [ , ] MEDIAPASSWORD = { mediapassword |
                      @mediapassword_variable } ] 
   [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ] 
                [ ,...n ] 
   [ [ , ] PASSWORD = { password | @password_variable } ] 
   [ [ , ] NORECOVERY ] 
   [ [ , ] REPLACE ] 
   [ [ , ] RESTART ] 
   [ [ , ] RESTRICTED_USER ]
   [ [ , ] { REWIND | NOREWIND } ] 
   [ [ , ] { UNLOAD | NOUNLOAD } ] 
   [ [ , ] STATS [=percentage ] ] 
   [ [ , ] { STOPAT = { 'date_time' | @date_time_var } 
    |  STOPATMARK = { 'lsn:lsn_number' }
              [ AFTER 'datetime' ] 
    |  STOPBEFOREMARK = { 'lsn:lsn_number' }
             [ AFTER 'datetime' ] 
   } ] 
]
[;]

<backup_device> ::=
{ 
   { logical_backup_device_name |
            @logical_backup_device_name_var }
   | { DISK | TAPE } = { 'physical_backup_device_name' |
              @physical_backup_device_name_var } 
} 

<files_or_filegroups> ::= 
{ 
   FILE = { logical_file_name_in_backup | @logical_file_name_in_backup_var } 
   |
   FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } 
   | 
   READ_WRITE_FILEGROUPS
} 

--To Restore Specific Files, Filegroups, or Pages: 
RESTORE DATABASE { database_name | @database_name_var } 
     <file_or_filegroup_or_pages> [ ,...n ]
[ FROM <backup_device> [ ,...n ] ] 
[ WITH 
   [ { CHECKSUM | NO_CHECKSUM } ]
   [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]
   [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ] 
   [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 

   [ [ , ] MEDIAPASSWORD = { mediapassword |
                      @mediapassword_variable } ]
   [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ] 
                [ ,...n ] 
   [ [ , ] PASSWORD = { password | @password_variable } ] 
   [ [ , ] NORECOVERY ] 
   [ [ , ] REPLACE ] 
   [ [ , ] RESTART ] 
   [ [ , ] RESTRICTED_USER ]
   [ [ , ] { REWIND | NOREWIND } ] 
   [ [ , ] { UNLOAD | NOUNLOAD } ] 
   [ [ , ] STATS [ =percentage ] ] 
]
[;]

<backup_device> ::=
{ 
   { logical_backup_device_name |
            @logical_backup_device_name_var }
   | { DISK | TAPE } = { 'physical_backup_device_name' |
              @physical_backup_device_name_var } 
} 

<file_or_filegroup_or_pages> ::=
{ 
   FILE = { logical_file_name_in_backup | @logical_file_name_in_backup_var }
   | FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } }
      | PAGE = 'file:page [ ,...n ]'  
} 

--To Restore a Transaction Log:
RESTORE LOG { database_name | @database_name_var } 
     [ <file_or_filegroup_or_pages> [ ,...n ] ]
[ FROM <backup_device> [ ,...n ] ] 
[ WITH 
   [ { CHECKSUM | NO_CHECKSUM } ]
   [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]
   [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ] 
   [ [ , ] KEEP_REPLICATION ] 
   [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 
   [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable }      ]
   [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ] 
                [ ,...n ] 
   [ [ , ] PASSWORD = { password | @password_variable } ] 
   [ [ , ] { RECOVERY | NORECOVERY | STANDBY = 
          {standby_file_name | @standby_file_name_var } }
   ] 
   [ [ , ] REPLACE ] 
   [ [ , ] RESTART ] 
   [ [ , ] RESTRICTED_USER ]
   [ [ , ] { REWIND | NOREWIND } ] 
   [ [ , ] { UNLOAD | NOUNLOAD } ] 
   [ [ , ] STATS [=percentage ] ] 
   [ [ , ] { STOPAT = { 'date_time' | @date_time_var } 
    |  STOPATMARK = { 'mark_name' | 'lsn:lsn_number' }
              [ AFTER 'datetime' ] 
    |  STOPBEFOREMARK = { 'mark_name' | 'lsn:lsn_number' }
             [ AFTER 'datetime' ] 
   } ] 
]
[;]

<backup_device> ::=
{ 
   { logical_backup_device_name |
            @logical_backup_device_name_var }
   | { DISK | TAPE } = { 'physical_backup_device_name' |
              @physical_backup_device_name_var } 
} 

<file_or_filegroup_or_pages> ::=
{ 
   FILE = { logical_file_name_in_backup | @logical_file_name_in_backup_var }
   | FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } }
      | PAGE = 'file:page [ ,...n ]'  
} 

--To Revert a Database to a Database Snapshot:   
RESTORE DATABASE { database_name | @database_name_var } 
FROM DATABASE_SNAPSHOT = database_snapshot_name 

引數

如需引數的描述,請參閱<RESTORE 引數 (Transact-SQL)>。

備註

在離線還原期間,如果指定的資料庫在使用中,RESTORE 會在一小段延遲之後,強迫使用者結束作業。如果是非主要檔案群組的線上還原,除非正在還原的檔案群組在離線中,否則,資料庫會保持使用中的狀態。還原的資料會取代指定資料庫中的任何資料。

如需有關資料庫復原的詳細資訊,請參閱<瞭解在 SQL Server 中還原和復原備份的運作方式>和<實作 SQL Server 資料庫的還原實例>。

只要作業系統支援資料庫的定序,便可以執行跨平台的還原作業,即使在不同類型的處理器之間,也是如此。

RESTORE 可以在發生錯誤之後,重新啟動。另外,您也可以指示 RESTORE 不論是否發生錯誤,一律繼續作業,它會還原盡可能多的資料 (請參閱 CONTINUE_AFTER_ERROR 選項)。如需詳細資訊,請參閱<回應由損毀備份造成的 SQL Server 還原錯誤>。

在明確或隱含的交易中,不允許使用 RESTORE。

損毀的 master 資料庫必須利用特殊程序來還原。如需詳細資訊,請參閱<還原 master 資料庫的考量>。

Microsoft SQL Server 2005 所建立的備份無法還原到舊版 SQL Server 中。

還原資料庫會清除 SQL Server 執行個體的計劃快取。清除計劃快取會導致重新編譯所有後續執行計劃,而且可能會導致查詢效能突然暫時下降。在 SQL Server 2005 Service Pack 2 中,針對每次清除計劃快取的快取存放區,SQL Server 錯誤記錄檔會包含下列參考訊息:「由於某些資料庫維護或重新設定作業,SQL Server 的 '%s' 快取存放區 (計劃快取的一部分) 發生 %d 次快取存放區排清。」只要快取發生排清,這個訊息就會每五分鐘記錄一次。

還原實例

SQL Server 2005 支援各種還原實例:

回溯相容性

若要維護回溯相容性,您可以在 RESTORE 陳述式語法中使用下列關鍵字:

  • LOAD 關鍵字可用來取代 RESTORE 關鍵字。
  • TRANSACTION 關鍵字可用來取代 LOG 關鍵字。
  • DBO_ONLY 關鍵字可用來取代 RESTRICTED_USER 關鍵字。

啟用 Vardecimal 儲存格式的資料庫

請使用 Vardecimal 儲存格式正確備份和還原工作,但 Database Engine 必須至少升級至 SQL Server 2005 Service Pack 2。您不能將壓縮資料庫的備份還原至未壓縮的資料庫。您也不能將壓縮 Service Pack 2 資料庫的備份還原至舊版 SQL Server。如需有關 Vardecimal 儲存格式的詳細資訊,請參閱<將十進位資料儲存成可變長度>。

比較 RECOVERY 和 NORECOVERY

RESTORE 陳述式利用 [ RECOVERY | NORECOVERY ] 選項來控制回復:

  • NORECOVERY 指定不進行回復。這使向前復原能夠繼續循序執行下一個陳述式。
    在這個情況下,還原順序可以還原其他備份,並將它們向前復原。
  • RECOVERY (預設值) 表示在完成目前備份的向前復原之後,應該執行回復。
    復原資料庫需要還原的整個資料集 (「向前復原集」) 與資料庫一致。如果向前復原集尚未向前復原到足以與資料庫一致的範圍,且指定了 RECOVERY,Database Engine 就會發出錯誤。

重做還原

您不可能恢復還原的效果,不過,您可以針對個別檔案重新開始,以消除資料複製和向前復原的效果。若要重新開始,請還原所需要的檔案,再重新執行向前復原。例如,如果您不慎還原太多記錄備份,超出您想要的停止點,您就必須重新開始這個順序。

您可以還原受影響檔案的整個內容來中止和重新開始還原順序。

還原全文檢索資料

在 SQL Server 2005 的完整還原期間,全文檢索資料會與其他資料庫資料一併還原。還原作業會將全文檢索目錄當做檔案來處理。當使用正規 RESTORE DATABASE database_name FROM backup_device 語法時,還原資料庫檔也會還原全文檢索檔案。

您也可以利用 RESTORE 陳述式,將全文檢索資料還原到替代位置,以及執行全文檢索資料的差異還原、檔案和檔案群組還原,和差異檔案和檔案群組還原。另外,RESTORE 只能連同資料庫資料一起還原全文檢索檔案。

ms186858.note(zh-tw,SQL.90).gif附註:
您不能將全文檢索目錄還原到根目錄中。

如需詳細資訊,請參閱<備份與還原全文檢索目錄>。

資料庫設定和還原

在還原期間,大部分可以利用 ALTER DATABASE 來設定的資料庫選項,都會重設為備份結束時的有效值。

ms186858.note(zh-tw,SQL.90).gif附註:
這個行為不同於在 SQL Server 2000 之前版本的 SQL Server。

不過,使用 WITH RESTRICTED_USER 選項會覆寫使用者存取選項設定的這個行為。這項設定一律設在 RESTORE 陳述式之後,其中包括 WITH RESTRICTED_USER 選項。

備份與還原歷程記錄資料表

SQL Server 包含備份與還原歷程記錄資料表,以便用來為每個伺服器執行個體進行追蹤備份和還原活動。當執行還原時,也會修改備份歷程記錄資料表。如需這些資料表的資訊,請參閱<檢視備份相關資訊>。

RESTORE LOG

從 SQL Server 2005 開始,RESTORE LOG 可以包括一份檔案清單,可讓您在向前復原期間建立檔案。當記錄備份包含檔案加入資料庫時所撰寫的記錄,便使用這個項目。

ms186858.note(zh-tw,SQL.90).gif附註:
如果是使用完整或大量記錄復原模式的資料庫,在大部分情況下,SQL Server 2005 都會要求您先備份記錄結尾,再還原資料庫。除非 RESTORE 陳述式包含 WITH REPLACE 或 WITH STOPAT 子句,否則,未備份記錄結尾,便還原資料庫,會產生錯誤。如需有關結尾記錄備份的詳細資訊,請參閱<結尾記錄備份>。

線上還原

ms186858.note(zh-tw,SQL.90).gif附註:
只有在 SQL Server 2005 Enterprise Edition 中才能進行線上還原。

當支援線上還原時,如果資料庫在線上,檔案還原和分頁還原會自動成為線上還原,另外,也會在分次還原的初始階段之後,還原次要檔案群組。

ms186858.note(zh-tw,SQL.90).gif附註:
線上還原可以包括延遲交易

如需詳細資訊,請參閱<執行線上還原>。

分次還原

分次還原是 SQL Server 2005 中的新功能,可增強 Microsoft SQL Server 2000 部分還原。您可以利用分次還原,在主要檔案群組和部分次要檔案群組的初始部分還原之後,還原檔案群組。尚未還原的檔案群組會標示為離線,且無法存取。不過,您可以稍後再利用檔案還原來還原離線檔案群組。為了讓整個資料庫在不同時間分段還原,分次還原會維護各項檢查,以確保最後資庫能維持一致。

ms186858.note(zh-tw,SQL.90).gif附註:
在 SQL Server 2000 中,只能從完整資料庫備份中執行部分還原。SQL Server 2005 已移除這項限制。

如需詳細資訊,請參閱<執行分次還原>。

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

還原資料庫作業 (利用 DATABASE_SNAPSHOT 選項來指定) 會還原到資料庫快照集,也就是用指定的資料庫快照集中維護的時間點資料來覆寫來源資料庫,及時取回完整的來源資料庫。目前能存在的快照集只限於您要還原至的快照集。之後,還原作業會重建記錄檔 (因此,您無法稍後再將還原的資料庫向前復原到發生使用者錯誤的那個時間點)。

您只會失去建立快照集之後的資料庫更新資料。還原資料庫的中繼資料與建立快照集時的中繼資料相同。不過,還原為快照集會卸除所有全文檢索目錄。

從資料庫快照集還原的用途,並不在於復原媒體。資料庫快照集不像正規的備份組,它是不完整的資料庫檔案副本。如果資料庫或資料庫快照集損毀,可能就無法從快照集還原。此外,即使可以還原,但是在損毀的情況下還原也不太可能會更正問題。

還原限制

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

  • 來源資料庫包含任何唯讀或壓縮的檔案群組。
  • 建立快照集時原本處於線上狀態的所有檔案,現在都變成離線狀態。
  • 目前已經有一個以上的資料庫快照集。

如需詳細資訊,請參閱<還原至資料庫快照集>。

權限

如果還原的資料庫不存在,使用者必須有 CREATE DATABASE 權限,才能執行 RESTORE。如果資料庫存在,RESTORE 權限預設會授與系統管理員 (sysadmin)資料庫建立者 (dbcreator) 固定伺服器角色的成員以及資料庫的擁有者 (dbo) (對 FROM DATABASE_SNAPSHOT 選項而言,資料庫一律存在)。

RESTORE 權限提供給伺服器隨時可以取得其成員資格資訊的角色。由於資料庫必須是可存取且未損毀,才能夠檢查固定資料庫角色成員資格,但執行 RESTORE 時未必如此,因此,db_owner 固定資料庫角色的成員並沒有 RESTORE 權限。

備份作業可以選擇性地指定媒體集的密碼及 (或) 備份組的密碼。當在媒體集或備份組上定義密碼時,您必須在 RESTORE 陳述式中,指定一或多個正確的密碼。這些密碼可以防止他人利用 SQL Server 2005 工具,在未獲授權的情況下,在媒體上執行還原作業及附加備份組。不過,BACKUP 陳述式的 FORMAT 選項可以覆寫密碼所保護的媒體。

ms186858.security(zh-tw,SQL.90).gif安全性注意事項:
這個密碼所提供的保護很弱。它的目的是避免授權或為授權的使用者使用 SQL Server 2005 工具進行不正確的還原。它無法預防使用其他方式或以取代密碼的方式來讀取備份資料。保護備份的最佳作法是將備份磁帶存放在安全位置,或備份至適當的存取控制清單 (ACL) 所保護的磁碟檔案中。ACL 應該設在備份建立所在之根目錄下。

範例

ms186858.note(zh-tw,SQL.90).gif附註:
顯示的 AdventureWorks 資料庫用來提供說明。AdventureWorks 是 SQL Server 2005 的其中一個範例資料庫。Adventure Works Cycles 是虛構的製造公司,用於示範資料庫概念與案例。 如需有關這個資料庫的詳細資訊,請參閱<範例和範例資料庫>。

所有範例都假設已執行完整資料庫備份。

RESTORE 範例包括:

  • A. 還原完整資料庫
  • B. 還原完整和差異資料庫備份
  • C. 利用 RESTART 語法還原資料庫
  • D. 還原資料庫和移動檔案
  • E. 利用 BACKUP 和 RESTORE 複製資料庫
  • F. 利用 STOPAT 還原到時間點
  • G. 將交易記錄還原到標示
  • H. 利用 TAPE 語法還原
  • I. 利用 FILE 和 FILEGROUP 語法還原
  • J. 從資料庫快照集還原
ms186858.note(zh-tw,SQL.90).gif附註:
如需其他範例,請參閱<數個還原實例的還原順序範例>,以及列在<備份和還原的如何主題 (Transact-SQL)>中所有關於還原的如何主題。

A. 還原完整資料庫

下列範例會從 AdventureWorksBackups 邏輯備份裝置還原完整的資料庫備份。如需有關建立這個裝置的範例,請參閱<備份裝置>。

RESTORE DATABASE AdventureWorks 
   FROM AdventureWorksBackups
ms186858.note(zh-tw,SQL.90).gif附註:
如果是使用完整或大量記錄復原模式的資料庫,在大部分情況下,SQL Server 2005 都會要求您先備份記錄結尾,再還原資料庫。如需詳細資訊,請參閱<結尾記錄備份>。

[精選範例]

B. 還原完整和差異資料庫備份

下列範例會還原完整資料庫備份,接著再從 Z:\SQLServerBackups\AdventureWorks.bak 備份裝置進行差異備份,該裝置會同時包含這兩種備份。將進行還原的完整備份是裝置上的第六個備份組 (FILE = 6),而差異資料庫備份是裝置上的第九個備份組 (FILE = 9)。只要差異備份一完成復原,資料庫就完成復原。

RESTORE DATABASE AdventureWorks
   FROM DISK = 'Z:\SQLServerBackups\AdventureWorks.bak'
   WITH FILE = 6
      NORECOVERY;
RESTORE DATABASE AdventureWorks
   FROM DISK = 'Z:\SQLServerBackups\AdventureWorks.bak'
   WITH FILE = 9
      RECOVERY;

[精選範例]

C. 利用 RESTART 語法還原資料庫

下列範例會利用 RESTART 選項來重新啟動因伺服器斷電而中斷的 RESTORE 作業。

-- This database RESTORE halted prematurely due to power failure.
RESTORE DATABASE AdventureWorks
   FROM AdventureWorksBackups
-- Here is the RESTORE RESTART operation.
RESTORE DATABASE AdventureWorks 
   FROM AdventureWorksBackups WITH RESTART

[精選範例]

D. 還原資料庫和移動檔案

下列範例還原完整的資料庫和交易記錄,並將還原的資料庫移至 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data 目錄。

RESTORE DATABASE AdventureWorks
   FROM AdventureWorksBackups
   WITH NORECOVERY, 
      MOVE 'AdventureWorks_Data' TO 
'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\NewAdvWorks.mdf', 
      MOVE 'AdventureWorks_Log' 
TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\NewAdvWorks.ldf'
RESTORE LOG AdventureWorks
   FROM AdventureWorksBackups
   WITH RECOVERY

[精選範例]

E. 利用 BACKUP 和 RESTORE 複製資料庫

下列範例使用 BACKUPRESTORE 陳述式建立 AdventureWorks 資料庫的副本。MOVE 陳述式會使資料和記錄檔還原到指定的位置。RESTORE FILELISTONLY 陳述式是用來決定資料庫中所要還原的檔案數目及名稱。新資料庫副本的名稱是 TestDB。如需詳細資訊,請參閱<RESTORE FILELISTONLY (Transact-SQL)>。

BACKUP DATABASE AdventureWorks 
   TO AdventureWorksBackups ;

RESTORE FILELISTONLY 
   FROM AdventureWorksBackups ;

RESTORE DATABASE TestDB 
   FROM AdventureWorksBackups 
   WITH MOVE 'AdventureWorks_Data' TO 'C:\MySQLServer\testdb.mdf',
   MOVE 'AdventureWorks_Log' TO 'C:\MySQLServer\testdb.ldf';
GO

[精選範例]

F. 利用 STOPAT 還原到時間點

下列範例將資料庫還原至 April 15, 2020``12:00 AM 時的狀態,並顯示含有多筆記錄和多個備份裝置的還原作業。

RESTORE DATABASE AdventureWorks
   FROM AdventureWorksBackups
   WITH NORECOVERY;

RESTORE LOG AdventureWorks
   FROM AdventureWorksBackups
   WITH RECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';

RESTORE LOG AdventureWorks
   FROM AdventureWorksBackups
   WITH RECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';

[精選範例]

G. 將交易記錄還原到標示

下列範例會將交易記錄還原到名為 ListPriceUpdate 的標示交易中之標示。

USE AdventureWorks
GO
BEGIN TRANSACTION ListPriceUpdate
   WITH MARK 'UPDATE Product list prices';
GO

UPDATE Production.Product
   SET ListPrice = ListPrice * 1.10
   WHERE ProductNumber LIKE 'BK-%';
GO

COMMIT TRANSACTION ListPriceUpdate;
GO

-- Time passes. Regular database 
-- and log backups are taken.
-- An error occurs in the database.
USE master
GO

RESTORE DATABASE AdventureWorks
FROM AdventureWorksBackups
WITH FILE = 3, NORECOVERY;
GO

RESTORE LOG AdventureWorks
   FROM AdventureWorksBackups 
   WITH FILE = 4,
   RECOVERY, 
   STOPATMARK = 'ListPriceUpdate';

[精選範例]

H. 利用 TAPE 語法還原

下列範例會從 TAPE 備份裝置還原完整的資料庫備份。

RESTORE DATABASE AdventureWorks 
   FROM TAPE = '\\.\tape0'

[精選範例]

I. 利用 FILE 和 FILEGROUP 語法還原

下列範例會還原名為 MyDatabase 的資料庫,此資料庫擁有兩個檔案,一個次要檔案群組和一個交易記錄,而且使用完整復原模式。

資料庫備份是在名為 MyDatabaseBackups 的邏輯備份裝置上,媒體集中的第九個備份組。接下來是三個記錄備份,它們分別位於 MyDatabaseBackups 裝置的後三個備份組中 (101112),並且利用 WITH NORECOVERY 而還原。在還原最後一個記錄備份之後,資料庫就可以復原。

ms186858.note(zh-tw,SQL.90).gif附註:
復原是以個別步驟執行,以降低過早復原的可能性,也就是在所有記錄備份都復原之前就進行復原。

請注意,在 RESTORE DATABASE 中有兩種 FILE 選項類型。在備份裝置名稱之前的 FILE 選項指定要從備份組還原之資料庫檔案的邏輯檔案名稱;例如,FILE = 'MyDatabase_data_1'。這個備份組並非媒體集中的第一個資料庫備份;因此,它在媒體集中的位置是利用 WITH 子句中的 FILE 選項 FILE=9 指出。

RESTORE DATABASE MyDatabase
   FILE = 'MyDatabase_data_1',
   FILE = 'MyDatabase_data_2',
   FILEGROUP = 'new_customers'
   FROM MyDatabaseBackups
   WITH 
      FILE = 9,
      NORECOVERY;
GO
-- Restore the log backups.
RESTORE LOG MyDatabase
   FROM MyDatabaseBackups
   WITH FILE = 10, 
      NORECOVERY;
GO
RESTORE LOG MyDatabase
   FROM MyDatabaseBackups
   WITH FILE = 11, 
      NORECOVERY;
GO
RESTORE LOG MyDatabase
   FROM MyDatabaseBackups
   WITH FILE = 12, 
      NORECOVERY;
GO
--Recover the database:
RESTORE DATABASE MyDatabase WITH RECOVERY;
GO

[精選範例]

J. 從資料庫快照集還原

下列範例會將資料庫還原到某個資料庫快照集。這個範例假設資料庫目前只有一個快照集。如需如何建立這個資料庫快照集的範例,請參閱<如何:建立資料庫快照集 (Transact-SQL)>。

ms186858.note(zh-tw,SQL.90).gif附註:
還原為快照集會卸除所有全文檢索目錄。
USE master  
RESTORE DATABASE AdventureWorks FROM DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';
GO

如需詳細資訊,請參閱<還原至資料庫快照集>。

[精選範例]

請參閱

參考

BACKUP (Transact-SQL)
RESTORE REWINDONLY (Transact-SQL)
RESTORE VERIFYONLY (Transact-SQL)

其他資源

備份與還原全文檢索目錄
備份與還原複寫的資料庫
實作 SQL Server 資料庫的還原實例
媒體集、媒體家族與備份組
瞭解在 SQL Server 中還原和復原備份的運作方式
檢視備份相關資訊

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 12 月 12 日

新增內容:
  • 新增 BLOCKSIZE、BUFFERCOUNT 和 MAXTRANSFERSIZE 選項至<語法>一節。
  • 更正 RESTORE DATABASE 的 STOPATMARK 和 STOPBEFOREMARK 語法。
  • 在「備註」新增一節,加入如何還原啟用 Vardecimal 儲存格式之 SQL Server 2005 Service Pack 2 資料庫的相關資訊。
  • 在<備註>新增一節,加入清除計劃快取的相關資訊。
變更的內容:
  • 更正 STOPAT、STOPATMARK 和 STOPBEFOREMARK 語法。

2006 年 4 月 14 日

變更的內容:
  • 釐清離線檔案的資料庫快照集限制。
  • 將備份檔案邏輯名稱語法的變數名稱 logical_file_name 變更為 logical_file_name_in_backup