Oracle-我正在使用什么TNS名称文件?
有时我会遇到Oracle连接问题,因为我不知道数据库客户端正在使用哪个tnsnames.ora文件。
解决这个问题的最佳方法是什么? ++对各种平台解决方案感到满意。
解决方案
回答
对于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'
将显示所有失败的文件路径。
回答
它不应该一直是" $ ORACLE_ HOME / network / admin / tnsnames.ora"吗?
然后,我们可以执行" echo $ oracle_ home"或者* nix等效项。
@皮特·霍尔伯顿(Pete Holberton)
你是完全正确的。这使我想起,作品中还有另一个活动扳手,叫做TWO_ TASK
根据http://www.orafaq.com/wiki/TNS_ADMIN
TNS_ADMIN是一个环境变量,它指向SQL * Net配置文件(如sqlnet.ora和tnsnames.ora)所在的目录。
回答
对于Windows:来自SysInternals的Filemon将向我们显示正在访问哪些文件。
切记要设置过滤器,以免被文件系统的混乱情况淹没。
补充:Filemon不适用于较新的Windows版本,因此我们可能必须使用Process Monitor。
回答
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:\>
这应该显示我们正在使用的文件。该实用程序位于Oraclebin
目录中。
回答
TNS位置还有另一个存储位置:如果使用Windows,则打开regedit并导航到My HKEY Local Machine / Software / ORACLE / KEY_OraClient10_home1,其中KEY_OraClient10_home1是Oracle主目录。如果有一个名为" TNS_ADMIN"的字符串条目,则该条目的值将指向Oracle在计算机上使用的TNS文件。
回答
默认情况下,tnsnames.ora位于UNIX操作系统上的$ ORACLE_HOME / network / admin目录中,以及Windows操作系统上的ORACLE_HOME \ network \ admin目录中。 tnsnames.ora也可以存储在以下位置:
由TNS_ADMIN环境变量(或者注册表值)指定的目录
在UNIX操作系统上,是全局配置目录。例如,在Solaris操作系统上,此目录为/ var / opt / oracle
如果我们有多个ORACLE_HOMES,请注意使用的是哪个,因为tnsnames.ora文件的位置可能从一个ORACLE_HOME到另一个ORACLE_HOME。
对于提到TWO_TASK环境变量的人,该变量用于设置要连接的默认数据库服务名称(可以是另一台服务器上的数据库)。连接时,将在tnsnames.ora文件中查找将TWO_TASK设置为的服务名称。
回答
Codeslave询问"是否总是" $ ORACLE_ HOME / network / admin / tnsnames.ora"?答案是否定的,不是。请考虑同一台计算机上tnsping的这两个调用:
C:\Documents and Settings\me>D:\Oracle.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.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.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为中心的答案)
回答
在我的开发机器上,我有三个不同版本的Oracle客户端软件。我在其中之一中管理" tnsnames.ora"文件。在另外两个中,我输入了tnsnames.ora
文件:
ifile=path_to_tnsnames.ora_file/tnsnames.ora
这样,如果由于某种原因客户端使用了错误的tnsnames.ora
文件,它将始终以最新版本结束。
回答
最简单的方法可能是检查连接到数据库的进程的PATH环境变量。 tnsnames.ora文件很可能位于路径.. \ network \ admin中的第一个Oracle bin目录中。 TNS_ADMIN环境变量或者注册表中的值(对于当前的Oracle主目录)可能会覆盖它。
像其他人建议的那样使用filemon也可以解决问题。