RESTORE (Transact-SQL)
還原利用 BACKUP 命令取得的備份。 此命令可讓您執行以下還原案例:
從完整資料庫備份還原整個資料庫 (完整還原)。
還原部分資料庫 (部分還原)。
將特定檔案或檔案群組還原到資料庫 (檔案還原)。
將特定頁面還原到資料庫 (分頁還原)。
將交易記錄還原到資料庫 (交易記錄還原)。
將資料庫還原到資料庫快照集所擷取的時間點。
如需有關 SQL Server 還原案例的詳細資訊,請參閱<還原和復原概觀 (SQL Server)>。
[!附註]
如需有關引數之描述的詳細資訊,請參閱<RESTORE 引數 (Transact-SQL)>。
[!附註]
從 SQL Server 2012 SP1 累計更新 2 開始,就支援從 SQL Server 備份至 Windows Azure Blob 儲存體服務。 如需詳細資訊,請參閱<備份與還原增強功能>和<SQL Server 備份及還原與 Windows Azure Blob 儲存體服務>。
語法
--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 } = { '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
<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 引數 (Transact-SQL)>。
關於還原狀況
SQL Server 支援各種還原狀況:
完整資料庫還原
還原整個資料庫,從完整資料庫備份開始,後面可能接著還原差異資料庫備份 (和記錄備份)。 如需詳細資訊,請參閱<完整資料庫還原 (簡單復原模式)>或<完整的資料庫還原 (完整復原模式)>。
檔案還原
還原多個檔案群組資料庫中的檔案或檔案群組。 請注意,在簡單復原模式之下,檔案必須屬於唯讀檔案群組。 在完整檔案還原之後,便可以還原差異檔案備份。 如需詳細資訊,請參閱<檔案還原 (完整復原模式)>和<檔案還原 (簡單復原模式)>。
分頁還原
還原個別頁面。 只有完整復原模式和大量記錄復原模式會使用分頁還原。 如需詳細資訊,請參閱<還原頁面 (SQL Server)>。
分次還原
分段還原資料庫,從主要檔案群組及一個或多個次要檔案群組開始。 分次還原從使用 PARTIAL 選項且指定還原一個或多個次要檔案群組的 RESTORE DATABASE 開始。 如需詳細資訊,請參閱<分次還原 (SQL Server)>。
僅限復原
復原已與資料庫一致的資料,只需要使其成為可用。 如需詳細資訊,請參閱<在不還原資料的情況下復原資料庫 (Transact-SQL)>。
交易記錄還原。
在完整或大量記錄復原模式之下,您必須還原記錄備份,以到達所需要的復原點。 如需有關還原記錄備份的詳細資訊,請參閱<套用異動記錄備份 (SQL Server)>。
為 AlwaysOn 可用性群組準備可用性資料庫
如需詳細資訊,請參閱<針對可用性群組手動準備次要資料庫 (SQL Server)>。
為資料庫鏡像準備鏡像資料庫
如需詳細資訊,請參閱<準備鏡像資料庫以進行鏡像 (SQL Server)>。
線上還原
[!附註]
只有在 SQL Server 2005 Enterprise Edition 和更新版本中才允許線上還原。
當支援線上還原時,如果資料庫在線上,檔案還原和分頁還原會自動成為線上還原,另外,也會在分次還原的初始階段之後,還原次要檔案群組。
[!附註]
線上還原可能涉及延遲交易。
如需詳細資訊,請參閱<線上還原 (SQL Server)>。
關於 RESTORE 選項的其他考量
已停止的 RESTORE 關鍵字
下列關鍵字在 SQL Server 2008 中已停止:
已停止的關鍵字 |
取代者 |
取代關鍵字的範例 |
---|---|---|
LOAD |
RESTORE |
RESTORE DATABASE |
TRANSACTION |
LOG |
RESTORE LOG |
DBO_ONLY |
RESTRICTED_USER |
RESTORE DATABASE ... WITH RESTRICTED_USER |
RESTORE LOG
RESTORE LOG 可以包括一份檔案清單,讓您在向前復原期間建立檔案。 如果記錄備份包含檔案加入資料庫時所撰寫的記錄檔記錄,便使用這個項目。
[!附註]
如果是使用完整或大量記錄復原模式的資料庫,在大部分情況下,您必須先備份記錄結尾,再還原資料庫。 除非 RESTORE DATABASE 陳述式包含 WITH REPLACE 或 WITH STOPAT 子句 (必須指定在資料備份結束之後發生的時間或交易),否則如果沒有先備份記錄結尾便還原資料庫,就會產生錯誤。 如需有關結尾記錄備份的詳細資訊,請參閱<結尾記錄備份 (SQL Server)>。
比較 RECOVERY 和 NORECOVERY
RESTORE 陳述式利用 [ RECOVERY | NORECOVERY ] 選項來控制回復:
NORECOVERY 指定不進行回復。 這使向前復原能夠繼續循序執行下一個陳述式。
在這個情況下,還原順序可以還原其他備份,並將它們向前復原。
RECOVERY (預設值) 表示在完成目前備份的向前復原之後,應該執行回復。
復原資料庫需要還原的整個資料集 (「向前復原集」(Roll Forward Set)) 與資料庫一致。 如果向前復原集尚未向前復原到足以與資料庫一致的範圍,且指定了 RECOVERY,Database Engine 就會發出錯誤。
相容性支援
在 SQL Server 2012 中,您可以從使用 SQL Server 2005 或更新版本所建立的資料庫備份還原使用者資料庫。 但是,SQL Server 2012 無法還原使用 SQL Server 2005 或 SQL Server 2008 所建立的 master、model 和 msdb 備份。 此外,任何舊版 SQL Server 都無法還原在 SQL Server 2012 中建立的備份。
[!附註]
您無法將 SQL Server 備份還原成比建立備份所用之版本還舊的 SQL Server 版本。
SQL Server 2012 使用與之前版本不同的預設路徑。 因此,若要還原在 SQL Server 2005 或 SQL Server 2008 備份之預設位置中所建立的資料庫,就必須使用 MOVE 選項。 如需有關新預設路徑的詳細資訊,請參閱<SQL Server 的預設和具名執行個體的檔案位置>。
將 SQL Server 2005 或 SQL Server 2008 資料庫還原成 SQL Server 2012 之後,資料庫會自動升級。 通常,資料庫立即變為可用。 不過,如果 SQL Server 2005 資料庫具有全文檢索索引,升級程序就會根據 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 (Transact-SQL)>。 重新產生 DMK 金鑰以升級至 AES 所需的時間是取決於 DMK 所保護的物件數目而定。 重新產生 DMK 金鑰以升級至 AES 只需執行一次,且不會影響金鑰循環策略中後續的重新產生。
一般備註
在離線還原期間,如果指定的資料庫在使用中,RESTORE 會在一小段延遲之後,強迫使用者結束作業。 如果是非主要檔案群組的線上還原,除非正在還原的檔案群組在離線中,否則,資料庫會保持使用中的狀態。 還原的資料會取代指定之資料庫中的任何資料。
如需有關資料庫復原的詳細資訊,請參閱<還原和復原概觀 (SQL Server)>。
只要作業系統支援資料庫的定序,便可以執行跨平台的還原作業,即使在不同類型的處理器之間,也是如此。
RESTORE 可以在發生錯誤之後,重新啟動。 另外,您也可以指示 RESTORE 不論是否發生錯誤,一律繼續作業,它會盡可能還原多一點的資料 (請參閱 CONTINUE_AFTER_ERROR 選項)。
在明確或隱含的交易中,不允許使用 RESTORE。
損毀的 master 資料庫必須利用特殊程序來還原。 如需詳細資訊,請參閱<系統資料庫的備份與還原 (SQL Server)>。
還原資料庫會清除 SQL Server 執行個體的計畫快取。 清除計畫快取會導致重新編譯所有後續執行計畫,而且可能會導致查詢效能突然暫時下降。 自 SQL Server 2005 Service Pack 2 起,計畫快取中每一個清除之快取存放區的 SQL Server 錯誤記錄檔中,都會包含下列資訊訊息:"「由於某些資料庫維護或重新設定作業,SQL Server 的 '%s' 快取存放區 (計劃快取的一部分) 發生 %d 次快取存放區排清。」 只要在該時間間隔內快取發生排清,這個訊息就會每五分鐘記錄一次。
若要還原可用性資料庫,請先將資料庫還原至 SQL Server 執行個體,然後再將資料庫新增至可用性群組。
互通性
資料庫設定和還原
在還原期間,大部分可以利用 ALTER DATABASE 來設定的資料庫選項都會重設為備份結束時的有效值。
不過,使用 WITH RESTRICTED_USER 選項會覆寫使用者存取選項設定的這個行為。 這項設定一律設在 RESTORE 陳述式之後,其中包括 WITH RESTRICTED_USER 選項。
還原加密資料庫
若要還原加密的資料庫,您必須能夠存取之前用來加密資料庫的憑證或非對稱金鑰。 如果沒有該憑證或非對稱金鑰,就無法還原資料庫。 因此,只要需要備份,就必須保留用來加密資料庫加密金鑰的憑證。 如需詳細資訊,請參閱<SQL Server 憑證與非對稱金鑰>。
還原啟用 Vardecimal 儲存的資料庫
備份與還原可以搭配 vardecimal 儲存格式正常運作。 如需有關 vardecimal 儲存格式的詳細資訊,請參閱<sp_db_vardecimal_storage_format (Transact-SQL)>。
還原全文檢索資料
在完整還原期間,全文檢索資料會與其他資料庫資料一起還原。 當使用正規 RESTORE DATABASE database_name FROM backup_device 語法時,還原資料庫檔也會還原全文檢索檔案。
您也可以利用 RESTORE 陳述式,將全文檢索資料還原到替代位置,以及執行全文檢索資料的差異還原、檔案和檔案群組還原及差異檔案和檔案群組還原。 另外,RESTORE 只能連同資料庫資料一起還原全文檢索檔案。
[!附註]
從 SQL Server 2005 匯入的全文檢索目錄仍然會視為資料庫檔案。 對於這些檔案而言,備份全文檢索目錄的 SQL Server 2005 程序會維持適用狀態,不過不再需要於備份作業期間暫停和繼續。 如需詳細資訊,請參閱《SQL Server 2005 線上叢書》中的<備份與還原全文檢索目錄>。
中繼資料
SQL Server 包含備份與還原記錄資料表,以便用來為每個伺服器執行個體進行追蹤備份和還原活動。 當執行還原時,也會修改備份記錄資料表。 如需有關這些資料表的詳細資訊,請參閱<備份記錄與標頭資訊 (SQL Server)>。
REPLACE 選項影響
REPLACE 不應經常使用,而且只應在審慎考量之後使用。 還原通常可以防止意外將資料庫覆寫成不同資料庫。 如果 RESTORE 陳述式中指定的資料庫已經存在於目前伺服器,而且指定的資料庫系列 GUID 與備份組中記錄的資料庫系列 GUID 不同,將不會還原資料庫。 這是重要的防護措施。
REPLACE 選項會覆寫還原通常會執行的數項重要安全檢查。 會覆寫的檢查如下:
使用從其他資料庫建立的備份來還原現有資料庫。
使用 REPLACE 選項,即使指定的資料庫名稱與備份組中所記錄的資料庫名稱不同,還原仍可讓您以備份組中的任何資料庫覆寫現有的資料庫。 這可能會導致意外將資料庫覆寫成不同資料庫。
使用完整或大量記錄復原模式來還原資料庫,而這兩種模式都未取得結尾記錄備份也未使用 STOPAT 選項。
使用 REPLACE 選項,您可能會遺失已認可的記錄,因為最近寫入的記錄尚未被備份。
覆寫現有的檔案。
例如,作業失誤可能導致覆寫到錯誤的檔案類型 (例如 .xls 檔案),或覆寫到其他資料庫 (目前不在線上) 正在使用的檔案。 如果覆寫了現有檔案,即使還原的資料庫是完整的,仍有可能遺失任意資料。
重做還原
您不可能恢復還原的效果;不過,您可以針對個別檔案重新開始,以消除資料複製和向前復原的效果。 若要重新開始,請還原所需要的檔案,再重新執行向前復原。 例如,如果您不慎還原太多記錄備份,超出您想要的停止點,您就必須重新開始這個順序。
您可以還原受影響之檔案的整個內容來中止和重新開始還原順序。
將資料庫還原為資料庫快照集
「還原資料庫作業」(Revert Database Operation) (利用 DATABASE_SNAPSHOT 選項指定) 會還原到資料庫快照集,也就是用指定的資料庫快照集中維護的時間點資料來覆寫來源資料庫,及時取回完整的來源資料庫。 目前能存在的快照集只限於您要還原的目標快照集。 之後,還原作業會重建記錄檔 (因此,您無法稍後再將還原的資料庫向前復原到發生使用者錯誤的那個時間點)。
您只會失去建立快照集之後的資料庫更新資料。 還原資料庫的中繼資料與建立快照集時的中繼資料相同。 不過,還原為快照集會卸除所有全文檢索目錄。
從資料庫快照集還原的用途,並不在於復原媒體。 資料庫快照集不像正規的備份組,它是不完整的資料庫檔案副本。 如果資料庫或資料庫快照集損毀,可能就無法從快照集還原。 此外,即使可以還原,但是在損毀的情況下還原也不太可能會更正問題。
還原限制
在下列狀況下,不支援還原:
來源資料庫包含任何唯讀或壓縮的檔案群組。
建立快照集時原本處於線上狀態的所有檔案,現在都變成離線狀態。
目前已經有一個以上的資料庫快照集。
如需詳細資訊,請參閱<將資料庫還原成資料庫快照集>。
安全性
備份作業可以選擇性地指定媒體集的密碼及 (或) 備份組的密碼。 當在媒體集或備份組上定義密碼時,您必須在 RESTORE 陳述式中,指定一個或多個正確的密碼。 這些密碼可以防止他人利用 SQL Server 工具,在未獲授權的情況下,在媒體上執行還原作業及附加備份組。 不過,BACKUP 陳述式的 FORMAT 選項可以覆寫密碼所保護的媒體。
安全性注意事項 |
---|
這個密碼所提供的保護很弱。 這是為了防止已獲授權或未獲授權的使用者使用 SQL Server 工具進行不正確的還原。 它無法防止透過其他方式或以取代密碼的方式來讀取備份資料。 未來的 Microsoft SQL Server 版本將移除這項功能。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 保護備份的最佳作法是將備份磁帶存放在安全位置,或備份至適當的存取控制清單 (ACL) 所保護的磁碟檔案中。 ACL 應該設在備份建立所在的根目錄下。 |
權限
如果還原的資料庫不存在,使用者必須有 CREATE DATABASE 權限,才能執行 RESTORE。 如果資料庫存在,RESTORE 權限預設為系統管理員 (sysadmin) 和資料庫建立者 (dbcreator) 固定伺服器角色的成員以及資料庫的擁有者 (dbo) (對 FROM DATABASE_SNAPSHOT 選項而言,資料庫一律存在)。
RESTORE 權限提供給伺服器隨時可以取得其成員資格資訊的角色。 由於資料庫必須是可存取且未損毀,才能夠檢查固定資料庫角色成員資格,但執行 RESTORE 時未必如此,因此,db_owner 固定資料庫角色的成員並沒有 RESTORE 權限。
範例
所有範例都假設已執行完整資料庫備份。
RESTORE 範例包括:
A. 還原完整資料庫
B. 還原完整和差異資料庫備份
C. 使用 RESTART 語法還原資料庫
D. 還原資料庫和移動檔案
E. 使用 BACKUP 和 RESTORE 複製資料庫
F. 使用 STOPAT 還原至時間點
G. 將交易記錄還原到標記
H. 使用 TAPE 語法進行還原
I. 使用 FILE 與 FILEGROUP 語法進行還原
J. 從資料庫快照集還原
[!附註]
如需其他範例,請參閱列在<還原和復原概觀 (SQL Server)>中關於還原的使用說明主題。
A.還原完整資料庫
下列範例會從 AdventureWorksBackups 邏輯備份裝置還原完整的資料庫備份。 如需有關建立這個裝置的範例,請參閱<備份裝置>。
RESTORE DATABASE AdventureWorks2012
FROM AdventureWorks2012Backups;
[!附註]
如果是使用完整或大量記錄復原模式的資料庫,在大部分情況下,SQL Server 都會要求您先備份記錄結尾,再還原資料庫。 如需詳細資訊,請參閱<結尾記錄備份 (SQL Server)>。
[精選範例]
B.還原完整和差異資料庫備份
下列範例會還原完整資料庫備份,接著再從包含這兩種備份 Z:\SQLServerBackups\AdventureWorks2012.bak 備份裝置進行差異備份。 將進行還原的完整備份是裝置上的第六個備份組 (FILE = 6),而差異資料庫備份是裝置上的第九個備份組 (FILE = 9)。 只要差異備份一完成復原,資料庫就完成復原。
RESTORE DATABASE AdventureWorks2012
FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2012.bak'
WITH FILE = 6
NORECOVERY;
RESTORE DATABASE AdventureWorks2012
FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2012.bak'
WITH FILE = 9
RECOVERY;
[精選範例]
C.使用 RESTART 語法還原資料庫
下列範例會利用 RESTART 選項來重新啟動因伺服器斷電而中斷的 RESTORE 作業。
-- This database RESTORE halted prematurely due to power failure.
RESTORE DATABASE AdventureWorks2012
FROM AdventureWorksBackups;
-- Here is the RESTORE RESTART operation.
RESTORE DATABASE AdventureWorks2012
FROM AdventureWorksBackups WITH RESTART;
[精選範例]
D.還原資料庫和移動檔案
下列範例會還原完整的資料庫和交易記錄,並將還原的資料庫移至 C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data 目錄。
RESTORE DATABASE AdventureWorks2012
FROM AdventureWorksBackups
WITH NORECOVERY,
MOVE 'AdventureWorks2012_Data' TO
'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\NewAdvWorks.mdf',
MOVE 'AdventureWorks2012_Log'
TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\NewAdvWorks.ldf';
RESTORE LOG AdventureWorks2012
FROM AdventureWorksBackups
WITH RECOVERY;
[精選範例]
E.使用 BACKUP 和 RESTORE 複製資料庫
下列範例使用 BACKUP 和 RESTORE 陳述式建立 AdventureWorks2012 資料庫的副本。 MOVE 陳述式會使資料和記錄檔還原到指定的位置。 RESTORE FILELISTONLY 陳述式是用來決定資料庫中所要還原的檔案數目及名稱。 新資料庫複本的名稱是 TestDB。 如需詳細資訊,請參閱<RESTORE FILELISTONLY (Transact-SQL)>。
BACKUP DATABASE AdventureWorks2012
TO AdventureWorksBackups ;
RESTORE FILELISTONLY
FROM AdventureWorksBackups ;
RESTORE DATABASE TestDB
FROM AdventureWorksBackups
WITH MOVE 'AdventureWorks2012_Data' TO 'C:\MySQLServer\testdb.mdf',
MOVE 'AdventureWorks2012_Log' TO 'C:\MySQLServer\testdb.ldf';
GO
[精選範例]
F.使用 STOPAT 還原至時間點
下列範例會將資料庫還原至 April 15, 2020 12:00 AM 時的狀態,並顯示含有多個記錄備份的還原作業。 在備份裝置 AdventureWorksBackups 上,要還原的完整資料庫備份是裝置上的第三個備份組 (FILE = 3),第一個記錄備份是第四個備份組 (FILE = 4),而第二個記錄備份是第五個備份組 (FILE = 5)。
RESTORE DATABASE AdventureWorks2012
FROM AdventureWorksBackups
WITH FILE=3, NORECOVERY;
RESTORE LOG AdventureWorks2012
FROM AdventureWorksBackups
WITH FILE=4, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';
RESTORE LOG AdventureWorks2012
FROM AdventureWorksBackups
WITH FILE=5, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';
RESTORE DATABASE AdventureWorks2012 WITH RECOVERY;
[精選範例]
G.將交易記錄還原到標記
下列範例會將交易記錄還原到名為 ListPriceUpdate 的標示交易中之標示。
USE AdventureWorks2012
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 AdventureWorks2012
FROM AdventureWorksBackups
WITH FILE = 3, NORECOVERY;
GO
RESTORE LOG AdventureWorks2012
FROM AdventureWorksBackups
WITH FILE = 4,
RECOVERY,
STOPATMARK = 'UPDATE Product list prices';
[精選範例]
H.使用 TAPE 語法進行還原
下列範例會從 TAPE 備份裝置還原完整的資料庫備份。
RESTORE DATABASE AdventureWorks2012
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
[精選範例]
K.從資料庫快照集還原
下列範例會將資料庫還原到某個資料庫快照集。 這個範例假設資料庫目前只有一個快照集。 如需如何建立這個資料庫快照集的範例,請參閱<建立資料庫快照集 (Transact-SQL)>。
[!附註]
還原為快照集會卸除所有全文檢索目錄。
USE master;
RESTORE DATABASE AdventureWorks2012 FROM DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';
GO
如需詳細資訊,請參閱<將資料庫還原成資料庫快照集>。
[精選範例]
請參閱
參考
RESTORE REWINDONLY (Transact-SQL)
RESTORE VERIFYONLY (Transact-SQL)