昨天,一同事咨询,他给rac集群的一个节点打补丁,重启之后数据库无法启动,乍看情况像是磁盘组无法挂载报错:ORA17503,仔细排查发现是db_files参数出现变更导致数据库启动报错ORA01174而无法启动。
1、问题描述
oracle rac 11.2.0.4 打补丁后重启,数据库实例无法启动,启动报错data磁盘组没有挂载如下图所示:
2、问题分析
集群节点racdb1的grid执行crsctl stat res -t -init ,检查集群资源进程状态,发现正常:
集群节点racdb1的grid执行crsctl stat res -t ,检查集群资源状态,发现racdb1数据库实例未挂载:
查看节点racdb1实例的启动状态为started:
oracle用户sys登陆数据库执行alter database mount报错ORA000205:
检查节点racdb1实例的告警日志,告警日志提示与1中提到的报错一致:磁盘组data未挂载
节点racdb1的grid用户登录asm管理控制台,检查磁盘组状态,发现data磁盘组状态正常:
节点racdb1的grid用户在asm控制台检查控制文件,发现能够看到控制文件:
到此可以排除ASM磁盘组未挂载导致racdb1实例无法mount的。
节点racdb1的oracle用户首先执行shutdown abort关闭当前实例:
节点racdb1的grid用户使用srvctl工具启动实例报错ORA01174:
到此,节点racdb1实例racdb1无法启动原因定位到:可能是数据库打补丁,补丁集修改了racdb1实例的数据库参数DB_FILES参数,数据库重启后集群检查发现2个节点实例的DB_FILES参数不一致导致节点racdb1实例racdb1无法启动。
3、问题处理
节点racdb1的oracle用户登录数据库,将实例关闭,然后启动到nomount状态:
节点racdb1实例racdb1修改DB_FILES参数为500:
因为DB_FILES为数据库静态参数需要重启,关闭节点racdb1实例racdb1后,将数据库启动到open状态:
后记:事后检查2个节点的告警日志,除了节点racdb1的告警日志,最后手工修改的DB_FILES参数将其设置为500,
未发现其他人为手工命令将其修改为200,从而确定是打补丁引起的。
到此问题解决!