none
SQLServer2008r2expressに最初だけ失敗する。 RRS feed

  • 質問

  • SQLServer2008r2expressをServerにし、12台のPCをodbc接続で接続をしているのですが、
    接続時に最初だけ失敗するため、困っています。
    一度失敗したあと、すぐに接続処理すると正常に動き、その後しばらくの間は通常に動きます。

    環境は13台のPCがあり、win7の32bitVrがインストールしています。
    最近のPCですので、スペック的には十分と思われます。
    1台がServerになり、12台がクライアントです。
    クライアントには、SQLServer native client 10.0をインストールし、
    VC++2005で作成したプログラムからデータベースにアクセスします。
    ファイヤーウォールは切ってあります。

    解決方法を探しております。よろしくお願いいたします。


    2014年9月25日 7:20

すべての返信

  • 結果的に接続できていますので、設定等ではないように思われます。ハブなどのネットワークの機器は安定していますでしょうか?

    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2014年9月25日 7:56
  • 安定していると思います。
    ファイル転送等の不具合は起きていません。

    2014年9月25日 8:57
  • 「自動終了」オプションを無効に設定して状況に変化が無いか確認してください。
    http://technet.microsoft.com/ja-jp/library/ms188124(v=sql.105).aspx

    MCITP(Database Developer/Database Administrator)

    2014年9月25日 17:37
  • 最初だけ失敗するというのは、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-are

    SQL 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/

    2014年9月26日 2:06
  • 「自動終了」オプションを無効に設定して状況に変化が無いか確認してください。
    http://technet.microsoft.com/ja-jp/library/ms188124(v=sql.105).aspx

    MCITP(Database Developer/Database Administrator)

    自動終了オプションは最初から無効になっていました
    有効にしても、同じ現象が出ます。

    2014年9月29日 6:59
  • 現象としては、まさにこんな感じです。
    参考サイトを見ましたが、英語のページでよく分かりません。
    もう少し見てみます。


    2014年9月29日 7:00
  • 捕捉します。

    最初の、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/

    2014年9月29日 7:38
  • クライアントPCにSQL Server  構成マネージャをインストールし、TCP/IPのみを有効にしましたが、同現象が発生しました。

    また、2番目の静的ポートの設定は、すでに行っており、これも、変化は無いです。

    2014年9月30日 1:52
  • う~ん、何でしょうね?
    ちなみにそのログインユーザーのユーザーマッピングは適切に指定されていますでしょうか?
    マッピングが指定されていなくても接続できますが、指定されていないと探すのに時間がかかってタイムアウトしているのかもしれません。
    ユーザーマッピングを行うには、SQL Server Management Studioにて、ログインユーザーを右クリックして「ログインのプロパティ」を表示し、ユーザーマッピングで当該のデータベースのマップにチェックを入れ、ユーザーにそのログインユーザー、既定のスキーマにそのデータベースのスキーマを入力します。

    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2014年9月30日 6:15
  • インターネットに繋いでない、小規模なシステムなので、saで運営しています。

    もしかして、問題ありですか・・・。

    2014年9月30日 8:42
  • いえ、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/

    2014年9月30日 8:58
  • 以下 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).aspx


    MCITP(Database Developer/Database Administrator)

    2014年9月30日 15:27
  • SQLServer native client の11をインストールして、設定をやり直しましたが、やはり同現象が出ます。
    2014年10月1日 7:26
  • 上でsaは関係ないと書きましたが、通常は関係ないはずですが、何らかの影響があるのかもしれません。クライアントのコマンドプロンプトからsqlcmdでログインした際にどのようになるのか調べてみて下さい。sqlcmdでもタイムアウトするということになれば、.NET Frameworkは少なくとも無関係になります。また、naginoさんの確認もこれからであれば、それもお願いします。とにかく、絞って行くしかないと思います。

    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2014年10月1日 7:47
  • 大分時間が経ってしまいましたが、プログラム側で、リトライをする方法にし、一応システムを稼動させました。

    sqlcmdのログインでもやはり1回めはタイムアウトし、2回めが通る現象が出ます。
    ユーザーも追加しましたが、やはり同じでした。

    逃げ対策になるかと思うのですが、IPCでの接続から、名前付きパイプの接続にし、改善されたように思います。

    2014年11月5日 3:19
  • Windows 7 との事で、SNPの無効化はお済でしょうか?
    一見ネットワークと関係が薄いようなトラブルでも、SNPの無効化で解消することが有ります。
    日経BP社のサイトへのリンクです。

    [Windows 7編]ネットワーク設定を標準で使ってはいけない

    2014年11月5日 3:52
  • 親機をIP固定にし、子機はIPアドレスで接続するようにしてみてください。

    その際、CLICONFGで別名を設定しての接続も確認して頂いた方が良いかもしれません。

    クライアントOSではファイル共有の数に上限があるのか一定数以上のリクエストが来ると不安定になる事があるようです。

    あとクライアントOSにSQLサーバーをインストールし他のPCにサービスを提供するのは使用許諾違反の筈ですが改善されたのでしょうか?

    2014年11月10日 7:38