Oracle故障处理:ORA-00600错误处理思路

2024-07-11 1692阅读

提前说明:

该故障,我只是旁观者。

但处理该故障的DBA工程师,思路很清晰,我非常受教!在此也将经验分享。

目录

项目场景

问题分析

优化建议


项目场景

在某项目数据库运维群,有现场同事发了张报错截图如下。

Oracle故障处理:ORA-00600错误处理思路

报错复现很简单:

现场有一张重要性很高的业务表,因为隐私,我在这里给它赋名为A表。现场对A表做INSERT、UPDATE、DELETE等操作时,全部报错,报错提示就是上面的ORA-00600。

也就是说现在在A表上发生任何事务,都会报错ORA-00600。

问题分析

ORA-00600是Oracle数据库内部错误。这个错误通常会伴随一个错误代码(例如:ORA-00600: internal error code, arguments: [1234], [a], [b], [c], ...)。上图即是例子。它没有一个具体的解决方案。可以登陆 my oracle support 查询比对。

但对于实际生产来讲,等不及问题分析查清解决了。所以采取了如下思路:

Ⅰ:将A表重命名为 A_BAK_0422

alter table A rename to A_BAK_0422;

Ⅱ:建一张空表,表名为 A

考虑到 A 表本身数据量庞大,有125G,所以不适合使用如下代码,效率太低。

CREATE TABLE A AS SELECT * FROM A_BAK_0422

所以只能建空表 A, 获取原来的建表语句,直接建表。

Ⅲ:创建新A表索引

获取旧A表的索引信息,给新A表也创建对应的索引。

此时新的A表上发生事务是没有问题的,业务此时其实已经可以恢复正常了。

Ⅳ:与旧表进行数据整合

现在新A表虽然已正常,业务也可以正常展开。但是A表毕竟还是缺失原有的数据,需要将旧A表的数据进行整合。此时整合的方式就有很多选择,可以写PLSQL,也可以使用kettle这种ETL工具都可以快速的进行整合。

Ⅴ:数据验证

整合完数据后,还是需要应用系统的工程人员进行数据验证,看是否正常。

优化建议

其实当时我有想过立即切换到容灾库,但是被领导否决了。因为该错误属于是逻辑错误,而项目上的RPO接近0,数据在实时进行同步,在发现报错时,逻辑错误数据已经同步到容灾备库中,即使切换到容灾备库,错误记录依然存在,数据库依然无法正常对外提供服务。需要手动处理掉数据库中的逻辑错误,才能修复数据库。

后来和处理该问题的前辈请教沟通,前辈讲的优化建议非常有用:

对容灾数据库定时做快照,在发生逻辑错误时,可以将容灾数据库回退到逻辑错误发生前,然后切换容灾数据库。

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]