前提・実現したいこと
SQL文の書かれたファイルを読み込み、それをSQLServerに発行する処理をPowerShellで作っています。
その際に発行するSQLは非常に重い処理で、手動実行すると、完了するまでに15分ほど掛かります。
その所為か、シェルから取り込んで実施すると、下記のようなエラーメッセージが出ます。
タイムアウトを回避して、SQLの処理が完了するまで待つようにしたいのですが、どのようにしたら出来ますでしょうか?
ご教示頂けたらと思います。
発生している問題・エラーメッセージ
"0" 個の引数を指定して"ExecuteNonQuery" を呼び出し中に例外が発生しました: "実行タイムアウトの期限が切れました。操作完了前にタイムアウト時間が過ぎたか、サーバーが応答していません。" 発生場所 c\:xxxxxxxx xxx.ps1:xx 文字:x + [object]$SqlCommand.ExecuteNonQuery() + +CategoryInfo : NotSpecified: (:) []. MethodInvocationException +FullQualifiedErrorId : SqlException
該当のソースコード
WindowsPowerShell
1 $sql_file_name = (Convert-Path .) + "\aaa.sql" 2 3 # 接続文字列の作成 4 [object]$ConnectionString = New-Object -TypeName System.Data.SqlClient.SqlConnectionStringBuilder 5 [object]$ConnectionString['Data Source'] = "localhost" 6 [object]$ConnectionString['Initial Catalog'] = "db_name" 7 [object]$ConnectionString['Integrated Security'] = "TRUE" 8 9 # SQLファイルから内容を取り込む 10 [string]$SQLQuery = (Get-Content $sql_file_name) 11 12 # SQLConnectionとSQLCommandを設定する 13 [object]$SqlConnection = New-Object System.Data.SQLClient.SQLConnection($ConnectionString) 14 [object]$SqlCommand = New-Object System.Data.SQLClient.SQLCommand($SQLQuery, $SqlConnection) 15 16 # データベース接続 17 [object]$SqlConnection.Open() 18 19 # SQL文の実行 20 [object]$SqlCommand.ExecuteNonQuery() 21 22 # データベース接続解除 23 [object]$SqlConnection.Close()
試したこと
下記を実施しましたが、どれもタイムアウトするまでの時間に変化がありませんでした。
-
$ConnectionString.CommandTimeOut = 6000000という一文を追加して実行
-
$SqlConnection.ConnectionTimeout = 6000000という一文を追加して実行
-
SSMSにてテーブルデザイナーの更新のための接続文字列のタイムアウト値をオーバーライドするチェックボックスを外した状態で実施
処理の軽いSQLに差し替えて実施すると、問題なく動作します。
補足情報(FW/ツールのバージョンなど)
- PowerShell Version 5.1.14393.2828
- SQLServer Version SQLServer 2017 Evaluation Edition
回答2件
あなたの回答
tips
プレビュー