RESTORE 陳述式 (Transact-SQL)

還原利用 BACKUP 命令取得的 SQL 資料庫備份。

選取產品

在以下資料列中選取您感興趣的產品名稱後,便只會顯示該產品的資訊。

如需語法慣例的詳細資訊,請參閱 Transact-SQL 語法慣例

* SQL Server *  

 

SQL Server

此命令可讓您執行以下還原案例:

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

其他資源

Syntax

--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>
   | , <FILESTREAM_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
     | URL
   } = { '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 | CREDENTIAL

--Backup Set Options
 | FILE = { backup_set_file_number | @backup_set_file_number }
 | PASSWORD = { password | @password_variable }
 | [ METADATA_ONLY | SNAPSHOT ] [ DBNAME = { database_name | @database_name_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

<FILESTREAM_WITH_option>::=
 | FILESTREAM ( DIRECTORY_NAME = directory_name )

<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 引數

關於還原狀況

SQL Server 支援各種還原狀況:

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

注意

線上還原可能涉及延遲交易

如需詳細資訊,請參閱線上還原

關於 RESTORE 選項的其他考量

已停止的 RESTORE 關鍵字

下列關鍵字在 SQL Server 2008 (10.0.x) 中已停用:

已停止的關鍵字 取代為... 取代關鍵字的範例
LOAD RESTORE RESTORE DATABASE
TRANSACTION 記錄 RESTORE LOG
DBO_ONLY RESTRICTED_USER RESTORE DATABASE ... WITH RESTRICTED_USER

RESTORE LOG

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

注意

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

比較 RECOVERY 和 NORECOVERY

復原是由 RESTORE 陳述式透過 [ RECOVERY | NORECOVERY ] 選項控制:

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

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

  • RECOVERY (預設) 表示在完成目前備份的向前復原之後應該執行復原。 無法還原更多備份。 還原所有必要的備份之後,請選取此選項。

    復原資料庫時,會要求要還原的整組資料 (「向前復原集」) 與資料庫一致。 如果向前復原集尚未向前復原到足以與資料庫一致,且已指定 RECOVERY,資料庫引擎就會發出錯誤。 如需復原流程的詳細資訊,請參閱還原和復原概觀 (SQL Server)

相容性支援

使用舊版 SQL Server 所建立的 mastermodelmsdb 備份,無法由 SQL Server 還原。

注意

您無法將 SQL Server 備份還原成比建立備份所用版本還舊的 SQL Server 版本。

SQL Server 的每一個版本都會使用與舊版相異的預設路徑。 因此,若要還原在舊版備份之預設位置中所建立的資料庫,就必須使用 MOVE 選項。 如需有關新預設路徑的資訊,請參閱 SQL Server 的預設和具名執行個體的檔案位置

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

當資料庫第一次連接或還原到新的 SQL Server 執行個體時,資料庫主要金鑰複本 (由服務主要金鑰加密) 尚未儲存在伺服器中。 您必須利用 OPEN MASTER KEY 陳述式來解密資料庫主要金鑰 (DMK)。 DMK 解密之後,您便可以選擇利用 ALTER MASTER KEY REGENERATE 陳述式來提供服務主要金鑰 (SMK) 所加密的 DMK 複本給伺服器,以在未來啟用自動解密。 當資料庫從舊版升級時,應該會重新產生 DMK 以使用較新的 AES 演算法。 如需重新產生 DMK 的詳細資訊,請參閱 ALTER MASTER KEY。 重新產生 DMK 金鑰以升級至 AES 所需的時間是取決於 DMK 所保護的物件數目而定。 重新產生 DMK 金鑰以升級至 AES 只需執行一次,且不會影響金鑰循環策略中後續的重新產生。

備註

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

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

RESTORE 可以在發生錯誤之後,重新啟動。 另外,您也可以指示 RESTORE 不論是否發生錯誤,一律繼續作業,它會盡可能還原多一點的資料 (請參閱 CONTINUE_AFTER_ERROR 選項)。

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

損毀的 master資料庫必須利用特殊程序來還原。 如需詳細資訊,請參閱系統資料庫的備份與還原

還原資料庫時,系統會清除所要還原資料庫的計畫快取。 清除計畫快取會導致重新編譯所有後續執行計畫,而且可能會導致查詢效能突然暫時下降。

若要還原可用性資料庫,請先將資料庫還原至 SQL Server 執行個體,然後再將資料庫新增至可用性群組。

備份壓縮和解壓縮的整合式加速和卸載

SQL Server 2022 (16.x) 引進 ALGORITHM,其會識別作業的壓縮演算法。 如需詳細資訊,請參閱備份壓縮

如需詳細資訊,請參閱還原作業

從 URL 還原

URL 是用來指定 Microsoft Azure Blob 儲存體或 S3 相容物件儲存體位置和檔案名稱的格式。 雖然 Azure Blob 儲存體是一項服務,但實作方式類似於磁碟和磁帶,以便為所有裝置提供一致且順暢的還原體驗。

互通性

資料庫設定和還原

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

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

還原已加密的資料庫

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

還原啟用 Vardecimal 儲存的資料庫

備份與還原可以搭配 vardecimal 儲存格式正常運作。 如需 vardecimal 儲存格式的詳細資訊,請參閱 sp_db_vardecimal_storage_format

還原全文檢索資料

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

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

注意

從 SQL Server 2005 (9.x) 匯入的全文檢索目錄仍然會被視為資料庫檔案。 對於這些檔案而言,備份全文檢索目錄的 SQL Server 2005 (9.x) 程序會維持適用狀態,不過不再需要於備份作業期間暫停和繼續作業。 如需詳細資訊,請參閱備份並還原全文檢索目錄

還原至 SQL Server 2022 和自動卸除功能

從舊版將資料庫還原至 SQL Server 2022 (16.x) 時,建議在資料庫上執行 sp_updatestats,為統計資料自動卸除功能設定適當的中繼資料。 如需詳細資訊,請參閱統計資料自動卸除選項

SQL Server 巨量資料叢集

特定作業需要連接到 SQL Server 執行個體,包括設定伺服器 (執行個體層級) 或手動將資料庫新增至可用性群組。 sp_configureRESTORE DATABASE 等作業,或可用性群組所屬資料庫中的任何 DDL 命令,都需要連接到 SQL Server 執行個體。 根據預設,巨量資料叢集不含可連接到執行個體的端點。 您必須手動公開此端點。

如需指示,請參閱連接到主要複本上的資料庫

中繼資料

SQL Server 包含備份與還原歷程記錄資料表,可針對每個伺服器執行個體追蹤備份和還原活動。 當執行還原時,也會修改備份記錄資料表。 如需這些資料表的資訊,請參閱備份記錄與標頭資訊

REPLACE 選項影響

REPLACE 不應經常使用,而且只應在審慎考量之後使用。 還原通常可以防止意外將資料庫覆寫成不同資料庫。 如果 RESTORE 陳述式中指定的資料庫已經存在於目前伺服器,而且指定的資料庫系列 GUID 與備份組中記錄的資料庫系列 GUID 不同,將不會還原資料庫。 這是重要的防護措施。

REPLACE 選項會覆寫還原通常會執行的數項重要安全檢查。 會覆寫的檢查如下:

  • 使用從其他資料庫建立的備份來還原現有資料庫。

    使用 REPLACE 選項,即使指定的資料庫名稱與備份組中所記錄的資料庫名稱不同,還原仍可讓您以備份組中的任何資料庫覆寫現有的資料庫。 這可能會導致意外將資料庫覆寫成不同資料庫。

  • 使用完整或大量記錄復原模式來還原資料庫,且未取得結尾記錄備份,也未使用 STOPAT 選項。

    使用 REPLACE 選項,您可能會遺失已認可的記錄,因為最近寫入的記錄尚未被備份。

  • 覆寫現有的檔案。

    例如,作業失誤可能導致覆寫到錯誤的檔案類型 (例如 .xls 檔案),或覆寫到其他資料庫 (目前不在線上) 正在使用的檔案。 如果覆寫了現有檔案,即使還原的資料庫是完整的,仍有可能遺失任意資料。

重做還原

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

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

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

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

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

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

還原限制

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

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

如需詳細資訊,請參閱將資料庫還原成資料庫快照集

安全性

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

重要

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

權限

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

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

範例

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

RESTORE 範例包括:

注意

如需其他範例,請參閱還原和復原概觀中所列的還原做法主題。

A. 還原完整資料庫

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

RESTORE DATABASE AdventureWorks2022
  FROM AdventureWorks2022Backups;

注意

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

[精選範例]

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

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

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

[精選範例]

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

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

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

[精選範例]

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

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

RESTORE DATABASE AdventureWorks2022
    FROM AdventureWorksBackups
    WITH NORECOVERY,
      MOVE 'AdventureWorks2022_Data' TO
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\NewAdvWorks.mdf',
      MOVE 'AdventureWorks2022_Log'
TO 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\NewAdvWorks.ldf';
RESTORE LOG AdventureWorks2022
    FROM AdventureWorksBackups
    WITH RECOVERY;

[精選範例]

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

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

BACKUP DATABASE AdventureWorks2022
    TO AdventureWorksBackups ;

RESTORE FILELISTONLY
    FROM AdventureWorksBackups ;

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

[精選範例]

F. 使用 STOPAT 還原至時間點

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

RESTORE DATABASE AdventureWorks2022
    FROM AdventureWorksBackups
    WITH FILE = 3, NORECOVERY;

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

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

[精選範例]

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

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

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

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

[精選範例]

H. 使用 TAPE 語法進行還原

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

RESTORE DATABASE AdventureWorks2022
    FROM TAPE = '\\.\tape0';

[精選範例]

I. 使用 FILE 與 FILEGROUP 語法進行還原

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

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

注意

復原是以個別步驟執行,以降低過早復原的可能性,也就是在所有記錄備份都復原之前就進行復原。 如需復原流程的詳細資訊,請參閱還原和復原概觀 (SQL Server)

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

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

注意

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

USE master;
RESTORE DATABASE AdventureWorks2022 FROM DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';
GO

如需詳細資訊,請參閱將資料庫還原成資料庫快照集

[精選範例]

K. 從 Microsoft Azure Blob 儲存體還原

下面三個範例涉及使用 Microsoft Azure Blob 儲存體服務。 儲存體帳戶名稱為 mystorageaccount。 資料檔案的容器名為 myfirstcontainer。 備份檔案的容器名為 mysecondcontainer。 已針對每個容器建立具有讀取、寫入、刪除及列出權限的預存存取原則。 已使用與此「預存存取原則」關聯的「共用存取簽章」建立 SQL Server 認證。 如需使用 Microsoft Azure Blob 儲存體進行 SQL Server 備份及還原的特定資訊,請參閱使用 Microsoft Azure Blob 儲存體備份及還原 SQL Server

K1. 從 Microsoft Azure 儲存體服務還原完整資料庫備份
位於 Salesmysecondcontainer 的完整資料庫備份將會還原至 myfirstcontainerSales 目前不存在於伺服器上。

RESTORE DATABASE Sales
  FROM URL = 'https://mystorageaccount.blob.core.windows.net/mysecondcontainer/Sales.bak'
  WITH MOVE 'Sales_Data1' to 'https://mystorageaccount.blob.core.windows.net/myfirstcontainer/Sales_Data1.mdf',
  MOVE 'Sales_log' to 'https://mystorageaccount.blob.core.windows.net/myfirstcontainer/Sales_log.ldf',
  STATS = 10;

K2. 將完整資料庫備份從 Microsoft Azure 儲存體服務還原至本機儲存體 位於 Salesmysecondcontainer 的完整資料庫備份將會還原至本機儲存體。 Sales 目前不存在於伺服器上。

RESTORE DATABASE Sales
  FROM URL = 'https://mystorageaccount.blob.core.windows.net/mysecondcontainer/Sales.bak'
  WITH MOVE 'Sales_Data1' to 'H:\DATA\Sales_Data1.mdf',
  MOVE 'Sales_log' to 'O:\LOG\Sales_log.ldf',
  STATS = 10;

K3. 將完整資料庫備份從本機儲存體還原至 Microsoft Azure 儲存體服務

RESTORE DATABASE Sales
  FROM DISK = 'E:\BAK\Sales.bak'
  WITH MOVE 'Sales_Data1' to 'https://mystorageaccount.blob.core.windows.net/myfirstcontainer/Sales_Data1.mdf',
  MOVE 'Sales_log' to 'https://mystorageaccount.blob.core.windows.net/myfirstcontainer/Sales_log.ldf',
  STATS = 10;

L. 從快照集備份還原

在 SQL Server 2022 (16.x) 中引進。 如需詳細資訊,請參閱建立 Transact-SQL 快照集備份

L1. 還原完整備份

RESTORE DATABASE Sales
  FROM DISK = 'D:\MSSQL\Backup\SalesSnapshotFull.bkm'
  WITH METADATA_ONLY;

L2. 還原備份並套用交易記錄

RESTORE DATABASE Sales
  FROM DISK = 'D:\MSSQL\Backup\SalesSnapshotFull.bkm'
  WITH METADATA_ONLY,
  NORECOVERY;

RESTORE LOG Sales
  FROM DISK = 'D:\MSSQL\Backup\SalesLog.trn'
  WITH RECOVERY;

L3. 從快照集備份還原,並將資料庫和記錄檔放在新位置

RESTORE DATABASE Sales
FROM DISK = 'D:\MSSQL\Backup\SalesSnapshotFull.bkm'
WITH METADATA_ONLY,
    MOVE Sales_Data TO 'D:\MSSQL\Sales.mdf',
    MOVE Sales_Log TO 'D:\MSSQL\Sales_log.ldf';

[精選範例]

下一步

* SQL 受控執行個體 *

 

Azure SQL 受控執行個體

此命令可讓您使用 Azure Blob 儲存體帳戶從完整資料庫備份還原整個資料庫 (完整還原)。

如需其他支援的 RESTORE命令,請參閱:

重要

若要從 SQL 受控執行個體自動備份進行還原,請參閱 SQL Database 還原 \(部分機器翻譯\)。

語法

--To Restore an Entire Database from a Full database backup (a Complete Restore):
RESTORE DATABASE { database_name | @database_name_var }
 FROM URL = { 'physical_device_name' | @physical_device_name_var } [ ,...n ]
[;]

引數

DATABASE

指定目標資料庫。

FROM URL

指定放置於 URL而且將用於還原作業的一或多個備份裝置。 URL 格式可用於從 Microsoft Azure 儲存體服務還原備份。

重要

為了在從 URL 還原時能從多部裝置還原,您必須使用共用存取簽章 (SAS) 權杖。 如需建立共用存取簽章的範例,請參閱 SQL Server 備份至 URL在 Azure 儲存體上使用 Powershell 搭配共用存取簽章 (SAS) 權杖來簡化 SQL 認證的建立 \(英文\)。

n 這是一個預留位置,表示可以在逗號分隔清單中指定最多達 64 個備份裝置。

備註

先決條件是,您需要使用符合 Blob 儲存體帳戶 URL 的名稱,以及放置為祕密的共用存取簽章來建立認證。 RESTORE 命令會使用 Blob 儲存體 URL 來查閱認證,以尋找讀取備份裝置所需資訊。

還原作業非同步 - 即使用戶端連線中斷,還是會繼續還原。 如果您的連線中斷,可以檢查 sys.dm_operation_status 檢視以取得還原作業 (以及建立和卸除資料庫) 的狀態。

會設定/覆寫下列資料庫選項,且稍後無法變更:

  • NEW_BROKER (如果未在 .bak 檔案中啟用訊息代理程式)
  • ENABLE_BROKER (如果未在 .bak 檔案中啟用訊息代理程式)
  • AUTO_CLOSE=OFF (如果 .bak 檔案中的資料庫具有 AUTO_CLOSE=ON)
  • RECOVERY FULL (如果.bak檔案中的資料庫具有 SIMPLE 或 BULK_LOGGED 恢復模式)
  • 新增記憶體最佳化檔案群組,並呼叫 XTP,如果它不在原始 .bak 檔案中的話。 任何現有的記憶體最佳化檔案群組都已重新命名為 XTP
  • SINGLE_USER 和 RESTRICTED_USER 選項轉換為 MULTI_USER

限制 - SQL 受控執行個體

以下是適用的限制:

  • 無法還原包含多個備份組的 .BAK 檔案。
  • 無法還原包含多個記錄檔的 .BAK 檔案。
  • 如果 .bak 包含 FILESTREAM 資料,則還原將會失敗。
  • 若備份中包含的資料庫具有使用中記憶體內部物件,則該備份將無法還原至一般用途效能層級。
  • 目前無法還原唯讀模式之資料庫的備份。

如需詳細資訊,請參閱 Azure SQL 受控執行個體

還原已加密的資料庫

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

權限

使用者必須具有 CREATE DATABASE 權限,才能執行 RESTORE。

CREATE LOGIN mylogin WITH PASSWORD = 'Very Strong Pwd123!';
GRANT CREATE ANY DATABASE TO [mylogin];

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

範例

下列範例會從 URL 還原僅限複製資料庫備份,包括建立認證。

A. 從四個備份裝置還原資料庫

-- Create credential
CREATE CREDENTIAL [https://mybackups.blob.core.windows.net/wide-world-importers]
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
      SECRET = 'sv=2017-11-09&ss=bq&srt=sco&sp=rl&se=2022-06-19T22:41:07Z&st=2018-06-01T14:41:07Z&spr=https&sig=s7wddcf0w%3D';
GO
-- Restore database
RESTORE DATABASE WideWorldImportersStandard
FROM URL = N'https://mybackups.blob.core.windows.net/wide-world-importers/00-WideWorldImporters-Standard.bak',
URL = N'https://mybackups.blob.core.windows.net/wide-world-importers/01-WideWorldImporters-Standard.bak',
URL = N'https://mybackups.blob.core.windows.net/wide-world-importers/02-WideWorldImporters-Standard.bak',
URL = N'https://mybackups.blob.core.windows.net/wide-world-importers/03-WideWorldImporters-Standard.bak'

如果資料庫已經存在,則會顯示下列錯誤:Msg 1801, Level 16, State 1, Line 9 Database 'WideWorldImportersStandard' already exists. Choose a different database name.

B. 還原透過變數所指定的資料庫

DECLARE @db_name sysname = 'WideWorldImportersStandard';
DECLARE @url nvarchar(400) = N'https://mybackups.blob.core.windows.net/wide-world-importers/WideWorldImporters-Standard.bak';

RESTORE DATABASE @db_name
FROM URL = @url

C. 追蹤還原陳述式的進度

SELECT query = a.text, start_time, percent_complete,
    eta = dateadd(second,estimated_completion_time/1000, getdate())
FROM sys.dm_exec_requests r
    CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a
WHERE r.command = 'RESTORE DATABASE'

注意

此檢視可能會顯示兩個還原要求。 一個是由用戶端傳送的原始 RESTORE 陳述式,另一個則是即便用戶端連線失敗,也會持續執行的背景 RESTORE 陳述式。

* Analytics
Platform System (PDW) *

 

分析平台系統

將 Analytics Platform System (PDW) 使用者資料庫從資料庫備份還原到 Analytics Platform System (PDW) 設備。 資料庫會從 Analytics Platform System (PDW) BACKUP DATABASE - Analytics Platform System 命令先前所建立的備份還原。 您可以使用備份和還原作業來建置災害復原計劃,或將資料庫從一個應用裝置移至另一個應用裝置。

注意

還原 master 系統資料庫包括還原設備登入資訊。 如需還原 master 資料庫,請使用 [組態管理員] 工具中的還原 master 資料庫頁面。 能夠存取控制節點的系統管理員將可執行這項作業。 如需 Analytics Platform System (PDW) 資料庫備份的詳細資訊,請參閱 Analytics Platform System (PDW) 產品文件中的<備份和還原>。

語法

-- Restore the master database
-- Use the Configuration Manager tool.

Restore a full user database backup.
RESTORE DATABASE database_name
    FROM DISK = '\\UNC_path\full_backup_directory'
[;]

--Restore a full user database backup and then a differential backup.
RESTORE DATABASE database_name
    FROM DISK = '\\UNC_path\differential_backup_directory'
    WITH [ ( ] BASE = '\\UNC_path\full_backup_directory' [ ) ]
[;]

--Restore header information for a full or differential user database backup.
RESTORE HEADERONLY
    FROM DISK = '\\UNC_path\backup_directory'
[;]

引數

RESTORE DATABASE database_name

指定將使用者資料庫還原至名為 database_name 的資料庫。 還原的資料庫名稱可能與備份的來源資料庫不同。database_name 無法以目的地設備上的資料庫形式存在。 如需允許資料庫名稱的詳細資訊,請參閱 Analytics Platform System (PDW) 產品文件中的<物件命名規則>。

還原使用者資料庫時,會將完整資料庫備份及視需要將差異備份還原至應用裝置。 還原使用者資料庫時,會包括還原資料庫使用者和資料庫角色。

FROM DISK = '\\UNC_path\backup_directory'

Analytics Platform System (PDW) 還原備份檔案時的來源網路路徑和目錄。 例如 FROM DISK = '\\xxx.xxx.xxx.xxx\backups\2012\Monthly\08.2012.Mybackup'。

_directory 指定包含完整或差異備份的目錄名稱。 例如,您可以在完整或差異備份上執行 RESTORE HEADERONLY 作業。

full_backup_directory 指定包含完整備份的目錄名稱。

differential_backup_directory 指定包含差異備份的目錄名稱。

  • 備份目錄的路徑必須已經存在,且必須以完整通用命名慣例 (UNC) 路徑的形式指定。
  • 備份目錄的路徑不可以是本機路徑,也不可以是任何 Analytics Platform System (PDW) 設備節點上的位置。
  • UNC 路徑和備份目錄名稱的長度上限是 200 個字元。
  • 伺服器或主機必須以 IP 位址的形式指定。

RESTORE HEADERONLY

指定只傳回一個使用者資料庫備份的標頭資訊。 標頭包含備份的文字描述和備份名稱等。 備份名稱不一定要與儲存備份檔案的目錄同名。

RESTORE HEADERONLY 結果模式比照 SQL Server RESTORE HEADERONLY 結果。 此結果有超過 50 個資料行,這些資料行不會完全供 Analytics Platform System (PDW) 使用。 如需 SQL Server RESTORE HEADERONLY 結果中資料行的描述,請參閱 RESTORE HEADERONLY

權限

需要 CREATE ANY DATABASE 權限。

需要具備備份目錄之存取和讀取權限的 Windows 帳戶。 您也必須將 Windows 帳戶名稱和密碼儲存在 Analytics Platform System (PDW) 中。

錯誤處理

在下列情況下,RESTORE DATABASE 命令會造成錯誤:

  • 目標應用裝置上已經有要還原之資料庫的名稱。 若要避免此問題,請選擇一個唯一的資料庫名稱,或在執行還原之前,先卸除現有的資料庫。
  • 備份目錄中有一組無效的備份檔案。
  • 登入權限不足以還原資料庫。
  • Analytics Platform System (PDW) 沒有備份檔案所在網路位置的正確權限。
  • 備份目錄的網路位置不存在或無法使用。
  • 計算節點或控制節點上的磁碟空間不足。 Analytics Platform System (PDW) 在起始還原之前,不會確認設備上是否有足夠的磁碟空間。 因此,在執行 RESTORE DATABASE 陳述式時,可能產生磁碟空間不足錯誤。 出現磁碟空間不足時,Analytics Platform System (PDW) 會復原還原作業。
  • 作為資料庫還原目的地之目標應用裝置的計算節點數目,比備份資料庫時之來源應用裝置的計算節點數目少。
  • 從交易內嘗試執行資料庫還原。

備註

Analytics Platform System (PDW) 可追蹤資料庫還原是否成功。 在還原差異資料庫備份之前,Analytics Platform System 會驗證完整資料庫還原已成功完成。

還原之後,使用者資料庫的資料庫相容性層級相會是 120。 這適用於所有資料庫,不論其原始相容性層級為何。

還原至具有較多計算節點的設備

因為轉散發會增加交易記錄,所以將資料庫從較小型設備還原至較大型設備之後,請執行 DBCC SHRINKLOG (Azure Synapse Analytics)

將備份還原至具有較多計算節點的應用裝置時,會讓已配置的資料庫大小依計算節點數目比例成長。

例如,將 60 GB 資料庫從具有 2 個節點的設備 (每個節點 30 GB) 還原至具有 6 個節點的設備時,Analytics Platform System (PDW) 會在具有 6 個節點的設備上建立一個 180 GB 的資料庫 (6 個節點,每個節點 30 GB)。 Analytics Platform System (PDW) 一開始會將資料庫還原至 2 個節點以符合來源組態,然後會將資料轉散發至全部 6 個節點。

在轉散發之後,與較小型的來源應用裝置相比,每個計算節點將會包含較少的實際資料和較多的可用空間。 請使用額外的空間將更多資料新增至資料庫。 如果所還原資料庫大於您所需的大小,您可以使用 ALTER DATABASE - PDW 來縮減資料庫檔案大小。

限制事項

就這些限制而言,來源應用裝置是您從中建立資料庫備份的應用裝置,而目標應用裝置則是將作為資料庫還原目的地的應用裝置。

  • 還原資料庫並不會自動重建統計資料。
  • 在任何指定時間,在應用裝置上都只能執行一個 RESTORE DATABASE 或 BACKUP DATABASE 陳述式。 如果同時提交多個備份和還原陳述式,應用裝置就會將它們排入佇列,然後一次處理一個陳述式。
  • 您只能將資料庫備份還原至所擁有計算節點數目等於或大於來源設備的 Analytics Platform System (PDW) 目標設備。 目標應用裝置所擁有的計算節點數目不可以比來源應用裝置少。
  • 您無法將在具有 SQL Server 2012 PDW 硬體之應用裝置上建立的備份,還原至具有 SQL Server 2008 R2 硬體的應用裝置。 即使原先購買應用裝置時是配備 SQL Server 2008 R2 PDW 硬體,而現在執行的是 SQL Server 2012 PDW 軟體,也適用此限制。

鎖定

在 DATABASE 物件上採用獨佔鎖定。

範例

A. 簡單的 RESTORE 範例

下列範例會將完整資料庫備份還原至 SalesInvoices2013 資料庫。 備份檔案會儲存在 \\\xxx.xxx.xxx.xxx\backups\yearly\Invoices2013Full 目錄中。 SalesInvoices2013 資料庫不得是目標設備上已存在的資料庫,否則此命令會因發生錯誤而失敗。

RESTORE DATABASE SalesInvoices2013
FROM DISK = '\\xxx.xxx.xxx.xxx\backups\yearly\Invoices2013Full';

B. 還原完整和差異備份

下列範例會先將完整備份還原至 SalesInvoices2013 資料庫,然後再將差異備份還原至該資料庫

還原資料庫完整備份時,會從儲存在 \\\xxx.xxx.xxx.xxx\backups\yearly\Invoices2013Full 目錄中的完整備份還原。 如果還原順利完成,差異備份就會還原至 SalesInvoices2013 資料庫。 差異備份會儲存在 \\\xxx.xxx.xxx.xxx\backups\yearly\Invoices2013Diff 目錄中。

RESTORE DATABASE SalesInvoices2013
    FROM DISK = '\\xxx.xxx.xxx.xxx\backups\yearly\Invoices2013Diff'
    WITH BASE = '\\xxx.xxx.xxx.xxx\backups\yearly\Invoices2013Full'
[;]

C. 還原備份標頭

此範例可還原資料庫備份 \\\xxx.xxx.xxx.xxx\backups\yearly\Invoices2013Full 的標頭資訊。 此命令可為 Invoices2013Full 備份產生一列資訊。

RESTORE HEADERONLY
    FROM DISK = '\\xxx.xxx.xxx.xxx\backups\yearly\Invoices2013Full'
[;]

您可以使用此標頭資訊來檢查備份的內容,或在嘗試還原備份之前,先確認目標還原應用裝置與來源備份應用裝置相容。

下一步