有时候我得到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文件,该文件是在使用你的计算机。

为Windows: Filemon 从微软会告诉你什么文件被访问。

记得设置的过滤器,这样你不是不知所措的繁琐文件系统的业务。

Filter Dialog

添加: Filemon不工作的较新版本的Windows,所以你可能会有用 过程监视器.

在我的发展机我有三个不同版本的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,虽然。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top