一、背景
问题描述: 接朋友求助,有部署的已经运行的oracle集群,通过PL/SQL连接不上。报错如下:
背景介绍:集群采用RAC架构,两台服务器部署A和B。版本是11g。操作系统是HP-Unix。
技术人员对系统Oracle账号的密码,进行修改,并对机器重启后无法访问地址。
二、问题排查
1. 首先看服务是否都正常
a. 先看单节点服务是否正常: srvctl 这个命令
srvctl status database -d 数据库名 test 这个命令可以看到集群中的数据库test的节点状态。 如果有offline ,或其他异常状态。请修正。
srvctl status instance -d test -i 实例名 这个命令查看集群中单节点的实例状态,如果发现实例运行异常的,也是要进行修复。
经过排查都没有问题。
附上相关其他命令:
查询所有实例的状态
srvctl status database -d racdb
查询单节点实例的状态
srvctl status instance -d racdb -i racdb1
关闭所有节点的实例
srvctl stop database -d racdb
关闭单节点的实例
srvctl stop instance -d racdb -i racdb2
查看数据库配置
srvctl config database -d racdb
使用srvctl资源控制命令:
srvctl config network
srvctl config vip
srvctl status vip
srvctl config scan
srvctl status scan
srvctl config listener
srvctl status listener
srvctl start/stop listener
srvctl config scan_listener
srvctl status scan_listener
srvctl config asm
srvctl status asm
srvctl status diskgroup -g data
srvctl remove database -d orcl
srvctl config nodeapps -a 查看集群VIP
oifcfg getif 查看集群网卡
oifcfg delif 删除集群网卡
oifcfg setif 重新配置集群网卡
b.集群资源管理的命令crsctl
一般情况,使用命令crsctl status res -t 查看集群中所有资源状态。
附上其他相关命令:
守护进程状态:
crsctl status res -t -init
启动/关闭 集群服务:
crsctl start/stop crs
独占模式启动集群:
crsctl start crs -excl -nocrs
检查集群服务状态:
crsctl check crs
集群自启动:
crsctl enable/disable crs
关闭启动指定资源:
crsctl start/stop res res_name //有的无法单独关闭,因为存在资源依赖关系
查看资源属性:
crsctl status res res_name -f
修改资源属性 :
crsctl modify resource res_name -attr
从12c开始crsctl start/stop resource 与 crsctl modify resource 不再支持
但是可以添加-unsupported使用
crsctl modify resource res_name -attr <> -unsupported
crsctl start/stop res res_name -unsupported
crsctl start custer 可以对集群的所有节点资源进行操作。(前提是目标节点OHASD进程必须已经启动)
crsctl start crs 对当前节点的资源进行操作,包含OHAS。
c. 检查服务器oracle监听是否启动:lsnrctl status 也是正常。
2. 检查网络
Oracle集群为了防止ip漂移的问题,一般都采用Virtual IP +ScanIP的方式部署。
对两个节点的scan状态和配置进行检查。 没有发现任何问题。
srvctl status scan
ip与虚拟IP之间的对应关系如下:
节点名 | ip地址 | virtual IP |
A节点 | 192.168.11.117 | 192.168.11.111 |
B节点 | 192.168.11.118 | 192.168.11.112 |
scanIp | 192.168.11.119 |
PL/SQL通过192.168.11.119 :1521进行连接到集群的。也就是192.168.11.119就是集群对外的地址。
a. 现在发现单独连接192.168.11.117 和 192.168.11.118都是没有问题的。
b. 采用slqplus 从117 ,118连接到119也是没有问题。
c.从主机C ping连接到117,118 ,119正常。
d.从主机C telenet 连接到119:1521 无响应,看起来就是超时。
e. 从主机C sqlplus 连接到119:1521 超时连接不上。
f. 从主机C PL/SQL连接到119.1521超时连接不上。
g. 从主机C ping 111,112不通!!!
三、结论
最终发现是网络问题: g. 从主机C ping 111,112不通。
起初以为,C--->119 119会自动路由转发至111,112 。所以111,112通不通无所谓,119通就行。
后来怀疑Scan这个东西并不是采用转发的方式,还是需要C与111,112建立连接。立即要求网络部门排查ip情况。 确实发现出故障的时间段,有两个ip被禁用了,111,112!!!
丢,网络安全演练,来源不明ip被禁用!!!
希望给大家提供一点思路: 记得保持scanip +所有 virtualIp可以被主机C访问!