最近、物理 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 つの負荷分散されたデータベースである可能性があります。