RESTORE (Transact-SQL)

還原利用 BACKUP 命令取得的備份。此命令可讓您執行以下還原案例:

  • 從完整資料庫備份還原整個資料庫 (完整還原)。

  • 還原部分資料庫 (部分還原)。

  • 將特定檔案或檔案群組還原到資料庫 (檔案還原)。

  • 將特定頁面還原到資料庫 (分頁還原)。

  • 將交易記錄還原到資料庫 (交易記錄還原)。

  • 將資料庫還原到資料庫快照集所擷取的時間點。

如需有關 SQL Server 還原案例的詳細資訊,請參閱<還原和復原概觀 (SQL Server)>和<實作 SQL Server 資料庫的還原實例>。

[!附註]

如需有關引數之描述的詳細資訊,請參閱<RESTORE 引數 (Transact-SQL)>。

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

語法

--To Restore an Entire Database from a Full database backup (a Complete Restore):
RESTORE DATABASE { database_name | @database_name_var } 
 [ FROM <backup_device> [ ,...n ] ]
 [ WITH 
   {
    [ RECOVERY | NORECOVERY | STANDBY = 
        {standby_file_name | @standby_file_name_var } 
       ]
   | ,  <general_WITH_options> [ ,...n ]
   | , <replication_WITH_option>
   | , <change_data_capture_WITH_option>
   | , <service_broker_WITH options> 
   | , <point_in_time_WITH_options—RESTORE_DATABASE> 
   } [ ,...n ]
 ]
[;]

--To perform the first step of the initial restore sequence
-- of a piecemeal restore:
RESTORE DATABASE { database_name | @database_name_var } 
   <files_or_filegroups> [ ,...n ]
 [ FROM <backup_device> [ ,...n ] ] 
   WITH 
      PARTIAL, NORECOVERY 
      [  , <general_WITH_options> [ ,...n ] 
       | , <point_in_time_WITH_options—RESTORE_DATABASE> 
      ] [ ,...n ] 
[;]

--To Restore Specific Files or Filegroups: 
RESTORE DATABASE { database_name | @database_name_var } 
   <file_or_filegroup> [ ,...n ]
 [ FROM <backup_device> [ ,...n ] ] 
   WITH 
   {
      [ RECOVERY | NORECOVERY ]
      [ , <general_WITH_options> [ ,...n ] ]
   } [ ,...n ] 
[;]

--To Restore Specific Pages: 
RESTORE DATABASE { database_name | @database_name_var } 
   PAGE = 'file:page [ ,...n ]' 
 [ , <file_or_filegroups> ] [ ,...n ]
 [ FROM <backup_device> [ ,...n ] ] 
   WITH 
       NORECOVERY   
      [ , <general_WITH_options> [ ,...n ] ]
[;]

--To Restore a Transaction Log:
RESTORE LOG { database_name | @database_name_var } 
 [ <file_or_filegroup_or_pages> [ ,...n ] ]
 [ FROM <backup_device> [ ,...n ] ] 
 [ WITH 
   {
     [ RECOVERY | NORECOVERY | STANDBY = 
        {standby_file_name | @standby_file_name_var } 
       ]
    | ,  <general_WITH_options> [ ,...n ]
    | , <replication_WITH_option>
    | , <point_in_time_WITH_options—RESTORE_LOG> 
   } [ ,...n ]
 ] 
[;]

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

<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
} 

<general_WITH_options> [ ,...n ]::= 
--Restore Operation Options
   MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' 
          [ ,...n ] 
 | REPLACE 
 | RESTART 
 | RESTRICTED_USER 

--Backup Set Options
 | FILE = { backup_set_file_number | @backup_set_file_number } 
 | PASSWORD = { password | @password_variable } 

--Media Set Options
 | MEDIANAME = { media_name | @media_name_variable } 
 | MEDIAPASSWORD = { mediapassword | @mediapassword_variable } 
 | BLOCKSIZE = { blocksize | @blocksize_variable } 

--Data Transfer Options
 | BUFFERCOUNT = { buffercount | @buffercount_variable } 
 | MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable }

--Error Management Options
 | { CHECKSUM | NO_CHECKSUM } 
 | { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } 

--Monitoring Options
 | STATS [ = percentage ] 

--Tape Options
 | { REWIND | NOREWIND } 
 | { UNLOAD | NOUNLOAD } 

<replication_WITH_option>::=
 | KEEP_REPLICATION 

<change_data_capture_WITH_option>::=
 | KEEP_CDC

<service_broker_WITH_options>::= 
 | ENABLE_BROKER 
 | ERROR_BROKER_CONVERSATIONS 
 | NEW_BROKER 


<point_in_time_WITH_options—RESTORE_DATABASE>::= 
 | {
   STOPAT = { 'datetime'| @datetime_var } 
 | STOPATMARK = { 'lsn:lsn_number' }
                 [ AFTER 'datetime'] 
 | STOPBEFOREMARK = {  'lsn:lsn_number' }
                 [ AFTER 'datetime'] 
   } 

