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

时间:2015-02-02 15:17:34

标签: oracle sqlplus toad

我安装了32位和64位Oracle 11g驱动程序。我在我的电脑上搜索名为" tnsnames.ora"的文件。并在以下位置找到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)与c:\ Program Files),这告诉我Toad是一个32位程序,应该使用32位驱动程序而dbForge应该使用64位位驱动程序。

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

但是,TOAD似乎只识别位置#3中的tnsnames.ora文件,它根本无法识别位置2中的tnsnames.ora文件! (因为它是一个32位程序,我没想到它会识别位置2中的tns文件,就是这种情况)。为了清楚起见,为了总结TOAD测试,TOAD只识别了位置3中的tns文件。

其他同事在其计算机上的位置3中没有tns文件。我不知道为什么要这样做。当我运行Toad时,它会显示以下2个Home,其中32位Home是活动的。

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而不是仅使用位置#3中的t?

Q3:如果我离开位置3的tns文件,dbForge和TOAD都可以工作,但我想知道为什么这样我就能准确地理解如何从一个移动tns信息机器到另一个。

3 个答案:

答案 0 :(得分:5)

根据您的路径,您怀疑有两个已安装的客户端(Toad和dbforge是工具,而不是客户端,因此您的术语有点偏离)。一个32位,另一个64位。根据其安装路径,Toad似乎是32位,但是执行它并转到Help | Support Bundle。您将看到顶部标题将是"应用信息(32位)"或者"应用信息(64位)"只是为了确认。 Toad 11.6是第一个引入64位版本的。

Toad只会看到与其相同平台的Oracle客户端。所以你的64位客户端与Toad的缘故无关。 C:\ Windows \ TNS似乎是一个用于TNS_ADMIN文件夹的文件夹,因为它有奇怪的位置和Toad看到它的事实。在命令提示符下执行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环境变量。

答案 1 :(得分:5)

根据Oracle,这些位置搜索tnsnames.ora,分别为。 sqlnet.oraldap.ora

  1. 当前工作目录中的Oracle Net文件(PWD / CWD)
  2. TNS_ADMIN以会话方式或用户定义的脚本定义
  3. TNS_ADMIN被定义为全局环境变量
  4. TNS_ADMIN在注册表中定义
  5. %ORACLE_HOME/network|net80\admin中的Oracle Net文件(Oracle默认位置)
  6. 但是,我不确定每个应用程序/驱动程序是否都遵循此列表。我从Oracle Document 111942.1获取了这个列表,指的是Oracle 9i,因此它可能已经过时了。

    Database Net Services Administrator's Guide中,订单是

    1. TNS_ADMIN由环境变量
    2. 定义 注册表中定义的
    3. TNS_ADMIN(如果TNS_ADMIN环境变量不存在)
    4. %ORACLE_HOME%/network/admin目录(如果TNS_ADMIN环境变量不存在)
    5. 我建议为TNS_ADMIN定义一个环境变量,并且只使用一个tnsnames.ora文件。为了安全起见,请检查您的注册表值。

      如果%ORACLE_HOME%\network\admin中的文件,我建议为其创建一个符号链接 - 只需要在非常安全方面,例如mklink /d %ORACLE_HOME%\network\admin c:\Oracle\common\settings\admin

      另外请注意,您不必使用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,resp。 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN

        - &GT;仅当未设置TNS_ADMIN环境变量时。

      4. %ORACLE_HOME%\network\admin
      5. 当前目录(可以与应用程序所在的目录不同)
      6. 您的应用程序所在的文件夹
      7. 更新2

        显然没有修复搜索,它因不同的提供商/驱动程序而异。也许它还取决于Oracle版本。

        例如, Oracle HTTP Server TNS_ADMIN配置文件中读取opmn.xml设置。

        另一个例子,对于ODP.NET托管驱动程序(Oracle.ManagedDataAccess) beta 版本,我在Oracle Managed and TNS Names找到了此订单:

        1. .NET配置文件中<oracle.manageddataaccess.client>部分下的'dataSources'部分中的数据源别名(即machine.configweb.configuser.config)。
        2. tnsnames.ora文件中的数据源别名,位于.NET配置文件中TNS_ADMIN指定的位置。
        3. tnsnames.ora位于同一目录中的.exe文件中的数据源别名。
        4. 位于tnsnames.ora的{​​{1}}文件中的数据源别名 (其中%TNS_ADMIN%是环境变量设置)。
        5. 位于%TNS_ADMIN%的{​​{1}}文件中的数据源别名 (其中tnsnames.ora是环境变量设置)。
        6. 在官方documentation(12c第4版(12.1.0.2.4))中,它说:

          1. .NET配置文件中%ORACLE_HOME%\network\admin部分%ORACLE_HOME%部分中的数据源别名(即dataSources<oracle.manageddataaccess.client>machine.config)。
          2. .NET配置文件中web.config指定位置的user.config文件中的数据源别名。位置可以包含绝对或相对目录路径。
          3. tnsnames.ora位于同一目录中的TNS_ADMIN文件中的数据源别名。
          4. 但是,根据我使用ODP.NET托管驱动程序(4.121.2.0)进行的一些测试,需要考虑tnsnames.ora.exe环境变量。像文档这样的锁不是100%正确。

答案 2 :(得分:0)

如果您使用的是Visual Studio v2017,则此处为tnsNames文件:

32位安装:

  

c:\ program files(x86)\ oracle开发人员工具   vs2017 \ network \ admin \ tnsnames.ora

64位安装:

  

c:\ program files \ oracle开发人员工具   vs2017 \ network \ admin \ tnsnames.ora