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値を使用して、今後の診断のために、この接続の試行をトレース・ファイルで追跡します。