<point_in_time_WITH_options—RESTORE_LOG>::= 
 | {
   STOPAT = { 'datetime'| @datetime_var } 
 | STOPATMARK = { 'mark_name' | 'lsn:lsn_number' }
                 [ AFTER 'datetime'] 
 | STOPBEFOREMARK = { 'mark_name' | 'lsn:lsn_number' }
                 [ AFTER 'datetime'] 
   } 

引數

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

備註

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

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

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

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

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

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

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

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

要還原的資料庫版本至少必須為 80 (SQL Server 2000),才能還原至 SQL Server 2008 R2。相容性層級小於 80 的 SQL Server 2000 或 SQL Server 2005 資料庫會在還原時設為相容性 80。

[!附註]

在您將 SQL Server 2005 或 SQL Server 2000 資料庫還原為 SQL Server 2008 R2 之後,資料庫就會變成立即可用,然後自動進行升級。如果資料庫具有全文檢索索引,升級程序就會根據 upgrade_option 伺服器屬性的設定,匯入、重設或重建這些索引。如果升級選項設定為匯入 (upgrade_option = 2) 或重建 (upgrade_option = 0),則全文檢索索引在升級期間將無法使用。根據進行索引的資料數量而定,匯入可能需要數個小時,而重建可能需要十倍以上的時間。當升級選項設定為匯入時,如果全文檢索目錄無法使用,系統就會重建相關聯的全文檢索索引。若要變更 upgrade_option 伺服器屬性的設定,請使用 sp_fulltext_service

還原狀況

SQL Server 支援各種還原狀況:

已停止的 RESTORE 關鍵字

下列關鍵字在 SQL Server 2008 中已停止:

已停止的關鍵字

取代者

取代關鍵字的範例

LOAD

RESTORE

RESTORE DATABASE

TRANSACTION

LOG

RESTORE LOG

DBO_ONLY

RESTRICTED_USER

RESTORE DATABASE ... WITH RESTRICTED_USER

還原加密資料庫的需求

若要還原加密的資料庫,您必須能夠存取之前用來加密資料庫的憑證或非對稱金鑰。如果沒有該憑證或非對稱金鑰,就無法還原資料庫。因此,只要需要備份,就必須保留用來加密資料庫加密金鑰的憑證。如需詳細資訊,請參閱<SQL Server 憑證和非對稱金鑰>。

啟用 Vardecimal 儲存格式的資料庫

備份與還原可以搭配 vardecimal 儲存格式正常運作。如需有關 vardecimal 儲存格式的詳細資訊,請參閱<將十進位資料儲存成可變長度>。

比較 RECOVERY 和 NORECOVERY

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

  • NORECOVERY 指定不進行回復。這使向前復原能夠繼續循序執行下一個陳述式。

    在這個情況下,還原順序可以還原其他備份,並將它們向前復原。

  • RECOVERY (預設值) 表示在完成目前備份的向前復原之後,應該執行回復。

    復原資料庫需要還原的整個資料集 (「向前復原集」(Roll Forward Set)) 與資料庫一致。如果向前復原集尚未向前復原到足以與資料庫一致的範圍,且指定了 RECOVERY,Database Engine 就會發出錯誤。

重做還原

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

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

還原全文檢索資料

在完整還原期間,全文檢索資料會與其他資料庫資料一起還原。當使用正規 RESTORE DATABASE database_name FROM backup_device 語法時,還原資料庫檔也會還原全文檢索檔案。

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

[!附註]

從 SQL Server 2005 或 SQL Server 2000 匯入的全文檢索目錄仍然會視為資料庫檔案。對於這些檔案而言,備份全文檢索目錄的 SQL Server 2005 程序會維持適用狀態,不過不再需要於備份作業期間暫停和繼續。如需詳細資訊,請參閱《SQL Server 2005 線上叢書》中的<備份與還原全文檢索目錄>。

資料庫設定和還原

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

[!附註]

這個行為不同於在 SQL Server 2000 之前版本的 SQL Server。

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

備份與還原記錄資料表

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

RESTORE LOG

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

[!附註]

如果是使用完整或大量記錄復原模式的資料庫,在大部分情況下,您必須先備份記錄結尾,再還原資料庫。除非 RESTORE DATABASE 陳述式包含 WITH REPLACE 或 WITH STOPAT 子句 (必須指定在資料備份結束之後發生的時間或交易),否則如果沒有先備份記錄結尾便還原資料庫,就會產生錯誤。如需有關結尾記錄備份的詳細資訊,請參閱<結尾記錄備份>。

線上還原

[!附註]

只有在 SQL Server 2005 Enterprise Edition 和更新版本中才允許線上還原。

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

[!附註]

線上還原可以包括延遲交易

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

分次還原

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

[!附註]

在 SQL Server 2000 中,只能從完整資料庫備份中執行部分還原。SQL Server 2005 已移除這項限制。

