有时我得到Oracle连接问题,因为我无法弄清楚这tnsnames.ora文件我的数据库客户端使用。
什么是想出解决办法的最好办法? ++幸福各种平台的解决方案。
有时我得到Oracle连接问题,因为我无法弄清楚这tnsnames.ora文件我的数据库客户端使用。
什么是想出解决办法的最好办法? ++幸福各种平台的解决方案。
Oracle提供了一个工具,叫做tnsping
:
R:\>tnsping someconnection
TNS Ping Utility for 32-bit Windows: Version 9.0.1.3.1 - Production on 27-AUG-20
08 10:38:07
Copyright (c) 1997 Oracle Corporation. All rights reserved.
Used parameter files:
C:\Oracle92\network\ADMIN\sqlnet.ora
C:\Oracle92\network\ADMIN\tnsnames.ora
TNS-03505: Failed to resolve name
R:\>
R:\>tnsping entpr01
TNS Ping Utility for 32-bit Windows: Version 9.0.1.3.1 - Production on 27-AUG-20
08 10:39:22
Copyright (c) 1997 Oracle Corporation. All rights reserved.
Used parameter files:
C:\Oracle92\network\ADMIN\sqlnet.ora
C:\Oracle92\network\ADMIN\tnsnames.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = **)
(PROTOCOL = TCP) (Host = ****) (Port = 1521))) (CONNECT_DATA = (SID = ENTPR0
1)))
OK (40 msec)
R:\>
这应该告诉你正在使用的文件。 该实用程序坐落在甲骨文bin
目录。
对于Linux:
$ strace sqlplus -L scott/tiger@orcl 2>&1| grep -i 'open.*tnsnames.ora'
说明是这样的:
open("/opt/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora",O_RDONLY)=7
更改为
$ strace sqlplus -L scott/tiger@orcl 2>&1| grep -i 'tnsnames.ora'
将显示所有被失败的文件路径。
还有一种情况TNS的位置存储在另一个地方:如果你使用的是Windows,打开regedit
,然后导航到My HKEY Local Machine/Software/ORACLE/KEY_OraClient10_home1
其中KEY_OraClient10_home1
是你的Oracle主。 如果有一个字符串项称为TNS_ADMIN
,那项的值将指向甲骨文您的计算机上使用TNS文件。
对于Windows: Filemon的 Sysinternals公司会告诉你正在访问哪些文件。
记住,所以你不被健谈的文件系统,交通不堪重负要设置过滤器。
补充:Filemon的不与较新的Windows版本,所以你可能需要使用进程监视器 。
在我的机器,我有三个不同版本的Oracle客户端软件。 我管理tnsnames.ora
在其中的一个文件。 在另外两个,我在已经进入tnsnames.ora
文件:
ifile=path_to_tnsnames.ora_file/tnsnames.ora
这样,如果由于某种原因,错误tnsnames.ora
文件使用一个客户端,它总是在上最新版本结束。
Codeslave问:“难道不应该永远是‘$ ORACLE_ HOME /网络/ admin / tnsnames.ora中’答案是否定的,它不是考虑用tnsping在同一台机器上的这两个调用?:
C:\Documents and Settings\me>D:\Oracle\10.2.0_DB\BIN\tnsping orcl
TNS Ping Utility for 32-bit Windows: Version 10.2.0.4.0 - Production on 09-OCT-2
008 14:30:12
Copyright (c) 1997, 2007, Oracle. All rights reserved.
Used parameter files:
D:\Oracle\10.2.0_DB\network\admin\sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = xxxx
)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL)))
OK (40 msec)
C:\Documents and Settings\me>tnsping orcl
TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 09-OCT-2
008 14:30:21
Copyright (c) 1997, 2005, Oracle. All rights reserved.
Used parameter files:
D:\oracle\10.2.0_Client\network\admin\sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = XXXX)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))
OK (20 msec)
C:\Documents and Settings\me>
请注意两个不同的参数文件的位置,依赖于它用tnsping可执行文件正在运行(也许在那里它被从运行)。 对于基于TNSNAMES Oracle的网络,使用TNS_ADMIN变量是确保你得到一致的tnsnames.ora文件的唯一途径。 (注:Windows为中心的答案)
默认情况下,tnsnames.ora中位于在UNIX操作系统上的$ ORACLE_HOME / network / admin目录,并在Windows操作系统上的ORACLE_HOME \网络\ admin目录。 tnsnames.ora中也可以存储在以下位置:
由TNS_ADMIN环境变量(或注册表值)指定的目录
在UNIX操作系统中,全球配置目录。 例如,在Solaris操作系统,此目录为/ var /选择/甲骨文
如果你有有多个ORACLE_HOME,要知道你正在使用其中一个,作为tnsnames.ora文件的位置,可以改变从一个ORACLE_HOME下。
对于谁提到TWO_TASK环境变量的人,用来设置默认数据库服务的名称来连接(这可能是另一台服务器上的数据库)。 你设置TWO_TASK来是那么的服务名称查找在tnsnames.ora文件中当您连接。
难道不应该永远是 “$ ORACLE_ HOME /网络/ admin / tnsnames.ora中”? 然后,你可以做“回声$ oracle_家”或* nix的等价物。
@Pete Holberton你是完全正确的。 这让我想起,有一个名为TWO_ TASK作品另一只猴子扳手
据http://www.orafaq.com/wiki/TNS_ADMIN
TNS_ADMIN是一个环境变量指向在SQL * Net配置文件(如SQLNET.ORA和tnsnames.ora)所在的目录。
strace sqlplus -L scott/tiger@orcl
有助于找到.tnsnames.ora
对文件/home/oracle
找到需要的不是文件$ORACLE_HOME/network/admin/tnsnames.ora
的文件。 感谢您的帖子。
最简单的方法可能是检查是否连接到数据库的过程的PATH环境变量。 最有可能的tnsnames.ora文件是在路径 .. \网络\ ADMIN 第一个Oracle bin目录 。 TNS_ADMIN环境变量或注册表(当前Oracle主)值可以重写此。
使用Filemon的像其他人建议也将这样的伎俩。
没有直接回答你的问题,但我一直很沮丧我试图找到并更新所有TNSNAMES文件,因为我有几个oracle的安装:客户端,BI工具,OWB,等等,每一个都有自己的预言家。 我结束了创建一个名为TNSNamesSync实用工具,将更新所有的TNSNAMES的所有Oracle的家园。 这是在MIT许可下,自由在这里使用https://github.com/artybug/TNSNamesSync/releases
该文档是在这里: https://github.com/artchik/TNSNamesSync/blob/master/README.md
这仅适用于Windows,虽然。