通过 PowerShell 将 SQL Server 2008 .bak 恢复到 SQL Server 2014 服务器实例
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
而不是 Restore-SqlDatabase
cmdlet 正在寻找的 MSSQL10.MSSQLSERVER
. MSSQL12.MSSQLSERVER
位置也已存在具有正确名称的数据库。
如何告诉 cmdlet 将其还原到正确的文件夹?
事实证明,像这样恢复数据库是不可能的(我能找到)。我将 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。
您可以通过将文件位置指定为对象并使用 -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 配置过程的一部分,我正在尝试将数据库还原到 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
而不是 Restore-SqlDatabase
cmdlet 正在寻找的 MSSQL10.MSSQLSERVER
. MSSQL12.MSSQLSERVER
位置也已存在具有正确名称的数据库。
如何告诉 cmdlet 将其还原到正确的文件夹?
事实证明,像这样恢复数据库是不可能的(我能找到)。我将 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。
您可以通过将文件位置指定为对象并使用 -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