web-dev-qa-db-ja.com

ORA-12170:TNS:接続タイムアウトが発生しました

私はここでOracle Toadを使用してラップトップでデータベースに接続しようとしましたが、このエラーが発生し続けました。

ORA-12170:TNS:接続タイムアウトが発生しました

このエラーが引き続き発生する可能性のある理由は何ですか?

昨日同じデータベースにアクセスし、アクセスできました。

16
Pseudonymous

[コメントで回答を集める]

問題は、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を使用せず、静的アドレスを使用してください。

11
Zac

これは、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)
    )
  )
2
Ashish Jain

接続の確立またはクライアントとの通信が、割り当てられた時間内に完了しなかったために問題が発生しました。これは、ネットワークまたはシステムの遅延の結果である可能性があります。

1
Vishal Tathe

FIREWALLをチェックして、クライアントからサーバーへの接続を許可します。ドメインネットワークを許可するか、ルールを作成します。

1
Fajar

プラグ可能なデータベースであるORCLPDBの「hr」ユーザーを接続しているときに、同じエラーが発生していました。

まず、Windowsコマンドプロンプトでlsnrctl statusコマンドを入力して、ホスト名とポート番号を取得します。私の場合、ポート番号が1521の127.0.0.1でした

次に、ホスト名とポート番号を指定して以下のコマンドを入力します。

sqlplus username/password@HostName:Port Number/PluggableDatabaseName.

例えば:

sqlplus hr/[email protected]:1521/ORCLPDB.
0
Avatar Girase

手順のトラブルシューティング(ドキュメント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ステートメントが発行されます。認証は、これらすべてが解析、実行、完全に取得されるまで完了しません。このリストの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の待機•ラッチ:行キャッシュオブジェクト•行キャッシュロック他の種類の待機イベントが可能です。このリストは完全ではない場合があります。

ここでの問題は、データベース内の別のセッションによって保持されている共有リソースを取得するために認証セッションがブロックされることです。そのブロッカーセッション自体は、実行中のアクティビティ(または独自のハング)で占有されているため、認証セッションに必要な共有リソースをタイムリーに解放できません。これにより、最終的に認証セッションにタイムアウトが報告されます。

  • 認証のトラブルシューティングがハングする

そのような状況では、何が起こっているのかを確認するために、認証セッションに必要な共有リソースを保持しているブロッカープロセスを見つける必要があります。

このような場合に使用される一般的な診断は次のとおりです。

  1. 1つ以上の認証セッションがブロックされている間に、レベル266で3回連続してシステム状態がダンプされます。ブロッキングセッションにより、複数回の接続試行のタイムアウトが発生した可能性があります。したがって、システム状態のダンプは、それらを生成するのに必要な時間が単一のタイムアウトの期間、たとえば60秒:
      $ 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
  • ASHレポートいくつかのタイムアウトエラーが発生した期間の10〜15分。
  • 可能であれば、待機中の共有リソースがラッチである場合のV $ LATCHHOLDERビューでの2つの連続したクエリ。 v $ latchholderから*を選択します。システム状態のダンプは、ブロッカーセッションの識別に役立ちます。レベル266は、実行中のコードを示し、既存のバグを根本原因として特定するのに役立ちます。

認証がハングする可能性のある問題の例

  • 未公開のバグ6879763共有プールシミュレーターのバグは、未公開のバグ6966286のパッチで修正されています。注563149.1を参照してください。
  • 未公開のバグ7039896の回避策パラメーター_enable_shared_pool_durations = false注7039896.8を参照

  • 問題を回避する他のアプローチ

場合によっては、インスタンスが開始されて新たにロードされた直後に、共有プールにそのようなステートメントを固定することにより、認証SQLの問題を回避できる場合があります。次の記事を使用して、これについてアドバイスできます。DBMS_SHARED_POOL.KEEPを使用して共有プールにカーソルを固定する方法726780.1

ピン留めは、非アクティブおよびエージングのためにそれらがフラッシュアウトされるのを防ぎます。したがって、将来リロードする必要があるため、つまり再解析する必要があり、認証ハングの問題の影響を受けやすくなります。

0
Tagar
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

0