我安装了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信息机器到另一个。
答案 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.ora
和ldap.ora
:
TNS_ADMIN
以会话方式或用户定义的脚本定义TNS_ADMIN
被定义为全局环境变量TNS_ADMIN
在注册表中定义%ORACLE_HOME/network|net80\admin
中的Oracle Net文件(Oracle默认位置)但是,我不确定每个应用程序/驱动程序是否都遵循此列表。我从Oracle Document 111942.1获取了这个列表,指的是Oracle 9i,因此它可能已经过时了。
在Database Net Services Administrator's Guide中,订单是
TNS_ADMIN
由环境变量TNS_ADMIN
(如果TNS_ADMIN
环境变量不存在)%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
<强>更新强>
当我在我的机器上运行测试时,我得到以下命令:
TNS_ADMIN
HKEY_CURRENT_USER\SOFTWARE\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN
注册表项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
环境变量时。
%ORACLE_HOME%\network\admin
更新2
显然没有修复搜索,它因不同的提供商/驱动程序而异。也许它还取决于Oracle版本。
例如, Oracle HTTP Server 从TNS_ADMIN
配置文件中读取opmn.xml
设置。
另一个例子,对于ODP.NET托管驱动程序(Oracle.ManagedDataAccess) beta 版本,我在Oracle Managed and TNS Names找到了此订单:
<oracle.manageddataaccess.client>
部分下的'dataSources'部分中的数据源别名(即machine.config
,web.config
,user.config
)。tnsnames.ora
文件中的数据源别名,位于.NET配置文件中TNS_ADMIN
指定的位置。tnsnames.ora
位于同一目录中的.exe
文件中的数据源别名。tnsnames.ora
的{{1}}文件中的数据源别名
(其中%TNS_ADMIN%
是环境变量设置)。%TNS_ADMIN%
的{{1}}文件中的数据源别名
(其中tnsnames.ora
是环境变量设置)。 在官方documentation(12c第4版(12.1.0.2.4))中,它说:
%ORACLE_HOME%\network\admin
部分%ORACLE_HOME%
部分中的数据源别名(即dataSources
,<oracle.manageddataaccess.client>
,machine.config
)。web.config
指定位置的user.config
文件中的数据源别名。位置可以包含绝对或相对目录路径。tnsnames.ora
位于同一目录中的TNS_ADMIN
文件中的数据源别名。但是,根据我使用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