データベース クライアントがどの tnsnames.ora ファイルを使用しているかがわからないために、Oracle 接続の問題が発生することがあります。
これを理解する最善の方法は何ですか?++さまざまなプラットフォーム ソリューションに満足しています。
データベース クライアントがどの tnsnames.ora ファイルを使用しているかがわからないために、Oracle 接続の問題が発生することがあります。
これを理解する最善の方法は何ですか?++さまざまなプラットフォーム ソリューションに満足しています。
Oracleは、次のようなユーティリティを提供していますtnsping
。
R:\>tnsping someconnection
TNS Ping Utility for 32-bit Windows: Version 9.0.1.3.1 - Production on 27-AUG-20
08 10:38:07
Copyright (c) 1997 Oracle Corporation. All rights reserved.
Used parameter files:
C:\Oracle92\network\ADMIN\sqlnet.ora
C:\Oracle92\network\ADMIN\tnsnames.ora
TNS-03505: Failed to resolve name
R:\>
R:\>tnsping entpr01
TNS Ping Utility for 32-bit Windows: Version 9.0.1.3.1 - Production on 27-AUG-20
08 10:39:22
Copyright (c) 1997 Oracle Corporation. All rights reserved.
Used parameter files:
C:\Oracle92\network\ADMIN\sqlnet.ora
C:\Oracle92\network\ADMIN\tnsnames.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = **)
(PROTOCOL = TCP) (Host = ****) (Port = 1521))) (CONNECT_DATA = (SID = ENTPR0
1)))
OK (40 msec)
R:\>
これにより、使用しているファイルが表示されます。ユーティリティはOraclebin
ディレクトリにあります。
Linux の場合:
$ strace sqlplus -L scott/tiger@orcl 2>&1| grep -i 'open.*tnsnames.ora'
次のようなものを示しています。
open("/opt/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora",O_RDONLY)=7
に変更
$ strace sqlplus -L scott/tiger@orcl 2>&1| grep -i 'tnsnames.ora'
失敗しているすべてのファイル パスが表示されます。
私の開発マシンには、3 つの異なるバージョンの Oracle クライアント ソフトウェアがあります。tnsnames.ora
そのうちの1つでファイルを管理します。他の 2 つは、tnsnames.ora
ファイルに次のように入力しました。
ifile=path_to_tnsnames.ora_file/tnsnames.ora
このようにして、何らかの理由で間違ったtnsnames.ora
ファイルがクライアントによって使用された場合、常に最新バージョンになります。
TNS の場所が格納されている別の場所があります。Windows を使用している場合は、Oracle ホームを開いてそこregedit
に移動します。という文字列エントリがある場合、そのエントリの値は、コンピュータで Oracle が使用している TNS ファイルを指します。My HKEY Local Machine/Software/ORACLE/KEY_OraClient10_home1
KEY_OraClient10_home1
TNS_ADMIN
Codeslave は、「常に "$ORACLE_HOME/network/admin/tnsnames.ora" であるべきではありませんか?」と尋ねます。答えはノーです。そうではありません。同じマシンでの tnsping の次の 2 つの呼び出しについて考えてみましょう。
C:\Documents and Settings\me>D:\Oracle\10.2.0_DB\BIN\tnsping orcl
TNS Ping Utility for 32-bit Windows: Version 10.2.0.4.0 - Production on 09-OCT-2
008 14:30:12
Copyright (c) 1997, 2007, Oracle. All rights reserved.
Used parameter files:
D:\Oracle\10.2.0_DB\network\admin\sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = xxxx
)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL)))
OK (40 msec)
C:\Documents and Settings\me>tnsping orcl
TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 09-OCT-2
008 14:30:21
Copyright (c) 1997, 2005, Oracle. All rights reserved.
Used parameter files:
D:\oracle\10.2.0_Client\network\admin\sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = XXXX)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))
OK (20 msec)
C:\Documents and Settings\me>
2 つの異なるパラメーター ファイルの場所に注意してください。これらは、実行している tnsping 実行可能ファイル (およびおそらくどこから実行されているか) によって異なります。tnsnames ベースの Oracle ネットワークでは、TNS_ADMIN 変数を使用することが、一貫した tnsnames.ora ファイルを確実に取得する唯一の方法です。(注:Windows中心の回答)
Windows の場合: SysInternals のFilemonは、アクセスされているファイルを表示します。
雑多なファイル システム トラフィックに圧倒されないように、必ずフィルタを設定してください。
追加: Filemon は新しい Windows バージョンでは動作しないため、Process Monitorを使用する必要がある場合があります。
デフォルトでは、tnsnames.ora は、UNIX オペレーティング システムでは $ORACLE_HOME/network/admin ディレクトリにあり、Windows オペレーティング システムでは ORACLE_HOME\network\admin ディレクトリにあります。tnsnames.ora は、次の場所にも保存できます。
TNS_ADMIN 環境変数 (またはレジストリ値) で指定されたディレクトリ
UNIX オペレーティング システムでは、グローバル構成ディレクトリ。たとえば、Solaris オペレーティング システムでは、このディレクトリは /var/opt/oracle です。
複数の ORACLE_HOMES がある場合は、使用している ORACLE_HOME に注意してください。tnsnames.ora ファイルの場所は ORACLE_HOME ごとに異なる可能性があるためです。
TWO_TASK 環境変数について言及した人にとっては、接続先のデフォルトのデータベース サービス名を設定するために使用されます (別のサーバー上のデータベースである可能性があります)。TWO_TASK を設定したサービス名は、接続時に tnsnames.ora ファイルで検索されます。
常に「$ORACLE_HOME/network/admin/tnsnames.ora」であるべきではありませんか? 次に、「echo $oracle_ home」または *nix に相当するものを実行するだけです。
@Pete Holberton あなたは完全に正しいです。そういえば、TWO_TASK という別のモンキー レンチが開発中です。
http://www.orafaq.com/wiki/TNS_ADMINによる
と、TNS_ADMIN は、SQL*Net 構成ファイル (sqlnet.ora や tnsnames.ora など) が配置されているディレクトリを指す環境変数です。
最も簡単な方法は、おそらく、データベースに接続しているプロセスのPATH環境変数を確認することです。ほとんどの場合、tnsnames.ora ファイルはパス..\network\adminの最初の Oracle bin ディレクトリにあります。TNS_ADMIN 環境変数またはレジストリ内の値 (現在の Oracle ホーム用) は、これをオーバーライドする場合があります。
他の人が提案したように filemon を使用すると、うまくいきます。