ホーム › フォーラム › A5:SQL Mk-2掲示板 › 実行されたステートメントに対するサーバーの応答が、正しい形式でなかっため・・
- このトピックには12件の返信、2人の参加者があり、最後ににより4年、 9ヶ月前に更新されました。
-
投稿者投稿
-
長谷川ゲスト
お世話になっております。
エラーが表示されるので、回避方法があれば教えて下さい。
■発生するエラー
プロシージャモードで、以下のエラーメッセージが表示されます。
「実行されたステートメントに対するサーバーの応答が、正しい形式でなかったため、接続が使用できなくなりました。」
や
「Broken packet, data length 5 exceeds fields length 4」
■使用環境
接続先: SQL Server 2008 R2
A5SQL: version 2.14.3
■補足
このエラーが発生するのは、少々複雑なSQLを実行したときだけで、それ以外では全く問題なく使用できております。
A5SQLのバージョンを2.13 や2.11 に変えてみましたが、状況は変わりませんでした。
また、「OLE DB Provider を使わずに直接接続する」オプションの有無でも状況は変わりませんでした。
検証として、同じSQLを「MS SQL Management Studio」で実行すると、意図する結果が返ってきました。ただ、気になったのは、結果が一度に返って来ずに、数回のまとまりに分割された上で返ってきているようです。松原正和キーマスター長谷川さんこんにちは。
このエラーは実行に時間がかかったときに発生するなどでしょうか?。ADOやODBCで登録したデータベースではいかがでしょうか?。
なにか、再現できるようなサンプルSQLをご提供いただけたりするとありがたいのですが…。
タイムアウトなどが発生している可能性もあるのかなと思うのですが、この場合、オプションダイアログから「SQL」タブで、タイムアウト秒数を変更するなどすると変わる可能性もあります。長谷川ゲストご連絡ありがとうございます。
> このエラーは実行に時間がかかったときに発生するなどでしょうか?
はい。実行に時間がかかった時に発生しています。> タイムアウトなどが発生している可能性もあるのかなと思うのですが、
> この場合、オプションダイアログから「SQL」タブで、
> タイムアウト秒数を変更するなどすると変わる可能性もあります。
こちらの設定は「30」秒でも「6000」秒でも症状は変わりませんでした。
「0」秒でも変わりませんでした。> ADOやODBCで登録したデータベースではいかがでしょうか?。
ODBC接続時には、
[Microsoft][ODBC SQL Server Driver]文字列データの右側が切り捨てられました。
とのメッセージが返ってきます。> 再現できるようなサンプルSQLをご提供いただけたりするとありがたいのですが…。
申し訳ないのですが、どういう条件で発生するかがわかっておりません。
感覚の話で申し訳ないのですが、
こちらで扱っている他のSQLより、かなり WITH句 のボリュームがありまして、
サーバー側での処理が重たいのだろうな、とは感じており、
それが原因なんだろうとは思います。
そのため、他のSQLとは、異なった結果の返り方がされているのかしら?という感じ方です。
あやふやな回答ですみませんです。松原正和キーマスター長谷川さんこんにちは。
もしかしたらですが、長いSQLを実行したときに途中のネットワーク機器で、タイムアウトで、セッションが切断されたりしている可能性はないでしょうか。長谷川ゲストご連絡ありがとうございます。
過去のログを拝見しまして、そのような点も疑ったのですが、実際、SQL Server Management Studio で全く同じSQLを実行しますと、所望の結果が返ってきますので、その点は当たらないのかな、と勝手に考えておりました。
この時に、SSMSで結果が返ってくる時間は、全体の結果が一覧として返ってくるまでに、5分とかでした。(画面上では、1分ごとに結果の一覧が更新されていって、5分で全体が返ってくる感じ。)
ところが、A5SQLで同じSQLを実行しますと、エラー自体は、毎回1分程度で返ってきますので、何かが違うのだろうな、と。
そういう点から、もしお分かりになるようなことがあれば、という思いでした。なお、昨日のことですが、SSMSの方で実行計画をみて、SQL自体に手を入れまして、実行を30秒程度まで短縮することができました。(素人なもので。)
そのため、これなら A5SQL で通るかもしれない、と思ったのですが、残念ながら症状は変わりませんでした。
(別件になってしまいますが、プロシージャモードでも実行計画が取れるとありがたいですね。)なにか、他に情報提供できることが出てまいりましたら、連絡をさせていただきます。
お忙しいところ御対応ありがとうございました。松原正和キーマスター長谷川さんこんにちは。
A5:SQL Mk-2には、無操作が続く場合に、ダミーのSQLをサーバーに投げてネットワーク中のルーター等でセッションが切れないようにする「Keep alive」の機能(デフォルトはOFF)がありますが、SQL実行が長くて無通信状態が続き、セッションが切れてしまう場合はこのオプションは効果がありません。もしかしたらこれが影響しているのかなと思いました。
SSMSではTCPレベルでのKeep aliveで、セッションが切れないようにきちんと制御されているのかなと。結局良く分からないかもしれません。
ところで、ODBCを使っての接続などはどうですか?。もしかしたらこちらなら行けるかも?とも思うのですが。長谷川ゲスト> ところで、ODBCを使っての接続などはどうですか?。もしかしたらこちらなら行けるかも?とも思うのですが。
改めてODBC接続での結果を確認してみましたが、前回の報告と変わらず、
[Microsoft][ODBC SQL Server Driver]文字列データの右側が切り捨てられました。
とのメッセージが返ってきます。松原正和キーマスター長谷川さんこんにちは。
少し調べてみたのですが、「Broken packet, data length 5 exceeds fields length 4」のエラーはDB接続ライブラリであるUniDACが出力しているメッセージでした。UniDACのソースコードは手元にあるのですが、難読化されているソースのため、追うことは難しそうでした。
あと気になるのは、クライアントPCにインストールされているNativeClientのバージョン(SQL Server 接続ライブラリ)のバージョンですが分かりますでしょうか?。
(A5:SQL Mk-2でDB接続のパラメータを設定する画面の下に、「接続モード:SQL Server Native Client 11 (OLE DB)」などと表示されます。)長谷川ゲストご連絡ありがとうございます。
クライアントPCにインストールされているNativeClientのバージョン(SQL Server 接続ライブラリ)のバージョンは、
「接続モード:SQL Server Native Client 10 (OLE DB)」
と表示されておりました。松原正和キーマスター長谷川さんこんにちは。
色々調べたのですが、よくわかりませんでした。
プロトコルレベルのエラーのようにも思えます。多分、サーバーとクライアントのバージョンもあっているのですよね?。
接続ライブラリであるUniDACのバージョンを上げればもしかしたら解決するかも?とも思うのですが、ちょっと今すぐは難しそうです。(Version 2.15.0の正式版までには1回バージョンアップしようと思っています。)長谷川ゲスト> サーバーとクライアントのバージョンもあっているのですよね?。
はい。それは確認しました。いろいろとお調べいただきありがとうございました。
接続ライブラリの方で出力されているメッセージであって、ご対応いただくのは難しいということが「分かった」だけでも助かります。
割り切って、その場合はSSMSを使うことにします。A5SQLは、今のままでも十分に有益なソフトです。
これからも利用させていただきます。
また、接続ライブラリのバージョンが上がった際には確認させていただきますね。
ご対応ありがとうございました。長谷川ゲスト(。。。。。なんか、スレが更新されてる?)
経過報告です。
beta版でUniDACのバージョンを上げていただいたようですので、確認してみましたが、変化はありませんでした。
A5SQL: version 2.14.3 でも、version 2.15.0 beta 33 でも同じ結果になりました。
エラーメッセージも変わりありませんし、実際にDBとの接続が切れてしまいます。
状況が変わりましたら、また確認させていただきます。松原正和キーマスター長谷川さんこんにちは。
報告ありがとうございます。自分のほうも特に進捗ありません。自身で再現できないため、どうにも調査できません。また何かありましたらお教えいただければと思います。
-
投稿者投稿