事由:
2020年8月 现场数据库开发工程师反馈说发现XX政务系统oracle生产数据库频繁自动关闭,启动之后不到半小时又关闭
,连续3次都是如此现象。需要技术支持。
故障排查:
通过对接向日葵登录到服务器后,第一时间查看Oracle告警日志,发现ORA-00600重大BUG 一级故障。
Alter 告警日志很明显的显示ORA-00600: internal error code, arguments: [ktbsdp2], [18446744073709551615], [], [], [], [], [], [], [], [], [], [],
然后Oracle Instance Jkqrh (pid - 14)
–Error 600 encountered while recoverylog transaction(5,5) on object 92887.
看到这个错误,我们可以看出 发生ORA-00600 BUG在对象 92887上,无法恢复性的致命错误事务位置(5,5).
由此可以看出这个对象92887对应的表发生了损坏的现象。
解决过程
经过检查后发现92887对象ID 对应的表lgl_comp_base_info。
select object_name,owner from dba_objects where object_id=’92887’ ; --LGL_COMP_BASE_INFO
对应方法:因表LGL_COMP_BASE_INFO损坏将此表进行重建,然后将数据插入。
数据库恢复正常,目前没有发现数据库不间断重启的现象。
后续会进行跟踪几天确保运行状况。
总结与建议
1、现场要定期检查热点表或者热块的SQL语句是否走了有效索引检查表生成数据的逻辑是否在sql写法上导致表没有走索引或者没有有效索引,
从而导致热点表IO 读写过大,当IO读写达到零界点的时候是可能导致表损坏的。如果热点SQL或热点表没有索引,这是大忌,一般情况需要创建索引,
会影响性能不说,严重时会导致数据库宕机或者损坏。
2、定期进行打补丁升级修复漏洞
导致表损坏还有一个原因是数据库存在BUG ORA-00600,导致这个是很多零零散散的问题,比如当IO达到零界点时候,不会自动调整IO性能,平衡负载。
当这个修复了,可能就发生这种问题的概率会大幅度的降低。
以上就是本次故障排查与修复的全过程。