确定相关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.ora
和ldap.ora
:
- 当前path(与运行的客户端应用程序相关联)
- 为会话定义的环境variables
TNS_ADMIN
- 为系统定义的环境variables
TNS_ADMIN
- Windowsregistry项
HKLM\SOFTWARE\ORACLE\KEY_{ORACLE_HOME_NAME}\TNS_ADMIN
(用于x64)或HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_{ORACLE_HOME_NAME}\TNS_ADMIN
(用于x86) -
%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时,我得到以下命令:
- 环境variables
TNS_ADMIN
-
HKLM\SOFTWARE\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN
,HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN
– > 仅当TNS_ADMIN
环境variables未设置。 -
%ORACLE_HOME%\network\admin
- 当前目录(可以与您的应用程序所在的目录不同)
- 您的应用程序所在的文件夹
更新2
很明显,没有修复search,对于不同的提供者/驱动程序而言,它是不同的。 也许这也取决于Oracle版本。
例如,对于ODP.NET托pipe驱动程序(Oracle.ManagedDataAccess) testing版,我在Oracle托pipe和TNS名称中find了这个顺序:
- 数据源别名在.NETconfiguration文件(即
machine.config
,web.config
,user.config
)的<oracle.manageddataaccess.client>
部分下的“dataSources”部分。 - 数据源别名在
tnsnames.ora
文件中,位于.NETconfiguration文件中由TNS_ADMIN
指定的位置。 -
tnsnames.ora
文件中的数据源别名与.exe
文件位于同一目录中。 -
tnsnames.ora
文件中的数据源别名出现在%TNS_ADMIN%
(其中%TNS_ADMIN%
是一个环境variables设置)。 - 位于
%ORACLE_HOME%\network\admin
目录下的tnsnames.ora
文件中的数据源别名
(其中%ORACLE_HOME%
是一个环境variables设置)。
在官方文档 (12c版本4)中说:
- 数据源别名在.NETconfiguration文件(即
machine.config
,web.config
,user.config
)中<oracle.manageddataaccess.client>
部分的dataSources
部分中。 - 数据源别名在
tnsnames.ora
文件中,位于.NETconfiguration文件中由TNS_ADMIN
指定的位置。 位置可以包含绝对或相对目录path。 -
tnsnames.ora
文件中的数据源别名与.exe
文件位于同一目录中。
但是,基于我使用ODP.NET托pipe驱动程序(4.121.2.0)所做的一些testing,它考虑了%ORACLE_HOME%\network\admin
和TNS_ADMIN
环境variables。 像文档锁是不是100%正确的。