Oracle TNS 错误:管理员旷日持久的战斗

日期: 2017-11-15 作者:Brian Peasland翻译:杨宏玉 来源:TechTarget中国 英文

TNSIT管理员带来,而且很定位。尤其是在Oracle中。下面如何避免些常见错误

在连接Oracle数据库的时候,我经常会遇到一些常见的TNS错误

话虽如此,下面我会解释用户的tnsname.ora配置文件与数据库侦听器配置的关系。一旦熟悉了这种关系,我们就可以很容易地修复常见的Oracle TNS错误。

众所周知,TNS是Transparent Network Substrate的缩写,Oracle将其称为其网络堆栈SQL*Net的一部分。当然,现在该网络堆栈被称为Oracle Net,但TNS的缩写仍然沿用至今。

在工作站上安装OracleClient软件后,一般来说,下一个操作是在ORACLE_HOME /network/ admin / tnsnames.ora配置文件新增一条记录。这个记录只是一个别名,它定义了连接到Oracle数据库的所有相关信息。下面是该条记录的一个例子:

ORCLDB =

(DESCRIPTION=

(ADDRESS_LIST =

(ADDRESS = (COMMUNITY = TCP)(PROTOCOL = TCP)

(Host = myhost01)(Port = 1521)))

(CONNECT_DATA = (SERVICE_NAME = orcl))

)

上面设置的别名是ORCLDB。这里我们可以设置任何我们想要的别名,这个别名是为你的应用服务的,Oracle数据库从不使用这个别名。应用程序会说“连接到ORCLDB”,Oracle客户端软件将查看tnsnames.ora文件,寻找关于该别名的细节。别名定义了使用的协议、传输控制协议(TCP)、数据库所在的主机(myhost)、侦听器端口(1521)和数据库的服务名称(orcl)。

现在,让我们看看数据库服务器的侦听器是如何配置的。在数据库服务器上,我发布了“lsnrctl服务”。

[oracle@myhost01 ~]$ lsnrctl services

LSNRCTL for Linux: Version 12.1.0.2.0 – Production on 18-JUL-2017 10:40:33

Copyright (c) 1991, 2014, Oracle.  All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

Services Summary…

Service “orcl.acme.com” has 1 instance(s).

Instance “orcl”, status READY, has 1 handler(s) for this service…

Handler(s):

“DEDICATED” established:10077 refused:0 state:ready

LOCAL SERVER

上面的例子中,我们可以看到,它为TCP配置了监听器。Host项是空的,表示其实际值是当前的数据库主机。端口为1521,服务名是orcl . acme.com。

当我们在tnsnames.ora配置文件中设置了有错误的别名,主机名、协议、端口和服务名称时,就会出现Oracle TNS错误。例如,我将使用SQL * Plus连接到orcldb别名定义的数据库。我收到了ora – 12514错误。(附注:本文中的错误也可以有TNS前缀。因此,您可能会看到TNS – 12514,也会出现ORA – 12514错误。前缀由发出错误的Oracle代码决定。

C:\>sqlplus peasland@orcldb

SQL*Plus: Release 11.2.0.4.0 Production on Tue Jul 18 10:43:30 2017

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Enter password:

ERROR:

ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

上面的错误显示,监听器不知道我们的服务名称。在tnsnames.ora文件中,服务名称被定义为orcl。正如我们在“ lsnrctl服务”输出中看到的那样,侦听器知道名为orcl . acme.com的服务。服务不匹配。侦听器有附加到服务的域名,以及tnsname.ora别名却没有。上述问题的解决方案很简单,在tnsnames.ora中添加域名。

(CONNECT_DATA = (SERVICE_NAME = orcl.acme.com))

在ORA- 12514错误中,Oracle客户端软件可以通过匹配的协议在指定端口上与侦听器联系,但是侦听器与最终的信息——服务名称不匹配。在下一个例子中,我们遇到另一个的问题。

C:\>sqlplus peasland@orcldb

SQL*Plus: Release 11.2.0.4.0 Production on Tue Jul 18 10:49:16 2017

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Enter password:

ERROR:

ORA-12545: Connect failed because target host or object does not exist

在这里,ORA – 12545告诉我们,侦听器连接失败。在这种情况下,是因为主机和/或端口不正确。我之所以遇到这个错误,是因为我的别名中有以下内容: (Host = myhsot)

主机名不正确。当我在别名中修改成正确主机名时,连接成功。如果遇到ORA- 12545错误(TNS – 12545),请检查主机和端口。

如果协议在别名定义中不正确,则可能会收到以下错误:

ORA- 12538: TNS: 不存在对应的协议适配器

解决办法是使用正确的协议,通常使用的协议是TCP。

总结一下,每当我收到Oracle TNS错误时,我都会去查看tnsnames.ora配置文件别名设置的细节。我会查看监听器的定义。如果我接收TNS(ORA)- 12514错误,我就会知道知道是服务名不匹配的问题。如果我接收TNS(ORA)- 12545错误,我知道主机/端口组合不正确。如果我接收TNS(ORA)- 12538错误,说明我配置的协议是无效的。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

Brian Peasland
Brian Peasland

Techtarget旗下Searchoracle网站的资深专家,有16年IT行业经验、计算机科学硕士、专攻数据库方向,曾担任系统管理员等职。此外,他还获Oracle 7.3、8和8i的OCP数据库管理员证书,目前为SGT Inc.公司首席DBA。

翻译

杨宏玉
杨宏玉

TechTarget特邀编辑。北京邮电大学计算机科学与技术专业硕士。熟悉软件开发流程,对系统管理,网络配置,数据库应用等方面有深入的理解和实践经验。现就职于IBM(中国)投资有限公司,从事IBM服务器相关软件的开发工作。业余时间喜欢游泳登山,爱健身,喜欢结交朋友。

相关推荐