IBM Support

[Db2] リモート・データベースへの接続が SQL30081N ECONNREFUSED で失敗する場合の対処方法

Question & Answer


Question

リモートのデータベースに接続できず、 SQL30081N 通信エラーが発生します。データベースが存在するサーバー上でのローカル接続は問題ありません。 原因と対処方法を教えてください。

Cause

リモート接続で正しく TCP/IP による接続が行えない場合、以下の例のような通信エラーが発生することがあります。エラー・メッセージはアプリケーションが利用しているインターフェースやオペレーティング・システムによって異なります。
$ db2 connect to SAMPLE user db2admin using password
SQL30081N  通信エラーが検出されました。使用された通信プロトコル:"TCP/IP"。使用し
ている通信 API: "SOCKETS"。エラーが検出されたロケーション:
"192.168.5.1"。エラーを検出した通信関数:"connect"。 プロトコル固有エラー・コード:
"79"、"*"、"*"。  SQLSTATE=08001
上は AIX 上の CLP の出力例で SQL30081N connect rc1=79 ですが、プラットフォームにより rc は異なります。 例えば ECONNREFUSED は AIX:79、Windows:10061、linux:111、Solaris:146、HP-UX:239 です。
一般的な通信エラーの一覧はDb2 マニュアルの TCP/IP エラーページで確認できます。

以下のような原因が考えられます。
  1. 接続先のサーバーで TCP/IP 接続の設定に誤りがある
  2. クライアントが利用している接続情報に誤りがある
  3. クライアントとサーバーの間のネットワークに問題がある

Answer

それぞれの原因について、以下の点をご確認ください。

コマンドは、UNIX/Linux ではインスタンス・オーナーでログインして実行してください。
Windows では Db2 コマンド・ウインドウから実行してください。また、grep は findstr へ置き換えて実行してください。
 
  1. サーバー上の TCP/IP 接続設定の確認
    以下の文書の 「A) TCP/IP 接続に関する設定」の手順に沿って、TCP/IP 接続設定が正しいかご確認ください。
    [Db2] インスタンス起動時に SQL5043N が発生する場合の対処方法
    この後、接続先のサーバー上で構成されたポートが正しく LISTEN されていることを確認します。
    $ netstat -an | grep 50000
    tcp4       0      0  *.50000        *.*       LISTEN
  2. クライアントの接続情報の確認
    クライアント・アプリケーションが正しい接続情報を利用しているか、以下のようにコマンド行プロセッサーでカタログ情報を表示し、データベースへの接続が可能かどうかをご確認ください。
    1. 接続するデータベースのカタログで、ノード名を確認してください。次にノードのカタログからそのノード名のカタログを確認し、ホスト名とポート番号が前述の A) と合致する正しい情報であるか確認します。
      $ db2 list db directory
      ...
      データベース 1 項目:
      
      データベース別名                    = SAMPLE
      データベース名                      = SAMPLE
      ノード名                            = DB2SRV
      データベース・リリース・レベル      = d.00
      コメント                            =
      ディレクトリー項目タイプ            = リモート
      
      
      $ db2 list node directory
      ...
      ノード 1 項目:
      
       ノード名                           = DB2SRV
       コメント                           =
       ディレクトリー項目タイプ           = LOCAL
       プロトコル                         = TCPIP
       ホスト名                           = db2srv.example.com
       サービス名                         = 50000
    2. カタログの情報が正しい場合、そのカタログの情報でコマンド行プロセッサーからリモートのデータベースへ接続ができるかご確認ください。
      $ db2 connect to SAMPLE user db2admin using password
      
         データベース接続情報
      
       データベース・サーバー             = DB2/AIX64 9.7.0
       SQL 許可 ID                        = DB2ADMIN
       ローカル・データベース別名         = SAMPLE
    上記の手順で正しく接続ができる場合、アプリケーションで利用している接続情報に誤りがある可能性があります。
    接続先のサーバーの指定方法は、アプリケーションが利用している API によって異なりますので、マニュアルをご参照ください。
    サポートされているデータベース・アプリケーション・プログラミング・インターフェース
     
  3. クライアントとサーバー間のネットワークの確認
    サーバー上で LISTEN しているポートに対して正しいカタログでも接続できない場合、ファイアーウォール等の影響でポートが開放されていない可能性があります。
    以下のようにポートに対して接続が確立できるかご確認ください。
    1. telnet コマンドを実行し、サーバーで LISTEN しているポートに接続してください。
      コマンドが「接続に失敗しました」等のエラーになる場合、ポートが正しく開放されていない可能性がありますので、ネットワーク設定を確認してください。
      クライント側だけではなくサーバー側からも実行することで、ネットワークの問題であるか切り分けが可能です。
      $ telnet [サーバー名] [ポート番号]
    2. 別のコンソールから netstat コマンドを実行し、サーバーで LISTEN しているポートへの接続が ESTABLISHED の状態で存在していることを確認してください。
      $ netstat -an | grep 50000
      tcp   0  0 192.168.2.100:45947   192.168.5.1:50000    ESTABLISHED

関連情報
パスポート・アドバンテージによく寄せられる質問
SQL30081N TCP/IP 通信エラー

お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート

[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008Pl7AAE","label":"Connectivity-\u003ETCP\/IP"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]

Document Information

Modified date:
23 August 2023

UID

swg21660788