簡體   English   中英

通過 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代替MSSQL10.MSSQLSERVERRestore-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM