Sql-Server

SQL Server 2016 Powershell:使用 -ReplaceDatabase 和 -RelocateFile 恢復-SqlDatabase

  • April 11, 2017

我們有一個多節點 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

引用自:https://dba.stackexchange.com/questions/170643