16.3.3 ORA-12170

Transmission Control Protocol (TCP)接続タイムアウト、アウトバウンド接続タイムアウト、受信タイムアウトなどのタイムアウトによって接続が失敗したことを示しています。

メッセージ

ORA-12170: Cannot connect. 
string timeout of string for string.
(CONNECTION_ID=string)

たとえば:

TCPレベルの接続タイムアウト:
ORA-12170: Cannot connect. 
TCP connect timeout of 30s for host 10.9.7.5 port 1522. 
(CONNECTION_ID=1ABcDEabCd1aB+AbCdE1aB==)
アウトバウンド接続タイムアウト:
ORA-12170: Cannot connect. 
Outbound connect timeout of 30s for host 10.9.7.5 port 1522. 
(CONNECTION_ID=1ABcDEabCd1aB+AbCdE1aB==)
受信タイムアウト:
ORA-12170: Cannot connect. 
Receive timeout of 30s for host 10.9.7.5 port 1522. 
(CONNECTION_ID=1ABcDEabCd1aB+AbCdE1aB==)

原因

割り当てられた時間間隔内に接続リクエストを完了できません。これは、ネットワークまたはシステムの遅延の結果であるか、データベース・サーバーでのサービス拒否(DoS)攻撃を示している可能性があります。

処置

  • このエラーがアプリケーションで発生した場合は、次のタスクを実行します:
    1. 簡易接続またはtnsnames.oraの接続文字列でCONNECT_TIMEOUTまたはTRANSPORT_CONNECT_TIMEOUTパラメータを使用した場合は、これらのパラメータにさらに大きい値に設定します。

      または、クライアントのsqlnet.oraファイルで、次のパラメータのいずれかまたはすべてをさらに大きい値に設定します:
      • SQLNET.OUTBOUND_CONNECT_TIMEOUT

      • SQLNET.RECV_TIMEOUT

      • TCP.CONNECT_TIMEOUT

      接続文字列のパラメータは、それに対応するsqlnet.oraのパラメータよりも優先されます。

    2. プログラムでドライバを設定できる言語で、指定したタイムアウト・パラメータ値と同等の設定になるように調整します。

      たとえば:

      JDBCでは oracle.net.OUTBOUND_CONNECT_TIMEOUToracle.net.CONNECT_TIMEOUTを調整するか、setLoginTimeout()を使用します。

      Python, python-oracledbでは、 connect()またはcreate_pool()をコールするときにtcp_connect_timeoutパラメータを調整します。

  • データベースのアラート・ログ・ファイルにエラーが存在する場合は、データベースのsqlnet.oraファイルで、次のパラメータのいずれかまたは両方を大きい値に設定します。
    • SQLNET.INBOUND_CONNECT_TIMEOUT

    • SQLNET.RECV_TIMEOUT

  • 悪意のあるクライアントが疑われる場合は、データベースのアラート・ログを使用してソース・アドレスを特定し、アクセスを制限します。

  • CONNECTION_ID値を使用して、今後の診断のために、この接続の試行をトレース・ファイルで追跡します。