![](/img/trans.png)
[英]Restoring SQL Server 2008 R2 *.bak databases on SQL Server 2014 Express
[英]Restoring a SQL Server 2008 .bak to a SQL Server 2014 server instance via PowerShell
我正在嘗試將數據庫還原到 VM,作為新 VM 配置過程的一部分。 但是,當我嘗試使用以下命令恢復數據庫時:
Restore-SqlDatabase -ServerInstance . -Database SomeDatabase -BackupFile $latestBackup -ReplaceDatabase
它失敗並出現錯誤:
Restore-SqlDatabase : System.Data.SqlClient.SqlError: Directory lookup for the file "C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\SomeDatabase.mdf" failed with the operating system error 3(The system cannot find the path specified.).
At line:27 char:1
+ Restore-SqlDatabase -ServerInstance . -Database SomeDatabase -BackupFile $latestB ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Restore-SqlDatabase], SmoException
+ FullyQualifiedErrorId : ExecutionFailed,Microsoft.SqlServer.Management.PowerShell.RestoreSqlDatabaseCommand
這是混亂的,因為使用SQL Server 2014具有完全相同的路徑,但MSSQL12.MSSQLSERVER
代替MSSQL10.MSSQLSERVER
的Restore-SqlDatabase
cmdlet的所期待的。 MSSQL12.MSSQLSERVER
位置也已存在具有正確名稱的數據庫。
如何告訴 cmdlet 將其還原到正確的文件夾?
您可以通過將文件位置指定為對象並使用 -RelocateFile 參數將它們傳遞給 Restore-SQLDatabase 來實現
$RelocateData = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("MainDB_Data", "c:\MySQLServer\MainDB.mdf")
$RelocateLog = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("MainDB_Log", "c:\MySQLServer\MainDB.ldf")
Restore-SqlDatabase -ServerInstance "Computer\Instance" -Database "MainDB" -BackupFile "\\mainserver\databasebackup\MainDB.trn" -RelocateFile @($RelocateData,$RelocateLog)
https://technet.microsoft.com/en-us/library/mt683379%28v=sql.120%29.aspx
事實證明,像這樣恢復數據庫是不可能的(我能找到)。 我將 VM 恢復為使用匹配的 SQL 服務器,並使用以下命令恢復數據庫:
Invoke-Sqlcmd -Query "RESTORE DATABASE [SomeDatabase] FROM DISK = N'C:\$latestBackup' WITH FILE = 1, MOVE N'SomeDatabase' TO N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\SomeDatabase.mdf', MOVE N'SomeDatabase_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\SomeDatabase.ldf', NOUNLOAD, STATS = 10"
這是通過 SQL Server Management Studio 的“腳本”功能獲得的,我在其中設置了還原並導出了等效的 SQL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.