8

Odbc 接続文字列を使用して DB2 データベースを呼び出しているときに、定期的にこのエラー メッセージが表示されます。DbCommand オブジェクトの CommandTimeout を複数の値に設定しようとしましたが、それでも次のエラーが発生します。

SQL0666 - SQL クエリが、指定された時間制限またはストレージ制限を超えています。

これを取得してエラーを停止するためのトリックはありますか。同じクエリが機能する場合とタイムアウトする場合があるため、非常に奇妙です。どんな助けでも大歓迎です。ありがとう!

4

3 に答える 3

15

DbCommand オブジェクトの CommandTimeout を複数の値に設定しようとしました

DbCommand.CommandTimeout= 0 を設定すると、タイムアウト エラーが修正されました

于 2011-03-03T09:34:12.543 に答える
7

Kite の答えは正しいですが、SQL Server Integrated Services (SSIS) プロジェクト内からこの同じエラー メッセージの修正を探しているときに、この質問と回答を見つけた後の観察/経験を共有したいと思いました。

今日、私の SSIS パッケージの 1 つが、そのステップの 1 つでこのエラーを受け取り始めました。少し調査した結果、DataReader SourceODBC を介して iSeries データベースに接続するオブジェクトでパッケージが失敗していることがわかりました。これが ODBC エラーなのか、iSeries/ODBC DB ドライバー内のエラーなのかはわかりませんが、エラー メッセージはまったく同じでした。

私にとって本当に奇妙なことは、同じ ODBC 接続を介して接続する MS Access のリンクされたテーブルからデータを参照でき、MAKE TABLEAccess 内の同じデータセットから問題なく操作を実行できることでした。エラー メッセージを検索したところ、この Q & A を見つけました。このヒントは、SSIS パッケージにも当てはまります。

SSIS 内でこれを修正するには、Microsoft BIDS デザイナーでパッケージを開く必要があります。次に、関連付けられているオブジェクトを開き、タイムアウトが発生しているオブジェクトをData Flow Task選択します。DataReader Source

オブジェクトDataReader Sourceには という名前のプロパティがありますCommandTimeout0(デフォルトではなく)に設定すると30、問題が解決するはずです。タイムアウトが問題であることを確認した後、タイムアウトを に設定し60てステップを再実行しました。1 分間のタイムアウトで問題が解決しました。

すべてのオブジェクトCommandTimeoutの値を に更新したくなるかもしれないことに注意してください。これはお勧めできません。代わりに、タイムアウトを維持し、制限をかなり寛大な値に増やします。私が行ったように、それらを 2 倍にするか、さらに寛大な 5 ~ 10 分のタイムアウト値を指定します。 DataReader Source0

タイムアウト プロパティが存在するのには理由があります。アプリケーションに十分なタイムアウトを与えることはできますが、アプリケーションがまったくタイムアウトしない場合、データベース エンジン内に問題が発生し、ステップの実行が完了しない可能性があり、アプリケーションが停止する可能性があります。これはありそうもないかもしれませんが、不可能ではありません。

安全を確保し、タイムアウトを適切に調整してください。

于 2012-06-04T13:46:17.777 に答える