將 SQL Server 數據庫恢復到不同的文件名和位置
一、概述
RESTORE ... WITH MOVE 選項允許您恢復數據庫,但也可以指定數據庫文件(mdf 和 ldf)的新位置。如果您要從該數據庫的備份還原現有數據庫,則不需要這樣做,但如果您要從具有不同文件位置的不同實例還原數據庫,則可能需要使用此選項。
RESTORE ... WITH MOVE 選項將讓您確定數據庫文件的名稱以及創建這些文件的位置。在使用此選項之前,您需要知道這些文件的邏輯名稱以及 SQL Server 的位置。
如果已經存在另一個使用您嘗試還原的相同文件名的數據庫并且該數據庫處于聯機狀態,則還原將失敗。但是如果數據庫由于某種原因不在線并且文件沒有打開,如果你不使用 WITH MOVE 選項,恢復將覆蓋這些文件,所以要小心你不要意外覆蓋好的數據庫文件。
此外,當使用 WITH MOVE 選項時,您需要確保用于 SQL Server 引擎的帳戶有權在您指定的文件夾中創建這些文件。
二、過程
1、T-SQL
確定備份內容
因此,您需要做的第一件事是確定文件的邏輯名稱和物理位置。這可以通過使用RESTORE FILELISTONLY命令來完成。這將為您提供邏輯名稱和物理名稱。
如下面的例子:
RESTORE FILELISTONLY FROM DISK = 'C:\AdventureWorks.BAK'GO
輸出結果:
列名 | 值 - 第 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 恢復完整備份假設我們要恢復這個數據庫,但我們希望將數據文件放在“G:\SQLData”文件夾中,將事務日志文件放在“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
還原完整和事務日志備份 WITHMOVE 只需為第一次還原指定 WITH MOVE,因為此后數據庫將處于“還原”狀態。第二次還原只會將內容寫入正在使用的這個新位置。
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 進行還原,請執行以下操作,在還原的選項頁面上,更改每個文件的“還原為:”的值,如下所示。下面將還原到根文件夾,但您可以根據需要將它們更改為 G:\SQLData\ 和 H:\SQLLog\。