Question & Answer
Question
リモートのデータベースに接続できず、 SQL30081N 通信エラーが発生します。データベースが存在するサーバー上でのローカル接続は問題ありません。 原因と対処方法を教えてください。
Cause
リモート接続で正しく TCP/IP による接続が行えない場合、以下の例のような通信エラーが発生することがあります。エラー・メッセージはアプリケーションが利用しているインターフェースやオペレーティング・システムによって異なります。
上は AIX 上の CLP の出力例で SQL30081N connect rc1=79 ですが、プラットフォームにより rc は異なります。 例えば ECONNREFUSED は AIX:79、Windows:10061、linux:111、Solaris:146、HP-UX:239 です。
一般的な通信エラーの一覧はDb2 マニュアルの TCP/IP エラーページで確認できます。
以下のような原因が考えられます。
$ db2 connect to SAMPLE user db2admin using password
SQL30081N 通信エラーが検出されました。使用された通信プロトコル:"TCP/IP"。使用し
ている通信 API: "SOCKETS"。エラーが検出されたロケーション:
"192.168.5.1"。エラーを検出した通信関数:"connect"。 プロトコル固有エラー・コード:
"79"、"*"、"*"。 SQLSTATE=08001
一般的な通信エラーの一覧はDb2 マニュアルの TCP/IP エラーページで確認できます。
以下のような原因が考えられます。
- 接続先のサーバーで TCP/IP 接続の設定に誤りがある
- クライアントが利用している接続情報に誤りがある
- クライアントとサーバーの間のネットワークに問題がある
Answer
それぞれの原因について、以下の点をご確認ください。
コマンドは、UNIX/Linux ではインスタンス・オーナーでログインして実行してください。
Windows では Db2 コマンド・ウインドウから実行してください。また、grep は findstr へ置き換えて実行してください。
関連情報
パスポート・アドバンテージによく寄せられる質問
SQL30081N TCP/IP 通信エラー
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート
コマンドは、UNIX/Linux ではインスタンス・オーナーでログインして実行してください。
Windows では Db2 コマンド・ウインドウから実行してください。また、grep は findstr へ置き換えて実行してください。
- サーバー上の TCP/IP 接続設定の確認
以下の文書の 「A) TCP/IP 接続に関する設定」の手順に沿って、TCP/IP 接続設定が正しいかご確認ください。
[Db2] インスタンス起動時に SQL5043N が発生する場合の対処方法
この後、接続先のサーバー上で構成されたポートが正しく LISTEN されていることを確認します。$ netstat -an | grep 50000 tcp4 0 0 *.50000 *.* LISTEN
- クライアントの接続情報の確認
クライアント・アプリケーションが正しい接続情報を利用しているか、以下のようにコマンド行プロセッサーでカタログ情報を表示し、データベースへの接続が可能かどうかをご確認ください。- 接続するデータベースのカタログで、ノード名を確認してください。次にノードのカタログからそのノード名のカタログを確認し、ホスト名とポート番号が前述の A) と合致する正しい情報であるか確認します。
$ db2 list db directory ... データベース 1 項目: データベース別名 = SAMPLE データベース名 = SAMPLE ノード名 = DB2SRV データベース・リリース・レベル = d.00 コメント = ディレクトリー項目タイプ = リモート $ db2 list node directory ... ノード 1 項目: ノード名 = DB2SRV コメント = ディレクトリー項目タイプ = LOCAL プロトコル = TCPIP ホスト名 = db2srv.example.com サービス名 = 50000
- カタログの情報が正しい場合、そのカタログの情報でコマンド行プロセッサーからリモートのデータベースへ接続ができるかご確認ください。
$ db2 connect to SAMPLE user db2admin using password データベース接続情報 データベース・サーバー = DB2/AIX64 9.7.0 SQL 許可 ID = DB2ADMIN ローカル・データベース別名 = SAMPLE
接続先のサーバーの指定方法は、アプリケーションが利用している API によって異なりますので、マニュアルをご参照ください。
サポートされているデータベース・アプリケーション・プログラミング・インターフェース
- 接続するデータベースのカタログで、ノード名を確認してください。次にノードのカタログからそのノード名のカタログを確認し、ホスト名とポート番号が前述の A) と合致する正しい情報であるか確認します。
- クライアントとサーバー間のネットワークの確認
サーバー上で LISTEN しているポートに対して正しいカタログでも接続できない場合、ファイアーウォール等の影響でポートが開放されていない可能性があります。
以下のようにポートに対して接続が確立できるかご確認ください。- telnet コマンドを実行し、サーバーで LISTEN しているポートに接続してください。
コマンドが「接続に失敗しました」等のエラーになる場合、ポートが正しく開放されていない可能性がありますので、ネットワーク設定を確認してください。
クライント側だけではなくサーバー側からも実行することで、ネットワークの問題であるか切り分けが可能です。$ telnet [サーバー名] [ポート番号]
- 別のコンソールから netstat コマンドを実行し、サーバーで LISTEN しているポートへの接続が ESTABLISHED の状態で存在していることを確認してください。
$ netstat -an | grep 50000 tcp 0 0 192.168.2.100:45947 192.168.5.1:50000 ESTABLISHED
- telnet コマンドを実行し、サーバーで LISTEN しているポートに接続してください。
関連情報
パスポート・アドバンテージによく寄せられる質問
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"}]
Was this topic helpful?
Document Information
Modified date:
23 August 2023
UID
swg21660788