質問者
SQLServer2008r2expressに最初だけ失敗する。

質問
-
SQLServer2008r2expressをServerにし、12台のPCをodbc接続で接続をしているのですが、
接続時に最初だけ失敗するため、困っています。
一度失敗したあと、すぐに接続処理すると正常に動き、その後しばらくの間は通常に動きます。環境は13台のPCがあり、win7の32bitVrがインストールしています。
最近のPCですので、スペック的には十分と思われます。
1台がServerになり、12台がクライアントです。
クライアントには、SQLServer native client 10.0をインストールし、
VC++2005で作成したプログラムからデータベースにアクセスします。
ファイヤーウォールは切ってあります。解決方法を探しております。よろしくお願いいたします。
- 編集済み marustudio 2014年9月25日 7:21
すべての返信
-
最初だけ失敗するというのは、SQL Serverが見つからない等のTime outでしょうか? この動作だと、再トライで接続され、しばらくはアプリケーションが動くけれども、少し間をあけると同じように失敗し、再トライでまた接続されるというような動作でしょうか? アプリケーションで接続を切っても、しばらくはデータベースへの接続が保持されていますから、このような動作になる可能性があります。
いずれにしても、以下が参考になりませんでしょうか?First call using SQLClient to SQL 2008 creates timeout. All subsequent calls are fine
http://stackoverflow.com/questions/3191057/first-call-using-sqlclient-to-sql-2008-creates-timeout-all-subsequent-calls-areSQL Server Timeout on first attempt
http://serverfault.com/questions/179898/sql-server-timeout-on-first-attempt★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
-
現象としては、まさにこんな感じです。
参考サイトを見ましたが、英語のページでよく分かりません。
もう少し見てみます。- 編集済み marustudio 2014年9月29日 7:19
-
捕捉します。
最初の、First call using SQLClient to SQL 2008 creates timeout. All subsequent calls are fine は、プロトコルの解決の問題が指摘されています。要するに、共有メモリ、TCP/IP、名前付きパイプの3つのプロトコルのうち、使用するプロトコルに辿り着くまでにタイムアウトしてしまうので、直接、使用するプロトコルを指定するようにしています。marustudioさんが使用されているプロトコルがわかりませんが、一度、「SQL Server 構成マネージャ」で確認してみて下さい。
2番目の「SQL Server Timeout on first attempt」では、IPALLの指定において、動的ポートから静的ポートに変更したら解決したとあります。ただ、名前付きインスタンスではデフォルトでは動的ポートなので、ちょっとこの件に関してはハテナなのですが、他の要因が絡んでいるのかもしれません。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
-
う~ん、何でしょうね?
ちなみにそのログインユーザーのユーザーマッピングは適切に指定されていますでしょうか?
マッピングが指定されていなくても接続できますが、指定されていないと探すのに時間がかかってタイムアウトしているのかもしれません。
ユーザーマッピングを行うには、SQL Server Management Studioにて、ログインユーザーを右クリックして「ログインのプロパティ」を表示し、ユーザーマッピングで当該のデータベースのマップにチェックを入れ、ユーザーにそのログインユーザー、既定のスキーマにそのデータベースのスキーマを入力します。★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
-
いえ、saは関係ないと思います。saなのでWindows認証じゃないですよね。Windows認証だとドメインコントローラーとの間で時間がかかるのが原因というブログを見つけました。
Connectivity troubleshooting in SQL Server 2008 with the Connectivity Ring Buffer
http://blogs.msdn.com/b/sql_protocols/archive/2008/05/20/connectivity-troubleshooting-in-sql-server-2008-with-the-connectivity-ring-buffer.aspxでも、違いますね。ちなみに、
>クライアントPCにSQL Server 構成マネージャをインストールし、TCP/IPのみを有効にしましたが、同現象が発生しました。
と書かれていますが、これはサーバー側で行う必要があります。クライアントPCにはSQL Serverがインストールされていないですよね?
コマンドプロンプトからsqlcmdでログインを試みた時に、もう少し詳細なエラーメッセージが出ると思うのですが、試されてみましたでしょうか?
また、以下によると、SQLServer native client 10.0はWindows 7でサポートされていませんので、これが原因かもしれません。SQL Server Native Client のサポート ポリシー
http://msdn.microsoft.com/ja-jp/library/cc280356.aspx★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
-
以下 2 点確認してみてください。
サーバー側の Windows Firewall を無効にして変化があるか確認してください。
ただし状況切り分けのためですので、確認が取れ次第元に戻してください。
もしこれで状況が変わるようなら、以下を参考に Firewall の設定を見直してください。
http://msdn.microsoft.com/ja-jp/library/cc646023(v=sql.105).aspxプロトコルを指定した接続文字列にすると状況が変わるか確認してください。
プロトコルを指定する方法は以下のページで "protocol" のキーワードで検索していただくと記載があります。
http://msdn.microsoft.com/ja-jp/library/ms130822(v=sql.105).aspxMCITP(Database Developer/Database Administrator)
-
上でsaは関係ないと書きましたが、通常は関係ないはずですが、何らかの影響があるのかもしれません。クライアントのコマンドプロンプトからsqlcmdでログインした際にどのようになるのか調べてみて下さい。sqlcmdでもタイムアウトするということになれば、.NET Frameworkは少なくとも無関係になります。また、naginoさんの確認もこれからであれば、それもお願いします。とにかく、絞って行くしかないと思います。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
-
Windows 7 との事で、SNPの無効化はお済でしょうか?
一見ネットワークと関係が薄いようなトラブルでも、SNPの無効化で解消することが有ります。
日経BP社のサイトへのリンクです。