私はいくつかの強力なシェル スクリプトを作成しており、主に Invoke-Sqlcmd をデータベースのクエリまたは入力 .sql ファイルの手段として使用していますが、アクセスの封じ込めとプロセスの強制終了に問題がありました。
プロセスを強制終了するために SMO を使用しています
$SQlSvr1 = New-Object Microsoft.SqlServer.Management.Smo.Server $serverInstance
$SQlSvr1.KillAllprocesses($databaseMain)
そして、Invoke-Sqlcmd を使用してプロセスを実行すると、次のようなエラーが発生し始めるまで、すべて正常に実行されていました。
A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)
プロセスを強制終了しなかった場合は、戻ります
データベースが使用中のため、排他アクセスを取得できませんでした。
だから私の質問は、安定した接続を再生成または維持するための最良のプロセスは何ですか?すべてをSMOまたはSQLConnectionに変更するか、Invoke-Sqlcmdを使用して単一の接続を作成する方法があるかどうかはわかりませんが、毎回強制終了/再キューイングします呼び出しを使用します。
問題のスクリプトは最初にデータベースをバックアップし、try/catch 内でパッチ スクリプトを使用して実行および更新します。