none
ACCESS2003のプログラムで、SQLState: '01000' :'08001'のエラー ログインの要求が、繰り返し表示されてしまう。 RRS feed

  • 質問

  • 3年以上問題なく動作していたのですが、Access VBAで記述しているプログラムの実行途中で、

    Microsoft SQL Server ログイン の見出し付きエラーウィンドウで以下のメッセージ
    接続できませんでした。:
    SQLState: '01000'
    SQL Server エラー: 233
    [Microsoft][ODBC SQL Server Driver][DBMSSOCN]ConnectionOpen(connect())
    SQLState:'08001'
    SQL Server エラー:17
    [Microsoft][ODBC SQL Server Driver][IDBNETLIB]SQL Server が存在しないか、アクセスが拒否されました。
    が表示され

    OKをクリックすると エラーメッセージのウィンドウが閉じ、
    SQL Server ログインの画面(サーバー名のリストボックス、セキュリティ接続のチェックボックス、マスクした状態でログインID、パスワードが出るダイアログ画面)が表示され、OKかキャンセルかヘルプを選択する状態になります。

    ここで、OKをクリックすると、ログインの画面引き続き処理が実行されます。

    しばらくしてまた同じエラーが表示され同様に、OKし、ログイン画面でもOKをクリックして、
    数回繰り返すうちに、処理が終了します。
    データ更新処理なのですが、処理結果としては正常です

    特定のパソコンで発生するのではなく、同プログラムを使用する10台のパソコンのどれでも発生しています。

    サーバーのOSはWindows 2003 Server SP1 
    SQL Server 2005(SQL Server 9.0.2047)

    クライアントはWindows XP  (SP2もSP3もだめ)
    Microsoft Office Access2003 で作成したmdbを各クライアントのハードディスクで開いて
    実行しています。

    SQL ServerのデータベースをODBCのファイルDSNを作成し
    テーブルをリンクして使用しています。

    SQL Server2005はサーバー認証はWindows認証
    利用者はdb ownerでデータベースにマッピングしてあります

    権限の変更、パスワードの変更などはおこなっていません。
    頻繁にエラーで止まってしまい、クリックしないといけないので、業務に支障がでています。
    何か少しでもわかりましたら教えてください。
    よろしくお願い申し上げます。
    2009年10月20日 13:55

回答

  • はっきりわかりませんが、現象としては以下に近いように思いました。

    SQL Server が存在しない
    http://www7.big.or.jp/~pinball/discus/sqls/30851.html


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年10月21日 2:02
  • クライアントの一部について
    http://support.microsoft.com/kb/328476/
    を参考に
    レジストリを

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
    値の名前: MaxUserPort
    データ型: REG_DWORD
    値を20000 
    ディフォルトは5000

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
    値の名前: TcpTimedWaitDelay
    データ型: REG_DWORD
    値を30 (30秒)
    ディフォルトは4分 

    に変更して、動作したらエラーなしで動くようになりました。
    ありがとうございました。
    2009年10月23日 9:35

すべての返信

  • はっきりわかりませんが、現象としては以下に近いように思いました。

    SQL Server が存在しない
    http://www7.big.or.jp/~pinball/discus/sqls/30851.html


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年10月21日 2:02
  • ありがとうございます。
    どうも状況が似通っています。
    クライアントで、netstat -n を実行してみると、SQL Serverのサーバーアドレスで、1433ポートでTIME_WAITが
    どんどん増加していって、他の接続もいれて3975行が最大で、しばらくすると 減って、また3975行で頭打ちになるのを
    繰り返しているので、
    MaxUserPortの制限にひっかかったのではないかと。
    http://support.microsoft.com/kb/328476/
    をみると ディフォルトは MaxUserPort4000個 TIME_WAIT4分間のようなのですが、
    3975行でとまっているのは接続ができなくて、待っている状態で、そのうちタイムアウトで、エラー表示になっているとすると
    これに該当するように思います。

    http://support.microsoft.com/kb/196271/ja
    には MaxUserPort のディフォルト値が5000 となっているので、これだと制限はこえていない?
    正確にはわからなにのですが、4分より少し早くTIME_WAITのものが消えているようにみえます。
    のではずしているかもしれません。

    関係ないかもしれないのですが、
    ODBCデータソースアドミニストレータの接続プールでODBCドライバのSQL Server のプールタイムアウトは60秒になっています。

    クライアントで、MaxUserPort と TCPTimedWaitDelay をまず調整して確認してみようと思います。
    結果は改めてご報告いたします。
    ありがとうございます

    2009年10月21日 10:04
  • クライアントの一部について
    http://support.microsoft.com/kb/328476/
    を参考に
    レジストリを

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
    値の名前: MaxUserPort
    データ型: REG_DWORD
    値を20000 
    ディフォルトは5000

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
    値の名前: TcpTimedWaitDelay
    データ型: REG_DWORD
    値を30 (30秒)
    ディフォルトは4分 

    に変更して、動作したらエラーなしで動くようになりました。
    ありがとうございました。
    2009年10月23日 9:35