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

Cha*_*adD 10 oracle toad sqlplus

我安装了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
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

基于每个程序的位置(Program Files(x86)与c:\ Program Files),这向我建议,32位程序Toad应该使用32位驱动程序,而dbForge应该使用64位驱动程序.

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

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

Q1: OraClient11g_home1是我的64位家用还是我安装了两个Oracle客户端?

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

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

Mic*_* S. 7

根据您的路径,您怀疑有两个已安装的客户端(Toad和dbforge是工具,而不是客户端,因此您的术语有点偏离).一个32位,另一个64位.根据其安装路径,Toad似乎是32位,但是执行它并转到Help | Support Bundle.您将看到顶部标题将是"APPLICATION INFORMATION(32-bit)"或"APPLICATION INFORMATION(64-bit)"以确认.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环境变量.


Wer*_*eit 6

根据Oracle,搜索这些位置tnsnames.ora,分别为.sqlnet.ora并且ldap.ora:

  1. 当前工作目录中的Oracle Net文件(PWD/CWD)
  2. TNS_ADMIN 会话或用户定义的脚本定义
  3. TNS_ADMIN 定义为全局环境变量
  4. TNS_ADMIN 在注册表中定义
  5. Oracle Net文件%ORACLE_HOME/network|net80\admin(Oracle默认位置)

但是,我不确定每个应用程序/驱动程序是否都遵循此列表.我从Oracle Document 111942.1获得了这个列表,指的是Oracle 9i,所以它可能已经过时了.

在" 数据库网络服务管理员指南"中,顺序是

  1. TNS_ADMIN 由环境变量定义
  2. TNS_ADMIN在注册表中定义(如果TNS_ADMIN环境变量不存在)
  3. %ORACLE_HOME%/network/admin目录(如果TNS_ADMIN环境变量不存在)

我建议为一个环境变量定义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,分别是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_ADMINopmn.xml配置文件中读取设置.

另一个例子,对于ODP.NET托管驱动程序(Oracle.ManagedDataAccess)测试版,我在Oracle Managed和TNS Names上找到了这个订单:

  1. 数据源别名下的"数据源"部分<oracle.manageddataaccess.client>在.NET配置文件部分(即machine.config,web.config,user.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 Release 4(12.1.0.2.4))中,它说:

  1. 数据源的别名在dataSources根据第<oracle.manageddataaccess.client>在.NET配置文件部分(即machine.config,web.config,user.config).
  2. 数据源别名在.NET配置文件中tnsnames.ora指定的位置的TNS_ADMIN文件中.位置可以包含绝对或相对目录路径.
  3. 数据源别名与tnsnames.ora文件中存在的文件相同.exe.

然而,根据一些测试我ODP.NET管理的驱动程序(4.121.2.0)需要做%ORACLE_HOME%\network\adminTNS_ADMIN环境变量考虑在内.像文档一样的锁不是100%正确.