如何:使用新的位置和名稱還原資料庫 (Transact-SQL)
本主題將說明如何使用新的位置和新的名稱 (選擇性) 來還原完整資料庫備份。這個程序可讓您在相同的伺服器執行個體或不同的伺服器執行個體上移動資料庫或建立資料庫的副本。如需有關移動資料庫之考量的詳細資訊,請參閱<使用備份與還原來複製資料庫>。
必要條件和建議
若要還原加密的資料庫,您必須能夠存取之前用來加密資料庫的憑證或非對稱金鑰。如果沒有該憑證或非對稱金鑰,就無法還原資料庫。因此,只要需要備份,就必須保留用來加密資料庫加密金鑰的憑證。如需詳細資訊,請參閱<SQL Server 憑證和非對稱金鑰>。
基於安全性的理由,建議您不要附加或還原來源不明或來源不受信任的資料庫。這種資料庫可能包含惡意程式碼,因此可能執行非預期的 Transact-SQL 程式碼,或是修改結構描述或實體資料庫結構而造成錯誤。使用來源不明或來源不受信任的資料庫之前,請先在非實際伺服器中的資料庫上執行 DBCC CHECKDB,同時檢查資料庫中的程式碼,例如預存程序或其他使用者自訂程式碼。
升級後的資料庫相容性層級
tempdb、model、msdb 和 Resource 資料庫的相容性層級在升級之後會設定為 100。master 系統資料庫會保有升級前的相容性層級,除非該層級小於 80。如果 master 的相容性層級在升級前小於 80,則會在升級後設定為 80。
如果使用者資料庫的相容性層級在升級前為 80 或 90,則在升級後仍會保持相同。如果升級前的相容性層級為 70 或更小,則在升級後的資料庫中,相容性層級會設定為 80 (這是 SQL Server 2008 所支援的最低相容性層級)。
[!附註]
新的使用者資料庫會繼承 model 資料庫的相容性層級。
程序
若要將資料庫還原到新位置和名稱
(選擇性) 在包含您想要還原之完整資料庫備份的備份組中,決定檔案的邏輯和實體名稱。這個陳述式會傳回備份組內所包含的資料庫和記錄檔清單。基本語法如下:
RESTORE FILELISTONLY FROM <backup_device> WITH FILE = backup_set_file_number
[!附註]
您可以使用 RESTORE HEADERONLY 陳述式來取得備份組的 backup_set_file_number。
這個陳述式也支援一些 WITH 選項。如需詳細資訊,請參閱<RESTORE FILELISTONLY (Transact-SQL)>。
使用 RESTORE DATABASE 陳述式來還原完整資料庫備份。根據預設,資料和記錄檔會還原到其原始位置。若要重新放置資料庫,請使用 MOVE 選項來重新放置每個資料庫檔案,避免與現有的檔案發生衝突。
將資料庫還原至新位置和新名稱的基本 Transact-SQL 語法為:
RESTORE DATABASE new_database_name
FROM backup_device [ ,...n ]
[ WITH
{
[ RECOVERY | NORECOVERY ]
[ , ] [ FILE ={ backup_set_file_number | @backup\_set\_file\_number } ]
[ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' [ ,...n ]
}
;
[!附註]
準備要在不同的磁碟上重新放置資料庫時,您應該確認有足夠的可用空間,並且識別與現有檔案發生衝突的任何可能性。這項作業包括使用 RESTORE VERIFYONLY 陳述式,其中指定您打算在 RESTORE DATABASE 陳述式中使用的相同 MOVE 參數。
下表針對將資料庫還原到新位置的作業,描述這個 RESTORE 陳述式的引數。如需有關這些引數的詳細資訊,請參閱<RESTORE (Transact-SQL)>。
new_database_name
資料庫的新名稱。[!附註]
如果您要將資料庫還原至不同的伺服器執行個體,可以使用原始資料庫名稱而非新名稱。
backup_device [ ,...n ]
指定一份逗號分隔清單,其中列出要從中還原資料庫備份的 1 到 64 個備份裝置。您可以指定實體備份裝置,也可以指定對應的邏輯備份裝置 (如果已定義的話)。若要指定實體備份裝置,請使用 DISK 或 TAPE 選項:{ DISK | TAPE } **=**physical_backup_device_name
如需詳細資訊,請參閱<備份裝置>。
{ RECOVERY | NORECOVERY }
如果資料庫使用完整復原模式,您可能必須在還原資料庫之後套用交易記錄備份。在此情況下,請指定 NORECOVERY 選項。否則,請使用 RECOVERY 選項 (預設值)。
FILE = { backup_set_file_number | @backup\_set\_file\_number }
識別要還原的備份組。例如,backup_set_file_number1,表示備份媒體的第一個備份組;backup_set_file_number2,表示第二個備份組。您可以使用 RESTORE HEADERONLY 陳述式來取得備份組的 backup_set_file_number。沒有指定這個選項時,預設值是使用備份裝置上的第一個備份組。
如需詳細資訊,請參閱<RESTORE 引數 (Transact-SQL)>中的<指定備份組>。
MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' [ ,...n ]
指定 logical_file_name_in_backup 所指定的資料或記錄檔要還原至 operating_system_file_name 所指定的位置。針對您想要從備份組還原到新位置的每一個邏輯檔案指定 MOVE 陳述式。選項
描述
logical_file_name_in_backup
指定備份組中資料或記錄檔的邏輯名稱。備份組中資料或記錄檔的邏輯檔案名稱,會與當初建立備份組時資料庫中的邏輯名稱相符。
附註若要取得備份組中的邏輯檔清單,請使用 RESTORE FILELISTONLY。operating_system_file_name
針對 logical_file_name_in_backup 所指定的檔案指定新的位置。檔案將還原至這個位置。
(選擇性) operating_system_file_name 會針對還原的檔案指定新的檔案名稱。如果您要在相同的伺服器執行個體上建立現有資料庫的副本,這就是必要選項。
n
這是預留位置,表示您可以指定其他 MOVE 陳述式。
[!附註]
在您將 SQL Server 2005 或 SQL Server 2000 資料庫還原為 SQL Server 2008 之後,資料庫就會變成立即可用,然後自動進行升級。如果資料庫具有全文檢索索引,升級程序就會根據 upgrade_option伺服器屬性的設定,匯入、重設或重建這些索引。如果升級選項設定為匯入 (upgrade_option = 2) 或重建 (upgrade_option = 0),則全文檢索索引在升級期間將無法使用。根據進行索引的資料數量而定,匯入可能需要數個小時,而重建可能需要十倍以上的時間。此外,請注意,當升級選項設定為 [匯入] 時,如果全文檢索目錄無法使用,系統就會重建相關聯的全文檢索索引。若要變更 upgrade_option 伺服器屬性的設定,請使用 sp_fulltext_service。
範例
描述
這個範例會建立名為 MyAdvWorks 的新資料庫。MyAdvWorks 是現有 AdventureWorks 資料庫的副本,其中包含兩個檔案:AdventureWorks_Data 和 AdventureWorks_Log。這個資料庫會使用簡單復原模式。AdventureWorks 資料庫已經存在伺服器執行個體上,因此備份中的檔案都必須還原至新的位置。RESTORE FILELISTONLY 陳述式是用來決定資料庫中所要還原的檔案數目及名稱。此資料庫備份是備份裝置上的第一個備份組。
[!附註]
如需有關如何建立 AdventureWorks 資料庫之完整資料庫備份的範例,請參閱<如何:建立完整資料庫備份 (Transact-SQL)>。
[!附註]
備份和還原交易記錄 (包括時間點還原) 的範例會使用從 AdventureWorks 建立的 MyAdvWorks_FullRM 資料庫,就如同以下 MyAdvWorks 範例。不過,產生的 MyAdvWorks_FullRM 資料庫必須變更為使用完整復原模式:ALTER DATABASE MyAdvWorks_FullRM SET RECOVERY FULL。
程式碼
USE master
GO
-- First determine the number and names of the files in the backup.
-- AdventureWorks_Backup is the name of the backup device.
RESTORE FILELISTONLY
FROM AdventureWorks_Backup
-- Restore the files for MyAdvWorks.
RESTORE DATABASE MyAdvWorks
FROM AdventureWorks_Backup
WITH RECOVERY,
MOVE 'AdventureWorks_Data' TO 'D:\MyData\MyAdvWorks_Data.mdf',
MOVE 'AdventureWorks_Log' TO 'F:\MyLog\MyAdvWorks_Log.ldf'
GO