oracle客户端连接报错ora-kb88凯时官网登录

来自:网络
时间:2024-06-07
阅读:
免费资源网,https://freexyz.cn/

问题背景:

用户在客户端服务器通过sqlplus通过scan ip登陆访问数据库时,偶尔会出现连接报错ora-12545: connect failed because target host or object does not exist的情况。

oracle客户端连接报错ora-12545问题的解决办法

问题分析:

首先,登陆到连接有问题的客户端数据库上,通过sqlplus进行多次连接测试,的确会出现用户所说的ora-12545: connect failed because target host or object does not exist报错现象,此外,还发现登陆成功的节点显示的实例都是节点一实例servicedb1

oracle客户端连接报错ora-12545问题的解决办法

检查数据库的listener_scan监听配置,服务servicedb下动态注册了(ready)两个实例servicedb1以及servicedb2,没有其他的配置实例

oracle客户端连接报错ora-12545问题的解决办法

接下来,获取客户端连接报错的具体trace信息,需要在客户端的服务器的sqlnet.ora里面配置跟踪参数,对客户端的连接过程进行跟踪

trace_level_client=16
trace_directory_client=/tmp   
trace_unique_client=on
diag_adr_enabled =off   

配置完跟踪参数之后,再一次通过sqlplus连接scan ip访问数据库,每一次登陆都会在/tmp目录下面生成登陆的跟踪trc文件cli_xxxx.trc ,打开发生ora-12545:报错时的trc文件

从trc文件里面,我们看到了发生解析主机错误(hostname lookup failure!)的主机连接地址nsc2addr: (address=(protocol=tcp)(host=servicedb2)(port=1521))

oracle客户端连接报错ora-12545问题的解决办法

该地址是客户端在连接scan监听之后,返回给客户端的本地监听服务连接地址,因为scan 监听上的服务是数据库通过远程注册进去的(remote listener),客户端在连接scan监听上的服务之后,scan监听会再把负载较小节点所在的本地监听(local listener)地址返回给客户端,客户端再访问这个监听地址去连接数据库

从这个返回报错地址nsc2addr我们可以看到里面的地址信息host返回的是主机名而不是实际的ip地址,查看客户端的/etc/hosts配置,可以看到只配置了节点一的主机名ip地址解析,并没有配置节点二的主机名ip地址解析,也没有配置dns去解析这个主机名,从而导致一旦scan 监听分配到节点二给客户端时就会出现了ora-12545: connect failed because target host or object does not exist的报错,而分配到节点一客户端可以连接成功,因为hosts里面有节点一的主机名ip地址解析

oracle客户端连接报错ora-12545问题的解决办法

接下来继续分析scan监听返回的地址信息host为主机名的原因,查看数据库的scan监听的服务配置信息lsnrctl services listener_scan1

可以看到scan监听下的服务servicedb注册的实例servicedb1,servicedb2的远程服务(remote server)地址的连接信息都是直接的服务器主机名(host=servicedb1)以及(host=servicedb2),不是实际的ip地址信息,这也是为什么客户端接收到的地址nsc2addr里面不是ip地址信息的原因,因为数据库注册到scan监听服务的连接信息是主机名形式

oracle客户端连接报错ora-12545问题的解决办法

show parameter查看数据库的动态注册配置参数local listener,该参数表示实例节点所注册的本地监听地址,数据库远程注册到scan监听的服务会指向这个地址,我们可以看到由于参数local_listener的配置为空,因此数据库注册到scan监听服务的连接信息host就是默认的服务器主机名

oracle客户端连接报错ora-12545问题的解决办法

问题解决:

1 临时kb88凯时官网登录的解决方案,客户端的/etc/hosts里面配置数据库节点二主机的ip解析条目,需要注意的是,这个方式只是解决了该客户端的访问数据库的问题,如果其他客户端没有配置hosts或者dns去解析数据库服务器的主机名,依然会出现ora-12545: connect failed because target host or object does not exist的情况

2 完整kb88凯时官网登录的解决方案,数据库两个节点动态注册参数local_listener配置为两个节点的vip连接信息

节点一:(address = (protocol=tcp)(host=xxx.xxx.xxx.13)(port=1521)),

节点二:(address = (protocol=tcp)(host=xxx.xxx.xxx.74)(port=1521))

这样返回给客户端的是ip的形式而非主机名,全部客户端就可以不用配置hosts或者dns去解析数据库服务器的主机名

总结

免费资源网,https://freexyz.cn/
返回顶部
顶部
网站地图