32ビットと64ビットの両方のOracle 11gドライバーをインストールしました。 「tnsnames.ora」という名前のファイルを探してPCを検索し、次の場所に3つ見つかりました。
1. C:\Oracle\product\11203_32bit\CLIENT_1\NETWORK\ADMIN
2. C:\Oracle\product\11203_64bit\CLIENT_1\NETWORK\ADMIN
3. C:\Windows\TNS
Tnsnames.oraファイルの3番目の場所が存在することに驚かされます。
PCに次のOracleクライアントがインストールされています。
"C:\Program Files (x86)\Quest Software\Toad for Oracle 11.6\Toad.exe"
"C:\Program Files\Devart\dbForge Studio Express for Oracle\dbforgeoracle.exe"
各プログラムの場所(Program Files(x86)vs. c:\ Program Files)に基づき、32ビットプログラムのToadは32ビットドライバーを使用し、dbForgeは64ビットドライバーを使用する必要があることを示唆しています。
dbForgeは、場所#2または#3でtnsnames.oraファイルを使用しているようです。これを知っているのは、tnsファイルの1つを除いてすべてを体系的に名前変更し、アプリから新しい接続を作成するときに、ファイルから読み取った接続名が使用可能かどうかを確認することです。
ただし、TOADは場所#3のtnsnames.oraファイルのみを認識し、場所2のtnsnames.oraファイルをまったく認識しなかったようです。 (32ビットプログラムであるため、ロケーション2のtnsファイルを認識するとは予想していませんでした)。希望を明確にするためにTOADテストを要約するために、TOADはロケーション3のtnsファイルのみを認識しました。
他の同僚は、マシンのロケーション3にtnsファイルを持っていません。なぜそうするのか分かりません。 Toadを実行すると、次の2つのホームが表示され、32ビットのホームがアクティブなホームとして表示されます。
OraClient11g_home1 (11.2.0.3)
Oracle_HOME:C:\app\C39293\product\11.2.0\client_1
Oracle_HOME_NAME:OraClient11g_home1
Oracle_HOME_KEY:HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_OraClient11g_home1
Oracle_SID:
NLS_LANG:AMERICAN_AMERICA.WE8MSWIN1252
SQLPATH:
LOCAL:
Client DLL:C:\app\C39293\product\11.2.0\client_1\oci.dll
TNSNames.ora:
SQLNet.ora:
LDAP.ora:
Login.sql:
GLogin.sql:
In system PATH:No
Home is valid:No
OraClient11g_home1_32bit (11.2.0.3)
Oracle_HOME:c:\Oracle\product\11203_32bit\CLIENT_1
Oracle_HOME_NAME:OraClient11g_home1_32bit
Oracle_HOME_KEY:HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_OraClient11g_home1_32bit
Oracle_SID:
NLS_LANG:AMERICAN_AMERICA.WE8MSWIN1252
SQLPATH:c:\Oracle\product\11203_32bit\CLIENT_1\dbs
LOCAL:
Client DLL:c:\Oracle\product\11203_32bit\CLIENT_1\bin\oci.dll
TNSNames.ora:
SQLNet.ora:
LDAP.ora:
Login.sql:
GLogin.sql:c:\Oracle\product\11203_32bit\CLIENT_1\sqlplus\admin\glogin.sql
In system PATH:Yes
Q1: OraClient11g_home1は64ビットのホームですか、または2つのOracleクライアントがインストールされていますか?
Q2: 32ビットTOADがロケーション#3のtnsを使用するのではなく、ロケーション#1のtnsを使用しないのはなぜですか?
Q3:ロケーション3のtnsファイルを残す場合、dbForgeとTOADの両方が機能しますが、なぜマシン間でtns情報を移動するかを正確に理解できる理由を知りたいです。
パスに基づいて、疑わしい2つのクライアントがインストールされています(Toadとdbforgeはクライアントではなくツールなので、用語は少し異なります)。 1つの32ビット、もう1つの64ビット。 Toadはインストールパスに基づいて32ビットであるように見えますが、それを実行し、Help | Support Bundleに移動します。確認のために、上部のヘッダーが「アプリケーション情報(32ビット)」または「アプリケーション情報(64ビット)」になることがわかります。 Toad 11.6は、64ビットバージョンを初めて導入しました。
Toadは、同じプラットフォーム用のOracleクライアントのみを表示します。したがって、64ビットクライアントは、Toadにとっては無関係です。 C:\ Windows\TNSは、その奇妙な場所とToadがそれを見るという事実を考えると、TNS_ADMINフォルダーに使用されるフォルダーのように見えます。コマンドプロンプトでSET TNS_ADMINを実行し、「TNS_ADMIN = C:\ Windows\TNS」とレポートされるかどうかを確認します。もしそうなら、すべてのツールがそのtnsnames.oraを使用している必要があります。ネット構成ファイルを含むフォルダーをポイントする場合、これはグローバルオーバーライドです。 TNS_ADMINを環境変数として設定していない場合は、OracleルートレジストリでHKEY_LOCAL_MACHINE\Software\Oracleを探してください。
すべてのツールに共通の接続セットを使用する場合、すべてのtnsnames.oraファイルを削除します。また、C:\ Windows\TNSフォルダーをC:\ Oracle\Adminなどのより適切な場所に再配置し、tnsnames.ora、sqlnet.ora、およびldap.ora(該当する場合)を作成します。その場所を指すTNS_ADMIN環境変数を作成します。
Oracleによると、これらの場所はtnsnames.ora
を検索します。 sqlnet.ora
およびldap.ora
:
TNS_ADMIN
セッション単位またはユーザー定義スクリプトによって定義TNS_ADMIN
はグローバル環境変数として定義されていますTNS_ADMIN
レジストリで定義%Oracle_HOME/network|net80\admin
(Oracleのデフォルトの場所)にあるOracle Netファイルただし、各アプリケーション/ドライバーがこのリストに従っているかどうかはわかりません。このリストは、Oracle Document 111942.1 からOracle 9iを参照しているため、古くなっている可能性があります。
Database Net Services管理者ガイド の順序は
TNS_ADMIN
環境変数により定義TNS_ADMIN
レジストリで定義されている(TNS_ADMIN
環境変数が存在しない場合)%Oracle_HOME%/network/admin
ディレクトリ(TNS_ADMIN
環境変数が存在しない場合)TNS_ADMIN
の環境変数を定義し、tnsnames.oraファイルを1つだけ使用することをお勧めします。安全のために、レジストリ値も確認してください。
ファイルが%Oracle_HOME%\network\admin
にあるnotである場合、そのためのシンボリックリンクを作成することをお勧めします-非常に安全な側面、例えばmklink /d %Oracle_HOME%\network\admin c:\Oracle\common\settings\admin
もう1つの注意点として、tnsnames.oraファイルを「再生」する必要はありません。 Microsoft Sysinternalsの Process Monitor を使用すると、各ファイルアクセスを監視できます。つまり、フィルターはPath contains tnsnames
になります。
更新
私のマシンでテストを実行すると、次の順序になります。
TNS_ADMIN
HKEY_CURRENT_USER\SOFTWARE\Oracle\KEY_{Oracle_Home_Name}\TNS_ADMIN
レジストリキーHKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_{Oracle_Home_Name}\TNS_ADMIN
、それぞれ。 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Oracle\KEY_{Oracle_Home_Name}\TNS_ADMIN
-> TNS_ADMIN
環境変数が設定されていない場合のみ。
%Oracle_HOME%\network\admin
更新2
明らかに修正検索はありません。プロバイダー/ドライバーによって異なります。たぶん、Oracleのバージョンにも依存します。
たとえば、Oracle HTTP ServerはTNS_ADMIN
設定ファイルからopmn.xml
設定を読み取ります。
別の例、ODP.NET Managed Driver(Oracle.ManagedDataAccess)betaバージョンの場合、この順序は Oracle ManagedおよびTNS名 :
<Oracle.manageddataaccess.client>
セクションの下にある 'dataSources'セクションのデータソースエイリアス(つまり、machine.config
、web.config
、user.config
)。tnsnames.ora
で指定された場所にあるTNS_ADMIN
ファイルのデータソースエイリアス。tnsnames.ora
と同じディレクトリにある.exe
ファイルのデータソースエイリアス。tnsnames.ora
にある%TNS_ADMIN%
ファイルのデータソースエイリアス%TNS_ADMIN%
は環境変数の設定です)。tnsnames.ora
にある%Oracle_HOME%\network\admin
ファイルのデータソースエイリアス%Oracle_HOME%
は環境変数の設定です)。公式の ドキュメント (12cリリース4(12.1.0.2.4))では次のように述べています:
<Oracle.manageddataaccess.client>
セクションの下のdataSources
セクションのデータソースエイリアス(つまり、machine.config
、web.config
、user.config
)。tnsnames.ora
で指定された場所にあるTNS_ADMIN
ファイルのデータソースエイリアス。場所は、絶対または相対ディレクトリパスで構成できます。tnsnames.ora
と同じディレクトリにある.exe
ファイルのデータソースエイリアス。ただし、ODP.NET Managed Driver(4.121.2.0)で作成したいくつかのテストに基づいて、%Oracle_HOME%\network\admin
およびTNS_ADMIN
環境変数が考慮されます。ドキュメントのようなロックは完全に正しいわけではありません。