株式会社コーソル

KNOWLEDGE

コーソルの技術情報

コーソルでは経験豊かなエンジニアが、Oracle Databaseに関するお役立ち情報を発信しています。
データベースのチューニングや設定にお役立ていただけます。

KNOWLEDGE検索人気のキーワード

Oracle DB Tips

ORA-12170: TNS: 接続タイムアウトが発生しました。(TNS-12170)

01.ORA-12170(TNS-12170)エラーとはどのようなエラーか?

クライアントからデータベース・サーバーに対する新規接続処理が、タイムアウト時間内に完了しなかった場合に発生するエラーです。
同様の状況でTNS-12170が発生する場合がありますが、これらのエラーは同じ意味となります。

02.ORA-12170エラーのエラー出力例

SQL> connect scott/tiger@ora11202
ERROR:
ORA-12170: TNS: 接続タイムアウトが発生しました。

03.ORA-12170の一般的な発生要因と対処

ORA-12170が発生する背景には、以下の2つが考えられます。

  • ネットワークの構成、Oracle Netの構成に誤りがある
  • Oracle Netの新規接続処理に時間を要している

 

ネットワークの構成、Oracle Netの構成に誤りがある

ネットワークの構成、Oracle Netの構成に誤りがある場合、誤ったIPアドレスに対して接続を試みて、OSのTCP新規接続タイムアウト時間を超過したエラーで失敗した結果、ORA-12170の発生に至る場合があります。
原因は構成の誤りであるため、新規接続処理が毎回失敗します。この場合は構成の誤りを修正して対処します。

Oracle Netの新規接続処理に時間を要している場合

負荷の増加など主に偶発的な要因によって、新規接続処理に時間を要し、Oracle Netのタイムアウト設定に抵触してORA-12170の発生に至る場合があります。
新規接続処理は、リスナーの接続中継を経て、クライアントとサーバのネゴシエーションによって実現されます。また、ネゴシエーションはネットワークを介して実行されるため、クライアント、リスナー、サーバ、ネットワークの負荷を総合的な観点で調査して、問題を特定する必要があります。あわせて、アラートログ、リスナーログなどのログファイルにエラーが出力されていないかを確認してください。
負荷要因を特定し、負荷を軽減する対処を講じることがもっとも効果的なアプローチですが、エラー発生の回避を優先したい場合、Oracle Netのタイムアウト値を増加することもご検討ください。

04.ORA-12170に関するFAQ

Oracle Netのタイムアウト設定には何がありますか?
sqlnet.ora SQLNET.INBOUND_CONNECT_TIMEOUT (Oracle9i Net Services 9.2.0.2以降)

サーバー側のsqlnet.oraに設定することで、指定した時間以上経過してもデータベースのユーザ認証を完了できなかった場合セッションを強制的に終了することができます。
その際に「ORA-12170: TNS: 接続タイムアウトが発生しました。」を sqlnet.log ファイルに出力します。

sqlnet.ora SQLNET.OUTBOUND_CONNECT_TIMEOUT (Oracle Net Services 10g Relsease2以降)

クライアント側のsqlnet.oraに設定することで、新規接続処理に要する時間が設定時間を越えると、クライアントがtnsnames.oraのADDRESS_LISTの次のサーバーへの接続を試行させることができます。
ADDRESS_LIST 内のすべてのエントリに対する試行が設定時間を越えた場合は、クライアントにORA-12170が返り、接続処理が終了します。

sqlnet.ora TCP.CONNECT_TIMEOUT (Oracle Net Services 11g以降)

クライアント側のsqlnet.oraに設定することで、接続時(TCPのconnect()時)のタイムアウトをOSのタイムアウトより短くなるよう変更することができます。
TCPでの接続時にのみ有効となりその他のプロトコルでは有効とはなりません。

05.キーワード

ORA-12170 TNS-12170 ORA-12535 TNS-12535 タイムアウト TIMEOUT