Sql-Server
SQL Server 2016 Powershell:使用 -ReplaceDatabase 和 -RelocateFile 恢復-SqlDatabase
我們有一個多節點 SQL Server 2016 AlwaysOn 集群,並且需要經常將數據庫從一個節點/可用性組移動到另一個,所以我正在嘗試自動化該過程。
要將數據庫添加到輔助副本,我需要先準備它,即備份主副本,在輔助副本上創建新數據庫,將備份恢復到輔助副本。問題是路徑(本地驅動器)通常不匹配,例如:
- 主要:D:\Databases\db.mdf,D:\Logs\db_log.ldf
- 二級:E:\Databases\db.mdf,E:\Logs\db_log.ldf
我正在嘗試編寫一個 PoSh 腳本,假設我必須首先在 SECONDARY 伺服器上創建新數據庫,並提出以下內容:
$SQLQuery = "CREATE DATABASE [$Database] ON PRIMARY ( NAME = N'$Database', FILENAME = N'$DestinationDatabaseFile' , SIZE = 1024MB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024MB ) LOG ON ( NAME = N'$LogName', FILENAME = N'$DestinationLogFile' , SIZE = 1024MB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024MB )" Invoke-Sqlcmd2 -ServerInstance $DestinationServer -Database "master" -Query $SQLQuery $RelocateData = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile($Database, $DestinationDatabaseFile) $RelocateLog = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile($LogName, $DestinationLogFile) Restore-SqlDatabase -ServerInstance $DestinationServer -Database $Database -BackupFile $LogBackupFile -ReplaceDatabase -NoRecovery -RelocateFile @($RelocateData,$RelocateLog)
據我了解,我需要重新定位文件( -RelocateFile ),並替換數據庫( -ReplaceDatabase )。我得到的錯誤是:
Restore-SqlDatabase : System.Data.SqlClient.SqlError: 備份集包含一個數據庫的備份,而不是現有的“db”數據庫。
伺服器版本相同,數據庫兼容級別相同。
也許有人可以提出解決辦法?
謝謝!
以下工作:
$RelocateData = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile($Database, $DestinationDatabaseFile) $RelocateLog = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile($LogName, $DestinationLogFile) Restore-SqlDatabase -ServerInstance $DestinationServer -Database $Database -BackupFile $DatabaseBackupFile -ReplaceDatabase -NoRecovery -RelocateFile @($RelocateData,$RelocateLog) Restore-SqlDatabase -ServerInstance $DestinationServer -Database $Database -BackupFile $LogBackupFile -RestoreAction 'Log' -NoRecovery