Oracleエラー対応(ORA-00609):ORA-00609発生時の調査対応について

現役DBAが解説 ~Oracleエラー対応~

ORA-00609エラーコードは、データベースへの接続に関するエラーとなります。

今回は、ORA-00609の概要とエラー発生時の解決策に関するポイントを解説します。

1. エラーメッセージ

TNS-12547: TNS: Lost contact
ORA-609 Opiodr Aborting Process Unknown Ospid <nnnn>

TNS-12537: TNS: Connection closed
ORA-609 Opiodr Aborting Process Unknown Ospid

ORA-609は、TNS-12537、TNS-12637、またはTNS-12547のいずれかを伴随して発生し、次のタイムアウトメッセージも含まれる場合があります。

Fatal NI connect error 12170.
TNS-12535: TNS:operation timed out
ns secondary err code: 12560
nt main err code: 505

2. 原因

ORA-609エラーは、接続/認証プロセスが完了する前に、クライアント接続が失敗したか、接続プロセスを中止した場合に出力されます。

多くの場合、インバウンド接続タイムアウト(SQLNET.INBOUND_CONNECT_TIMEOUT)の設定によるタイムアウトが原因です。

SQLNET.INBOUND_CONNECT_TIMEOUTは、クライアントがデータベース・サーバーに接続して必要な認証情報を提供する時間を秒単位で指定します。
SQLNET.INBOUND_CONNECT_TIMEOUTのデフォルト値は、10.2.0より前は無制限でしたが、10.2.0以降は60秒に設定されています。

特定の環境において、クライアントが指定の時間内に接続を完了できない場合には、設定値の変更を検討します。

3. 解決策

SQLNET.INBOUND_CONNECT_TIMEOUTは、sqlnet.oraファイルに設定されています。
上記のパラメータファイルのデフォルトの格納場所は、$RDBMS_HOME/network/admin にあります。

断続的なORA-609が発生している場合には、sqlnet.oraファイルのSQLNET.INBOUND_CONNECT_TIMEOUTを増やすことで解消できます。

●設定例(インバウンド接続タイムアウトを120秒に設定する場合)
SQLNET.INBOUND_CONNECT_TIMEOUT = 120

変更を行った後、データベースまたはリスナーを再起動する必要はありません。

なお、タイムアウト値となるため、負荷やセキュリティの観点からむやみに大きな値にしないように注意が必要です。
少しずつ値を増やしていき適正値をチューニングしていくことをお勧めします。

4. 最後に

今回は、ORA-00609の解決策として、SQLNET.INBOUND_CONNECT_TIMEOUTの見直しをご紹介しました。

Oracle Databaseでは、SQLNET.INBOUND_CONNECT_TIMEOUT以外にも、listener.oraのINBOUND_CONNECT_TIMEOUT_listener_nameなどのタイムアウト設定ができます。
タイムアウトに関するエラーが発生した際は、どこのタイムアウトの設定に該当したのかを調査し、設定値の変更を検討しましょう。