web-dev-qa-db-ja.com

関連するtnsnames.oraファイルの場所の特定

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情報を移動するかを正確に理解できる理由を知りたいです。

10
ChadD

パスに基づいて、疑わしい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環境変数を作成します。

7
Michael S.

Oracleによると、これらの場所はtnsnames.oraを検索します。 sqlnet.oraおよびldap.ora

  1. 現在の作業ディレクトリ(PWD/CWD)にあるOracle Netファイル
  2. TNS_ADMINセッション単位またはユーザー定義スクリプトによって定義
  3. TNS_ADMINはグローバル環境変数として定義されています
  4. TNS_ADMINレジストリで定義
  5. %Oracle_HOME/network|net80\admin(Oracleのデフォルトの場所)にあるOracle Netファイル

ただし、各アプリケーション/ドライバーがこのリストに従っているかどうかはわかりません。このリストは、Oracle Document 111942.1 からOracle 9iを参照しているため、古くなっている可能性があります。

Database Net Services管理者ガイド の順序は

  1. TNS_ADMIN環境変数により定義
  2. TNS_ADMINレジストリで定義されている(TNS_ADMIN環境変数が存在しない場合)
  3. %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になります。

更新

私のマシンでテストを実行すると、次の順序になります。

  1. 環境変数TNS_ADMIN
  2. レジストリキーHKEY_CURRENT_USER\SOFTWARE\Oracle\KEY_{Oracle_Home_Name}\TNS_ADMIN
  3. レジストリキー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環境変数が設定されていない場合のみ。

  4. %Oracle_HOME%\network\admin
  5. 現在のディレクトリ(アプリケーションが配置されているディレクトリとは異なる場合があります)
  6. アプリケーションが置かれているフォルダー

更新2

明らかに修正検索はありません。プロバイダー/ドライバーによって異なります。たぶん、Oracleのバージョンにも依存します。

たとえば、Oracle HTTP ServerTNS_ADMIN設定ファイルからopmn.xml設定を読み取ります。

別の例、ODP.NET Managed Driver(Oracle.ManagedDataAccess)betaバージョンの場合、この順序は Oracle ManagedおよびTNS名

  1. .NET構成ファイルの<Oracle.manageddataaccess.client>セクションの下にある 'dataSources'セクションのデータソースエイリアス(つまり、machine.configweb.configuser.config)。
  2. .NET構成ファイルのtnsnames.oraで指定された場所にあるTNS_ADMINファイルのデータソースエイリアス。
  3. tnsnames.oraと同じディレクトリにある.exeファイルのデータソースエイリアス。
  4. tnsnames.oraにある%TNS_ADMIN%ファイルのデータソースエイリアス
    %TNS_ADMIN%は環境変数の設定です)。
  5. tnsnames.oraにある%Oracle_HOME%\network\adminファイルのデータソースエイリアス
    %Oracle_HOME%は環境変数の設定です)。

公式の ドキュメント (12cリリース4(12.1.0.2.4))では次のように述べています:

  1. .NET構成ファイルの<Oracle.manageddataaccess.client>セクションの下のdataSourcesセクションのデータソースエイリアス(つまり、machine.configweb.configuser.config)。
  2. .NET構成ファイルのtnsnames.oraで指定された場所にあるTNS_ADMINファイルのデータソースエイリアス。場所は、絶対または相対ディレクトリパスで構成できます。
  3. tnsnames.oraと同じディレクトリにある.exeファイルのデータソースエイリアス。

ただし、ODP.NET Managed Driver(4.121.2.0)で作成したいくつかのテストに基づいて、%Oracle_HOME%\network\adminおよびTNS_ADMIN環境変数が考慮されます。ドキュメントのようなロックは完全に正しいわけではありません。

6