Hinky Oracle Connection(TNSNAMES.oraヘルプ)
質問
最近、物理DB、新しいサーバー、新しい場所、同じデータベーススキーマとデータを変更しました。変更後、約半分の時間でこのエラーが発生し、独自のデスクトップタイプのアプリケーションでDBに直接接続しようとしました。 :
SQL*Loader-704: Internal error: ulconnect: OCIServerAttach[0]
ORA-12545: Connect failed because target host or object does not exist
残りの時間は、問題なくすぐに接続します。 JDBCを介して接続を確立するアプリケーションには問題はないようですが、tnsnames.oraルックアップを実行する場合(または少なくとも私の予想では)実行すると問題が発生します。 TNSPINGは100%動作しますが、SQLLDDRなどのOracle実行可能ファイルを使用すると、少なくとも50%の時間が失敗します。 TSNNAMESファイルの匿名化されたsnppetとTNSPINGの出力は次のとおりです。
DB_CONNECTION =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 1.2.3.4)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = MY.URL.COM)
)
)
そしてTNSPING:
C:\>TNSPING DB_CONNECTION
TNS Ping Utility for 32-bit Windows: Version 9.2.0.1.0
Copyright (c) 1997 Oracle Corporation. All rights reserved.
Used parameter files:
C:\oracle\ora92\network\admin\sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = 1.2.3.4)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = MY.URL.COM)))
OK (200 msec)
DBのSIDがあります。これはJDBC接続が依存するものですが、tnsnames.oraに追加しても接続を確立する確率は向上しません。この問題を知的に解決するためにオラクルがtnsnamesファイルをどのように使用しているかについては十分に知らないので、提案がある場合や明らかに欠落しているものがあれば教えてください。
編集:新しいDBは、問題の一部である可能性がある2つの負荷分散データベースである可能性があります。
解決
最近、アプリケーションで同様の問題が発生しました。アプリケーションはOracle RACに接続する場合があり、ORA-12545でエラーが発生する場合があります。 要するに、問題は、TNSNAMES.ORAで仮想IPアドレスを使用しているときにサーバーに本名があったことです。 system32 \ drivers \ etc \ hostsファイルを介してサーバー名のIPアドレスへのマッピングを追加すると、すべてが正常に動作し始めました。
ブログにもう少し書いた <!> lt; shameless advert <!> gt; http: //dcarapic.blogspot.com/2009/04/intermittent-ora-12545-error.html <!> lt; / shameless advert <!> gt;
他のヒント
ああ、断続的な問題を愛さなければならない:) (以下では、このWiki言語のエスケープ文字がわからないため、アンダースコア文字を置き換える必要がありました)
常に同じOSユーザーを使用して接続し、tnspingを実行していますか?
異なるtnsnames.oraの場所を指す環境変数TNS [underscore] ADMINを確認します。クライアントのスキャンを実行して、重複するtnsnames.oraを探します。 $ TNS [underscore] ADMINが指す場所または異なる$ ORACLE [underscore] HOMESのいずれか(たとえば、2つのOracleクライアントがインストールされている場合)。
同様に、すべての接続試行とtnspingに同じ$ ORACLE [underscore] HOMEおよび$ PATH環境変数を使用していることを確認します。 (たとえば、常に同じOSユーザーまたは各ユーザーが同じ値を持っている)
tnspingの出力はバージョン9.2を報告するので、これはありそうにありませんが、11gではDBが1分ほどかかるリスナーに登録します。 (10gにも当てはまるかもしれません)。これより前に接続しようとしてもターゲットは見つかりません。
別の可能性は低い-同じホスト名のサービスが古いホストサーバーでまだアドバタイズされていますか?可能な限り削除してください。
その後、ネットワーク自体を調べ始めました。サーバーのpingは常に成功して迅速ですか? tnsnames.oraでIPではなくホスト名を使用している場合、ホスト名は正しいIP(nslookup)に確実に解決されます。ローカルファイアウォールはありますか?その場合は動作しますか?
よろしく カール
Oracle 10g
を使用している場合は、代わりにEasy Connect
ハンドラーを使用できます。
//servername/instancename
、
//1.2.3.4/my.url.com
あなたの場合。
多くのTNSNAMES
問題の影響を受けません。