确定相关tnsnames.ora文件的位置

我安装了32位和64位Oracle 11g驱动程序。 我search我的电脑寻找名称为“tnsnames.ora”的文件,并在以下位置find3个:

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文件的第三个位置的存在让我感到惊讶。

我在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" 

根据每个程序(程序文件(x86)与c:\ Program Files文件)的位置,这表明Toad是一个32位程序,应该使用32位驱动程序,而dbForge应该使用64位驱动程序。

dbForge似乎在位置#2或#3中使用tnsnames.ora文件。 我知道这是通过系统地重命名除tns文件之外的所有文件,然后检查从该文件读取的连接名是否可用,当试图从应用程序创build一个新的连接。

但是,TOAD似乎只识别位置#3中的tnsnames.ora文件,并且根本不能识别位置2中的tnsnames.ora文件! (因为这是一个32位的程序,我没有想到它会识别位置2的tns文件,情况就是如此)。 为了总结TOADtesting的清晰度,TOAD只识别位置3的tns文件。

其他同事在他们的机器上没有位置3的tns文件。 我不知道我为什么这样做。 当我运行蟾蜍,它显示以下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位家庭,还是我安装了两个Oracle客户端?

Q2:为什么32位TOAD不使用位置#1中的tns而是使用位置#1中的tns?

问题3:如果我在位置3的tns文件上,dbForge和TOAD都可以工作,但是我想知道为什么我可以准确理解如何将tns信息从一台机器移动到另一台机器。

根据你的path,你有两个安装的客户端,你怀疑(蟾蜍和dbforge是工具,而不是客户端,所以你的术语是有点closures)。 一个32位,另一个64位。 Toad的安装path似乎是32位的,但执行它并转到帮助|支持包。 你会看到顶部标题将是“应用程序信息(32位)”或“应用程序信息(64位)”,以确认。 蟾蜍11.6是第一个引入64位版本的。

蟾蜍只会看到与其相同平台的Oracle客户端。 所以你的64位客户端与蟾蜍无关。 C:\ Windows \ TNS似乎是一个用于TNS_ADMIN文件夹的文件夹,考虑到它的奇怪位置以及Toad看到它的事实。 在命令提示符下执行SET TNS_ADMIN,看看它是否报告“TNS_ADMIN = C:\ Windows \ TNS”如果是这样,那么所有的工具应该使用该tnsnames.ora。 如果您指向包含您的networkingconfiguration文件的文件夹,那么这是全局覆盖。 如果您没有将TNS_ADMIN设置为环境variables,请在您的Oracle根registry中查找它:HKEY_LOCAL_MACHINE \ Software \ Oracle。

如果你为所有的工具使用一组公共的连接,我会删除你所有的tnsnames.ora文件。 我也将C:\ Windows \ TNS文件夹重定位到更适合的地方,如C:\ Oracle \ Admin,并在那里创build您的tnsnames.ora,sqlnet.ora和ldap.ora(如果适用)。 创build一个指向该位置的TNS_ADMIN环境variables。

根据甲骨文这些地点searchtnsnames.ora ,分别。 sqlnet.oraldap.ora

  1. 当前path(与运行的客户端应用程序相关联)
  2. 为会话定义的环境variablesTNS_ADMIN
  3. 为系统定义的环境variablesTNS_ADMIN
  4. Windowsregistry项HKLM\SOFTWARE\ORACLE\KEY_{ORACLE_HOME_NAME}\TNS_ADMIN (用于x64)或HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_{ORACLE_HOME_NAME}\TNS_ADMIN (用于x86)
  5. %ORACLE_HOME%\network\admin

但是,我不确定每个应用程序/驱动程序是否遵循这个列表。 我从Oracle Document 111942.1中获得了有关Oracle 9i的列表。

所以,我也build议为TNS_ADMIN定义一个环境variables,并只使用一个tnsnames.ora文件。 为了安全起见,请检查您的registry值。

如果您的文件不在 %ORACLE_HOME%\network\admin ,我build议为它创build一个符号链接 – 只是为了安全起见,例如mklink /d %ORACLE_HOME%\network\admin c:\Oracle\common\settings\admin

另外请注意,你不必“玩”你的tnsnames.ora文件。 使用Microsoft Sysinternals的进程监视器 ,您可以监视每个文件的访问权限,即filter将是Path contains tnsnames

更新

当我在我的机器上运行testing时,我得到以下命令:

  1. 环境variablesTNS_ADMIN
  2. HKLM\SOFTWARE\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMINHKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN – > 仅当TNS_ADMIN环境variables未设置。
  3. %ORACLE_HOME%\network\admin
  4. 当前目录(可以与您的应用程序所在的目录不同)
  5. 您的应用程序所在的文件夹

更新2

很明显,没有修复search,对于不同的提供者/驱动程序而言,它是不同的。 也许这也取决于Oracle版本。

例如,对于ODP.NET托pipe驱动程序(Oracle.ManagedDataAccess) testing版,我在Oracle托pipe和TNS名称中find了这个顺序:

  1. 数据源别名在.NETconfiguration文件(即machine.configweb.configuser.config )的<oracle.manageddataaccess.client>部分下的“dataSources”部分。
  2. 数据源别名在tnsnames.ora文件中,位于.NETconfiguration文件中由TNS_ADMIN指定的位置。
  3. tnsnames.ora文件中的数据源别名与.exe文件位于同一目录中。
  4. tnsnames.ora文件中的数据源别名出现在%TNS_ADMIN%
    (其中%TNS_ADMIN%是一个环境variables设置)。
  5. 位于%ORACLE_HOME%\network\admin目录下的tnsnames.ora文件中的数据源别名
    (其中%ORACLE_HOME%是一个环境variables设置)。

在官方文档 (12c版本4)中说:

  1. 数据源别名在.NETconfiguration文件(即machine.configweb.configuser.config )中<oracle.manageddataaccess.client>部分的dataSources部分中。
  2. 数据源别名在tnsnames.ora文件中,位于.NETconfiguration文件中由TNS_ADMIN指定的位置。 位置可以包含绝对或相对目录path。
  3. tnsnames.ora文件中的数据源别名与.exe文件位于同一目录中。

但是,基于我使用ODP.NET托pipe驱动程序(4.121.2.0)所做的一些testing,它考虑了%ORACLE_HOME%\network\adminTNS_ADMIN环境variables。 像文档锁是不是100%正确的。