私はここでOracle Toadを使用してラップトップでデータベースに接続しようとしましたが、このエラーが発生し続けました。
ORA-12170:TNS:接続タイムアウトが発生しました
このエラーが引き続き発生する可能性のある理由は何ですか?
昨日同じデータベースにアクセスし、アクセスできました。
[コメントで回答を集める]
問題は、OracleサービスがIPアドレスで実行されており、ホストが別のIPアドレスで構成されていることです。
OracleサービスのIPアドレスを表示するには、lsnrctl status
コマンドを発行し、報告されたアドレス(この場合は127.0.0.1、localhost)を確認します。
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(Host=127.0.0.1)(PORT=1521)))
ホストIPアドレスを表示するには、ipconfig
(windowsの下)またはifconfig
(linuxの下)コマンドを発行します。
ただし、私のインストールでは、Oracleサービス機能しない localhostアドレスに設定する場合、実際のホストIPアドレスを設定する必要があります(たとえば192.168.10.X )。
将来この問題を回避するには、ホストのIPアドレスの割り当てにDHCPを使用せず、静的アドレスを使用してください。
これは、SIDの競合が原因です。たとえば、Oracle12cBase\app\product\12.1.0\dbhome_1\NETWORK\ADMIN\tnsnames.oraファイルでは、ORCLの接続の説明は次のとおりです。
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
そして、次のように、同じSIDで異なるIP、ユーザー名/パスワードを使用して接続文字列を使用して接続しようとしています。
sqlplus username/[email protected]:1521/orcl
これを解決するには、tnsnames.oraファイルに変更を加えます。
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = 192.168.130.52)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
接続の確立またはクライアントとの通信が、割り当てられた時間内に完了しなかったために問題が発生しました。これは、ネットワークまたはシステムの遅延の結果である可能性があります。
FIREWALLをチェックして、クライアントからサーバーへの接続を許可します。ドメインネットワークを許可するか、ルールを作成します。
プラグ可能なデータベースであるORCLPDBの「hr」ユーザーを接続しているときに、同じエラーが発生していました。
まず、Windowsコマンドプロンプトでlsnrctl status
コマンドを入力して、ホスト名とポート番号を取得します。私の場合、ポート番号が1521の127.0.0.1でした
次に、ホスト名とポート番号を指定して以下のコマンドを入力します。
sqlplus username/password@HostName:Port Number/PluggableDatabaseName.
例えば:
sqlplus hr/[email protected]:1521/ORCLPDB.
手順のトラブルシューティング(ドキュメントID 730066.1)
接続タイムアウトエラーORA-3135およびORA-3136データベースに接続しようとしても、次の期間内に許可された期間内に接続および認証フェーズが完了しない場合、接続タイムアウトエラーが発行される可能性があります。SQLNET.INBOUND_CONNECT_TIMEOUTおよび/またはINBOUND_CONNECT_TIMEOUT _サーバー側パラメーター。
Oracle 10.2以降、これらのパラメーターのデフォルトは60秒でしたが、以前のリリースでは0でしたが、タイムアウトはありません。
タイムアウトすると、クライアントプログラムはORA-3135(またはTNS-3135)エラーを受け取ります。
ORA-3135接続で接続が失われました
データベースは、そのalert.logにORA-3136エラーを記録します。
... 2008年5月10日(土)02:21:38 2008警告:インバウンド接続がタイムアウトしました(ORA-3136)...
データベースセッションが認証フェーズにある場合、一連のSQLステートメントが発行されます。認証は、これらすべてが解析、実行、完全に取得されるまで完了しません。このリストのSQLステートメントの一部(例: 10.2の場合:
select value$ from props$ where name = 'GLOBAL_DB_NAME'
select privilege#,level from sysauth$ connect by grantee#=prior privilege#
and privilege#>0 start with grantee#=:1 and privilege#>0
select SYS_CONTEXT('USERENV', 'SERVER_Host'), SYS_CONTEXT('USERENV', 'DB_UNIQUE_NAME'),
SYS_CONTEXT('USERENV', 'INSTANCE_NAME'), SYS_CONTEXT('USERENV', 'SERVICE_NAME'),
INSTANCE_NUMBER, STARTUP_TIME, SYS_CONTEXT('USERENV', 'DB_DOMAIN')
from v$instance where INSTANCE_NAME=SYS_CONTEXT('USERENV', 'INSTANCE_NAME')
select privilege# from sysauth$ where (grantee#=:1 or grantee#=1) and privilege#>0
ALTER SESSION SET NLS_LANGUAGE= 'AMERICAN' NLS_TERRITORY= 'AMERICA' NLS_CURRENCY= '$'
NLS_ISO_CURRENCY= 'AMERICA' NLS_NUMERIC_CHARACTERS= '.,' NLS_CALENDAR= 'GREGORIAN'
NLS_DATE_FORMAT= 'DD-MON-RR' NLS_DATE_LANGUAGE= 'AMERICAN' NLS_SORT= 'BINARY' TIME_ZONE= '+02:00'
NLS_COMP= 'BINARY' NLS_DUAL_CURRENCY= '$' NLS_TIME_FORMAT= 'HH.MI.SSXFF AM' NLS_TIMESTAMP_FORMAT=
'DD-MON-RR HH.MI.SSXFF AM' NLS_TIME_TZ_FORMAT= 'HH.MI.SSXFF AM TZR' NLS_TIMESTAMP_TZ_FORMAT=
'DD-MON-RR HH.MI.SSXFF AM TZR'
注:上記のSQLのリストは完全ではなく、認証SQLの順序を表していません。リリースごとに違いがある場合もあります。
上記のSQL文は、Oracleデータベース内のすべてのSQLで発生するように、解析、実行およびフェッチする必要があります。したがって、これらのフェーズ中に発生した問題は、ハングまたは深刻なパフォーマンスの低下として表示され、タイムアウトになる可能性があります。
このようなハングの症状は、認証セッションによって次の待機として認識されます。•カーソル:XでのピンSの待機•ラッチ:行キャッシュオブジェクト•行キャッシュロック他の種類の待機イベントが可能です。このリストは完全ではない場合があります。
ここでの問題は、データベース内の別のセッションによって保持されている共有リソースを取得するために認証セッションがブロックされることです。そのブロッカーセッション自体は、実行中のアクティビティ(または独自のハング)で占有されているため、認証セッションに必要な共有リソースをタイムリーに解放できません。これにより、最終的に認証セッションにタイムアウトが報告されます。
そのような状況では、何が起こっているのかを確認するために、認証セッションに必要な共有リソースを保持しているブロッカープロセスを見つける必要があります。
このような場合に使用される一般的な診断は次のとおりです。
$ sqlplus -prelim '/ as sysdba' oradebug setmypid oradebug unlimit oradebug dump systemstate 266 ...wait 90 seconds oradebug dump systemstate 266 ...wait 90 seconds oradebug dump systemstate 266 quit
認証がハングする可能性のある問題の例
未公開のバグ7039896の回避策パラメーター_enable_shared_pool_durations = false注7039896.8を参照
問題を回避する他のアプローチ
場合によっては、インスタンスが開始されて新たにロードされた直後に、共有プールにそのようなステートメントを固定することにより、認証SQLの問題を回避できる場合があります。次の記事を使用して、これについてアドバイスできます。DBMS_SHARED_POOL.KEEPを使用して共有プールにカーソルを固定する方法726780.1
ピン留めは、非アクティブおよびエージングのためにそれらがフラッシュアウトされるのを防ぎます。したがって、将来リロードする必要があるため、つまり再解析する必要があり、認証ハングの問題の影響を受けやすくなります。
open sqlnet.ora
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.INBOUND_CONNECT_TIMEOUT=360
SQLNET.RECV_TIMEOUT=10
SQLNET.SEND_TIMEOUT=10
http://docs.Oracle.com/cd/B19306_01/network.102/b14213/sqlnet.htm