oracle 异常管理员,Oracle TNS 错误:管理员旷日持久的战斗

TNS经常给IT管理员带来麻烦,而且很难定位。尤其是在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中国

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值