多くのリモートマシン(それぞれローカルの.BAK
ファイルを持っている)でバックアップを復元しようとしています。これは、PSワークフロー内から行われています:BAKファイルの復元がデッドロックしていますか?
foreach -parallel ($server in $targetServers)
{
InlineScript
{
$serverName = $using:server.serverName;
$serverDrive = $using:server.drive;
$bakFileName = $using:testBakFileName;
$targetFileFullPath = "\\$servername\$serverDrive\$bakFileName";
$sqlScript =
"ALTER DATABASE $using:TargetDbName SET Single_User WITH Rollback Immediate
GO
RESTORE DATABASE $using:TargetDbName FROM DISK = N'$targetFileFullPath' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10
ALTER DATABASE $using:TargetDbName SET MULTI_USER"
Write-Output " Restoring $using:TargetDbName from $targetFileFullPath on $serverName with $sqlScript"
Invoke-Sqlcmd -Query "$sqlScript" -Verbose -queryTimeout 65534
}
}
これは私が一度に一つをすれば動作するようだが、私は並列で複数を実行する場合、私はデッドロックエラーを取得:
Invoke-Sqlcmd : Exclusive access could not be obtained because the database is in use.
RESTORE DATABASE is terminating abnormally.
Transaction (Process ID 54) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
ALTER DATABASE statement failed.
私は間違って何をしていますか?単独のSQLエラーに基づいて、DATABASEコマンドを復元すること
私はそれが実際に私のホストマシンのデータベースサーバーに復元されていることを知りましたが、復旧はリモートでは起こっていませんマシン。どのようにそれが起こるようにするか? – RobVious
あなたはあなたの呼び出し-sqlcmdの文の最後にフラグを追加する必要がある場合があります-ServerInstance「SERVERNAME」OR --ServerInstance「サーバー名\のINSTANCENAME」 – Gary
命の恩人。ゲイリーに感謝します。 – RobVious