Oracle-什么TNS名称文件,我使用?
-
08-06-2019 - |
题
有时候我得到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:\>
这应该表现出什么样的文件。用坐在Oracle 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文件,该文件是在使用你的计算机。
在我的发展机我有三个不同版本的Oracle客户软件。我管理的 tnsnames.ora
文件在他们中的一个。在其他两个,我已在 tnsnames.ora
文件:
ifile=path_to_tnsnames.ora_file/tnsnames.ora
这样,如果由于某种原因错误的 tnsnames.ora
文件使用一个客户,它将始终端在最新版本。
Codeslave要求"不应该永远是"$ORACLE_家/网络/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文件。(注:窗户为中心的答案)
默认情况下,tnsnames.奥拉是位于美元ORACLE_HOME/网络/管理目录上的UNIX操作系统和在ORACLE_HOME\网络\管理上的目录Windows操作系统。tnsnames.ora也可以存在下列地点:
该目录中指定的入tns_admin环境变量(或注册值)
在UNIX操作系统、全球结构的目录。例如,在Solaris操作系统,该目录/var/opt/oracle
如果你有多ORACLE_HOMES,知道哪一个都在使用,作为位置的tnsnames.ora文件可以从一个ORACLE_HOME。
为人提到的TWO_TASK环境变量,用于设置一个默认数据库服务名称,以连接(这可能是一个数据库,另一个服务器)。服务名称设置TWO_TASK,然后抬头看的tnsnames.ora文件时连接。
它不应该永远是"$ORACLE_家/网络/admin/tnsnames.ora"?然后你可以做"echo$oracle_家"或*nix等同的。
@皮特Holberton 你是完全正确的。这倒提醒了我,还有另一只猴子扳手的作品叫TWO_任务
根据 http://www.orafaq.com/wiki/TNS_ADMIN
入tns_admin是一个环境变量,点目录的SQL*网络配置的文件(如sqlnet.ora和tnsnames.ora)的位置。
strace sqlplus -L scott/tiger@orcl
可以帮助找到 .tnsnames.ora
文件上 /home/oracle
查找文件的需要,而不是的 $ORACLE_HOME/network/admin/tnsnames.ora
文件。谢谢你的发布。
最简单的方式可能是来检查的 路径 环境可变的进程连接的数据库。最有可能的tnsnames.ora文件是在 第一Oracle bin directory在路径..\网络\管理。入tns_admin环境变量或价值,或在注册表(针对当前Oracle家)可以替代这一点。
使用filemon样,建议由其他人也会做的伎俩。
不直接回答你的问题,但我已经相当沮丧自己的努力找到和更新所有tnsnames文件,作为我有几个oracle安装:客户,毕工具,OWB,等等,每一个都有自己的oracle家。我创造了一种实用工具称为TNSNamesSync,将更新所有tnsnames在所有的oracle的家园。这下麻省理工学院许可证,免费使用在这里 https://github.com/artybug/TNSNamesSync/releases
医师们在这里:https://github.com/artchik/TNSNamesSync/blob/master/README.md
这是仅适用于Windows,虽然。