16.3.3 ORA-12170
Transmission Control Protocol (TCP)接続タイムアウト、アウトバウンド接続タイムアウト、受信タイムアウトなどのタイムアウトによって接続が失敗したことを示しています。
メッセージ
ORA-12170: Cannot connect.
string timeout of string for string.
(CONNECTION_ID=string)
たとえば:
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)攻撃を示している可能性があります。
処置
-
このエラーがアプリケーションで発生した場合は、次のタスクを実行します:
-
簡易接続または
tnsnames.ora
の接続文字列でCONNECT_TIMEOUT
またはTRANSPORT_CONNECT_TIMEOUT
パラメータを使用した場合は、これらのパラメータにさらに大きい値に設定します。または、クライアントのsqlnet.ora
ファイルで、次のパラメータのいずれかまたはすべてをさらに大きい値に設定します:-
SQLNET.OUTBOUND_CONNECT_TIMEOUT
-
SQLNET.RECV_TIMEOUT
-
TCP.CONNECT_TIMEOUT
接続文字列のパラメータは、それに対応する
sqlnet.ora
のパラメータよりも優先されます。 -
-
プログラムでドライバを設定できる言語で、指定したタイムアウト・パラメータ値と同等の設定になるように調整します。
たとえば:
JDBCでは
oracle.net.OUTBOUND_CONNECT_TIMEOUT
、oracle.net.CONNECT_TIMEOUT
を調整するか、setLoginTimeout()
を使用します。Python,
python-oracledb
では、connect()
またはcreate_pool()
をコールするときにtcp_connect_timeout
パラメータを調整します。
-
-
データベースのアラート・ログ・ファイルにエラーが存在する場合は、データベースの
sqlnet.ora
ファイルで、次のパラメータのいずれかまたは両方を大きい値に設定します。-
SQLNET.INBOUND_CONNECT_TIMEOUT
-
SQLNET.RECV_TIMEOUT
-
-
悪意のあるクライアントが疑われる場合は、データベースのアラート・ログを使用してソース・アドレスを特定し、アクセスを制限します。
-
CONNECTION_ID
値を使用して、今後の診断のために、この接続の試行をトレース・ファイルで追跡します。