通过PowerShell将SQL Server 2008 .bak还原到SQL Server 2014服务器实例

时间:2015-09-15 23:41:41

标签: sql-server sql-server-2008 powershell sql-server-2014

我正在尝试将数据库还原到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 cmdlet正在寻找的Restore-SqlDatabase。名称正确的数据库也已存在于MSSQL12.MSSQLSERVER位置。

如何告诉cmdlet将其还原到正确的文件夹?

2 个答案:

答案 0 :(得分:1)

您可以通过将文件位置指定为对象并使用-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

答案 1 :(得分:0)

事实证明,恢复像这样的数据库是不可能的(我能找到)。我还原了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" Script"功能,我设置还原并导出等效的SQL。