株式会社コーソル

KNOWLEDGE

コーソルの技術情報

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

KNOWLEDGE検索人気のキーワード

Oracle DB Tips

ORA-03136: インバウンド接続がタイムアウトになりました。

01.ORA-03136エラーとはどのようなエラーか?

専用サーバー接続構成で新規接続を試みた状況で、SQLNET.INBOUND_CONNECT_TIMEOUTの時間内にユーザー認証が完了せず、サーバープロセスにより新規接続がタイムアウトされた場合にORA-03136エラーが発生します。

ORA-03136エラーのエラー出力例(Oracle Database 10.2以前)

アラートログに、以下のようなエラーが出力されます。

Fri Mar 03 03:03:03 2012
WARNING: inbound connection timed out (ORA-3136)
ORA-03136エラーのエラー出力例(Oracle Database 11.1 以降)

アラートログに、以下のようなエラーが出力されます。Oracle Database 11.1 以降では、Oracle Database 10.2以前ではsqlnet.logに出力されていた情報も、アラートログに出力されます。

Fri Mar 16 17:09:59 2012
***********************************************************************
Fatal NI connect error 12170.
VERSION INFORMATION:
TNS for Linux: Version 11.2.0.1.0 - Production
Oracle Bequeath NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production
TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production
Time: 16-3月 -2012 17:09:59
Tracing not turned on.
Tns error struct:
ns main err code: 12535
TNS-12535: TNS: 操作はタイム・アウトしました。
ns secondary err code: 12606
nt main err code: 0
nt secondary err code: 0
nt OS err code: 0
Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.15.40)(PORT=11162))
WARNING: inbound connection timed out (ORA-3136)

02.ORA-03136の一般的な発生要因と対処

ORA-03136は一般に以下の要因で発生します。

  • 悪意のあるクライアントからデータベースへの接続要求を受け取た場合
  • 認証処理の過程で主にクライアント側の処理に時間がかかった場合
  • データベース・サーバーの負荷が高い場合
  • クライアントとデータベース・サーバー間のネットワーク通信上の問題があった場合
  • パスワードの入力ミス等で認証処理が失敗した状態で、セッションが切断されない状態が続いた場合

 

悪意のあるクライアントからデータベースへの接続要求を受け取た場合

アラートログファイル、サーバーの sqlnet.log ファイル又はディスパッチャのトレースファイルを使用してどのクライアント・アドレスから接続が実施されたか確認できます。

認証処理の過程で主にクライアント側の処理に時間がかかった場合

クライアントの負荷状況を確認し、クライアントの負荷を低減させることを検討します。また、SQLNET.INBOUND_CONNECT_TIMEOUT をデフォルトの60秒より大きな値を設定します。

データベース・サーバーの負荷が高い場合

サーバーの負荷状況を確認し、サーバーの負荷を低減させることを検討します。また、SQLNET.INBOUND_CONNECT_TIMEOUT をデフォルトの60秒より大きな値を設定します。

クライアントとデータベース・サーバー間のネットワーク通信上の問題があった場合

クライアントとデータベース・サーバー間のネットワーク通信上の問題を解決します。

パスワードの入力ミス等で認証処理が失敗した状態で、セッションが切断されない状態が続いた場合

正しいパスワードの入力を行なうか、セッションを切断します。

03.ORA-03136に関するFAQ

SQLNET.INBOUND_CONNET_TIMEOUT の設定値はどのようにすればいいですか?

Oracle Database 10.1 までは SQLNET.INBOUND_CONNECT_TIMEOUT のデフォルト値は 0 (無限)でしたが、Oracle Database 10.2 より 60 (単位 秒)に変更されました。
クライアントからの接続において認証処理がこの値以内に完了しない場合、その接続は終了します。
ORA-03136の発生を抑止するためにSQLNET.INBOUND_CONNECT_TIMEOUTを変更する場合は、設定値を0 (無限)に設定する、あるいは例えば 120 等、現在より大きい値に設定する方法が考えられます。
しかし、認証処理に60秒以上の時間を要する状況は正常な状態とは考えにくいため、Oracle Databaseサポート窓口への問合せも検討してください。

共有サーバ接続でインバウンド接続がタイムアウトした場合はどのようになりますか?

共有サーバー接続の場合にSQLNET.INBOUND_CONNECT_TIMEOUT によるタイムアウトが発生した場合は、ディスパッチャのトレースにTNS-12535 TNS-12606 が出力されます。

どのクライアントからの接続で発生したかを確認するにはどうしたらいいですか?

専用サーバ接続の場合、アラートログまたはサーバ側のSQLNET.LOGを確認し、エラーの発生したクライアントのアドレスを確認します。

Fri Mar 16 17:09:59 2012
***********************************************************************
Fatal NI connect error 12170.
VERSION INFORMATION:
TNS for Linux: Version 11.2.0.1.0 - Production
Oracle Bequeath NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production
TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production
Time: 16-3月 -2012 17:09:59
Tracing not turned on.
Tns error struct:
ns main err code: 12535
TNS-12535: TNS: 操作はタイム・アウトしました。
ns secondary err code: 12606
nt main err code: 0
nt secondary err code: 0
nt OS err code: 0
Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.15.40)(PORT=11162))←★
WARNING: inbound connection timed out (ORA-3136)

共有サーバ接続の場合、ディスパッチャプロセスのトレースファイルを確認し、エラーの発生したクライアントのアドレスを確認します。

*** 2012-03-03 03:03:03.000
NS Primary Error: TNS-12535: TNS: 操作はタイム・アウトしました。
NS Secondary Error: TNS-12606: TNS: アプリケーション・タイムアウトが発生しました。
kmduicxd: 0C760020, kmduiflg: 9, circuit: 2C9A7CFC
(circuit) dispatcher process id = (2F07E394, 1), holder = 2C9A7304
parent holder = (2C9A7304)
serial # = 2
connection context = 0C760020
user session = (00000000), flag = (10130), queue = (4)
buffers - status = (0, 0)
Client Address = (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.15.40)(PORT=11162))←★

04.キーワード

ORA-3136 ORA-03136 ORA-3135 ORA-03135 ORA-3113 ORA-3106 TNS-12535 インバウンド タイムアウト inbound connection timed out INBOUND_CONNECT_TIMEOUT