如果部分還原順序排除任何 FILESTREAM 檔案群組,則不支援時間點還原。您可以強制還原順序,以繼續進行。但是,絕對無法還原 RESTORE 陳述式中省略的 FILESTREAM 檔案群組。若要強制時間點還原,請指定 CONTINUE_AFTER_ERROR 選項,連同 STOPAT、STOPATMARK 或 STOPBEFOREMARK 選項,而且您也必須在後續的 RESTORE LOG 陳述式中指定這些項目。如果您指定 CONTINUE_AFTER_ERROR,則部分還原順序會成功,而 FILESTREAM 檔案群組則會變成無法復原。

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

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

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

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

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

還原限制

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

  • 來源資料庫包含任何唯讀或壓縮的檔案群組。

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

  • 目前已經有一個以上的資料庫快照集。

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

權限

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

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

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

安全性注意事項安全性注意事項

這個密碼所提供的保護很弱。這是為了防止已獲授權或未獲授權的使用者使用 SQL Server 工具進行不正確的還原。它無法防止透過其他方式或以取代密碼的方式來讀取備份資料。未來的 Microsoft SQL Server 版本將移除這項功能。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 保護備份的最佳作法是將備份磁帶存放在安全位置,或備份至適當的存取控制清單 (ACL) 所保護的磁碟檔案中。ACL 應該設在備份建立所在的根目錄下。

範例

[!附註]

顯示的 AdventureWorks2008R2 資料庫用來提供說明。AdventureWorks2008R2 是 SQL Server 的其中一個範例資料庫。Adventure Works Cycles 是虛構的製造公司,用於示範資料庫概念與案例。 如需有關這個資料庫的詳細資訊,請參閱<AdventureWorks2008R2 範例資料庫>。

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

RESTORE 範例包括:

  • A. 還原完整資料庫

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

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

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

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

  • F. 利用 STOPAT 還原到時間點

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

  • H. 利用 TAPE 語法還原

  • I. 利用 FILE 和 FILEGROUP 語法還原

  • J. 從資料庫快照集還原

[!附註]

如需其他範例,請參閱<數個還原實例的還原順序範例>,以及列在<備份和還原的如何主題 (Transact-SQL)>中所有關於還原的如何主題。

A. 還原完整資料庫

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

RESTORE DATABASE AdventureWorks2008R2 
   FROM AdventureWorks2008R2Backups

[!附註]

如果是使用完整或大量記錄復原模式的資料庫,在大部分情況下,SQL Server 都會要求您先備份記錄結尾,再還原資料庫。如需詳細資訊,請參閱<結尾記錄備份>。

[精選範例]

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

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

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

[精選範例]

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

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

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

[精選範例]

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

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

RESTORE DATABASE AdventureWorks2008R2
   FROM AdventureWorks2008R2Backups
   WITH NORECOVERY, 
      MOVE 'AdventureWorks2008R2_Data' TO 
'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\NewAdvWorks2008R2.mdf', 
      MOVE 'AdventureWorks2008R2_Log' 
TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\NewAdvWorks2008R2.ldf'
RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2Backups
   WITH RECOVERY

[精選範例]

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

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

BACKUP DATABASE AdventureWorks2008R2 
   TO AdventureWorks2008R2Backups ;

RESTORE FILELISTONLY 
   FROM AdventureWorks2008R2Backups ;

RESTORE DATABASE TestDB 
   FROM AdventureWorks2008R2Backups 
   WITH MOVE 'AdventureWorks2008R2_Data' TO 'C:\MySQLServer\testdb.mdf',
   MOVE 'AdventureWorks2008R2_Log' TO 'C:\MySQLServer\testdb.ldf';
GO

[精選範例]

F. 利用 STOPAT 還原到時間點

下列範例會將資料庫還原至 April 15, 202012:00 AM 時的狀態,並顯示含有多個記錄備份的還原作業。在備份裝置 AdventureWorks2008R2Backups 上,要還原的完整資料庫備份是裝置上的第三個備份組 (FILE = 3),第一個記錄備份是第四個備份組 (FILE = 4),而第二個記錄備份是第五個備份組 (FILE = 5)。

RESTORE DATABASE AdventureWorks2008R2
   FROM AdventureWorks2008R2Backups
   WITH FILE=3, NORECOVERY;

RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2Backups
   WITH FILE=4, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';

RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2Backups
   WITH FILE=5, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';
RESTORE DATABASE AdventureWorks2008R2 WITH RECOVERY; 

[精選範例]

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

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

USE AdventureWorks2008R2;
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 AdventureWorks2008R2
FROM AdventureWorks2008R2Backups
WITH FILE = 3, NORECOVERY;
GO

RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2Backups 
   WITH FILE = 4,
   RECOVERY, 
   STOPATMARK = 'UPDATE Product list prices';

[精選範例]

H. 利用 TAPE 語法還原

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

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

[精選範例]

I. 利用 FILE 和 FILEGROUP 語法還原

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

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

[!附註]

復原是以個別步驟執行,以降低過早復原的可能性,也就是在所有記錄備份都復原之前就進行復原。

請注意,在 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)>。

[!附註]

還原為快照集會卸除所有全文檢索目錄。

USE master  
RESTORE DATABASE AdventureWorks2008R2 FROM DATABASE_SNAPSHOT = 'AdventureWorks2008R2_dbss1800';
GO

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

[精選範例]