將 SQL Server 數(shù)據(jù)庫(kù)恢復(fù)到不同的文件名和位置
一、概述
RESTORE ... WITH MOVE 選項(xiàng)允許您恢復(fù)數(shù)據(jù)庫(kù),但也可以指定數(shù)據(jù)庫(kù)文件(mdf 和 ldf)的新位置。如果您要從該數(shù)據(jù)庫(kù)的備份還原現(xiàn)有數(shù)據(jù)庫(kù),則不需要這樣做,但如果您要從具有不同文件位置的不同實(shí)例還原數(shù)據(jù)庫(kù),則可能需要使用此選項(xiàng)。
RESTORE ... WITH MOVE 選項(xiàng)將讓您確定數(shù)據(jù)庫(kù)文件的名稱以及創(chuàng)建這些文件的位置。在使用此選項(xiàng)之前,您需要知道這些文件的邏輯名稱以及 SQL Server 的位置。
如果已經(jīng)存在另一個(gè)使用您嘗試還原的相同文件名的數(shù)據(jù)庫(kù)并且該數(shù)據(jù)庫(kù)處于聯(lián)機(jī)狀態(tài),則還原將失敗。但是如果數(shù)據(jù)庫(kù)由于某種原因不在線并且文件沒(méi)有打開(kāi),如果你不使用 WITH MOVE 選項(xiàng),恢復(fù)將覆蓋這些文件,所以要小心你不要意外覆蓋好的數(shù)據(jù)庫(kù)文件。
此外,當(dāng)使用 WITH MOVE 選項(xiàng)時(shí),您需要確保用于 SQL Server 引擎的帳戶有權(quán)在您指定的文件夾中創(chuàng)建這些文件。
二、過(guò)程
1、T-SQL
確定備份內(nèi)容
因此,您需要做的第一件事是確定文件的邏輯名稱和物理位置。這可以通過(guò)使用RESTORE FILELISTONLY命令來(lái)完成。這將為您提供邏輯名稱和物理名稱。
如下面的例子:
RESTORE FILELISTONLY FROM DISK = 'C:\AdventureWorks.BAK'GO
輸出結(jié)果:
列名 | 值 - 第 1 行 | 值 - 第 2 行 |
邏輯名稱 | AdventureWorks_Data | AdventureWorks_Log |
物理名稱 | C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_Data.mdf | C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_Log.ldf |
類型 | D | L |
使用 MOVE 恢復(fù)完整備份假設(shè)我們要恢復(fù)這個(gè)數(shù)據(jù)庫(kù),但我們希望將數(shù)據(jù)文件放在“G:\SQLData”文件夾中,將事務(wù)日志文件放在“H:\SQLLog”文件夾中。該命令如下所示:
RESTORE DATABASE AdventureWorks FROM DISK = 'C:\AdventureWorks.BAK'WITH MOVE 'AdventureWorks_Data' TO 'G:\SQLData\AdventureWorks_Data.mdf',MOVE 'AdventureWorks_Log' TO 'H:\SQLLog\AdventureWorks_Log.ldf'GO
還原完整和事務(wù)日志備份 WITHMOVE 只需為第一次還原指定 WITH MOVE,因?yàn)榇撕髷?shù)據(jù)庫(kù)將處于“還原”狀態(tài)。第二次還原只會(huì)將內(nèi)容寫(xiě)入正在使用的這個(gè)新位置。
RESTORE DATABASE AdventureWorks FROM DISK = 'C:\AdventureWorks.BAK'WITH MOVE 'AdventureWorks_Data' TO 'G:\SQLData\AdventureWorks_Data.mdf',MOVE 'AdventureWorks_Log' TO 'H:\SQLLog\AdventureWorks_Log.ldf',NORECOVERYGORESTORE LOG AdventureWorks FROM DISK = 'C:\AdventureWorks.TRN'GO
2、SQL Server 管理工作室
要使用 SSMS 進(jìn)行還原,請(qǐng)執(zhí)行以下操作,在還原的選項(xiàng)頁(yè)面上,更改每個(gè)文件的“還原為:”的值,如下所示。下面將還原到根文件夾,但您可以根據(jù)需要將它們更改為 G:\SQLData\ 和 H:\SQLLog\。