2

いくつかのことを行うかなり複雑な SQL スクリプトがあります。

  • 既存のデータベースを削除します
  • バックアップからデータベースをリロードします
  • アクセス許可を設定する
  • その他のいくつかのその他の db 固有のタスク

移動性と使いやすさのために、これを .sql ファイルとして保存しましたが、これを Powershell スクリプトに組み込んで、実行をさらに簡単にしたいと思います (そして、実行する必要がある他のいくつかのタスクをカプセル化します)。同じプロセス)。スクリプト用に Powershell にあるコードは次のとおりです。

add-pssnapin sqlservercmdletsnapin100
invoke-sqlcmd -inputfile "D:\Scripts\loaddatabase31_Loadtest.sql" -serverinstance "PerfSQL02" -hostname "PerfSQL02"

serverinstance、inputfile、および hostname が存在し、正しく配置されていると想定します。

復元するデータベースは数百ギガバイトなので、実際の削除と復元のプロセスには約 20 分かかります。現在、そのスクリプトを実行しようとすると、次のエラーが発生します (同じネットワーク内の別のドメインにあるワークステーションから実行されています)。

invoke-sqlcmd : Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
At line:2 char:1

-invoke-sqlcmd で -connectiontimeout スイッチを使用してみましたが、この問題を解決するのにうまくいかないようです (したがって、接続時にタイムアウトしない可能性があります)。私が見た Powershell 経由で SQL を実行する例のほとんどは、ファイルを使用せず、代わりにスクリプト内で SQL を定義します。実行する必要がある SQL が複雑であるため、これを実行しないことをお勧めします (また、データベースを削除して復元するため、システム DB のいずれかを使用しない限り、これらすべてを SP にまとめることはできません)。 .

そのタイムアウトの原因について考えている人はいますか? invoke-sqlcmd はファイルに対して正常に動作しませんか?

4

1 に答える 1