2

最近、物理 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 ファイルと 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)

JDBC接続が依存するDBのSIDを持っていますが、それをtnsnames.oraに追加しても、接続を確立する確率は向上しません。この問題をインテリジェントに解決するためにオラクルが tnsnames ファイルをどのように使用しているかについて、私は十分に知りません。

編集: 新しい DB は、問題の一部である可能性がある 2 つの負荷分散されたデータベースである可能性があります。

4

3 に答える 3

1

最近、アプリケーションで同様の問題が発生しました。アプリケーションが Oracle RAC に接続することがあり、ORA-12545 が表示されることがあります。つまり、問題は、TNSNAMES.ORA で仮想 IP アドレスを使用しているときに、サーバーに実名があったことでした。system32\drivers\etc\hosts ファイルを介してサーバー名の IP アドレスへのマッピングを追加すると、すべてが適切に機能し始めました。

ブログ <恥知らずな広告> http://dcarapic.blogspot.com/2009/04/intermittent-ora-12545-error.html </恥知らずな広告>にもう少し書いています。

于 2009-04-15T18:45:25.173 に答える
0

ああ、断続的な問題が大好きです :) (以下では、このウィキ言語のエスケープ文字がわからないため、アンダースコア文字を置き換えなければなりませんでした)

接続と tnsping の実行に常に同じ OS ユーザーを使用していますか?

異なる 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) に確実に解決されますか。ローカル ファイアウォールはありますか。ある場合、動作していますか。

よろしくカール

于 2009-01-15T00:38:12.597 に答える