- TOP
- 技術情報
- Oracle DB Tips
- ORA-12170: TNS: 接続タイムアウトが発生しました。(TNS-12170)
KNOWLEDGE
コーソルの技術情報
KNOWLEDGE検索
コーソルでは経験豊かなエンジニアが、Oracle Databaseに関するお役立ち情報を発信しています。
データベースのチューニングや設定にお役立ていただけます。
コーソルの技術情報
KNOWLEDGE検索
コーソルでは経験豊かなエンジニアが、Oracle Databaseに関するお役立ち情報を発信しています。
データベースのチューニングや設定にお役立ていただけます。
Oracle DB Tips
クライアントからデータベース・サーバーに対する新規接続処理が、タイムアウト時間内に完了しなかった場合に発生するエラーです。
同様の状況でTNS-12170が発生する場合がありますが、これらのエラーは同じ意味となります。
SQL> connect scott/tiger@ora11202 ERROR: ORA-12170: TNS: 接続タイムアウトが発生しました。
ORA-12170が発生する背景には、以下の2つが考えられます。
ネットワークの構成、Oracle Netの構成に誤りがある場合、誤ったIPアドレスに対して接続を試みて、OSのTCP新規接続タイムアウト時間を超過したエラーで失敗した結果、ORA-12170の発生に至る場合があります。
原因は構成の誤りであるため、新規接続処理が毎回失敗します。この場合は構成の誤りを修正して対処します。
負荷の増加など主に偶発的な要因によって、新規接続処理に時間を要し、Oracle Netのタイムアウト設定に抵触してORA-12170の発生に至る場合があります。
新規接続処理は、リスナーの接続中継を経て、クライアントとサーバのネゴシエーションによって実現されます。また、ネゴシエーションはネットワークを介して実行されるため、クライアント、リスナー、サーバ、ネットワークの負荷を総合的な観点で調査して、問題を特定する必要があります。あわせて、アラートログ、リスナーログなどのログファイルにエラーが出力されていないかを確認してください。
負荷要因を特定し、負荷を軽減する対処を講じることがもっとも効果的なアプローチですが、エラー発生の回避を優先したい場合、Oracle Netのタイムアウト値を増加することもご検討ください。
サーバー側のsqlnet.oraに設定することで、指定した時間以上経過してもデータベースのユーザ認証を完了できなかった場合セッションを強制的に終了することができます。
その際に「ORA-12170: TNS: 接続タイムアウトが発生しました。」を sqlnet.log ファイルに出力します。
クライアント側のsqlnet.oraに設定することで、新規接続処理に要する時間が設定時間を越えると、クライアントがtnsnames.oraのADDRESS_LISTの次のサーバーへの接続を試行させることができます。
ADDRESS_LIST 内のすべてのエントリに対する試行が設定時間を越えた場合は、クライアントにORA-12170が返り、接続処理が終了します。
クライアント側のsqlnet.oraに設定することで、接続時(TCPのconnect()時)のタイムアウトをOSのタイムアウトより短くなるよう変更することができます。
TCPでの接続時にのみ有効となりその他のプロトコルでは有効とはなりません。
ORA-12170 TNS-12170 ORA-12535 TNS-12535 タイムアウト TIMEOUT