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

提前说明:

该故障,我只是旁观者。

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

目录

项目场景

问题分析

优化建议


项目场景

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

报错复现很简单:

现场有一张重要性很高的业务表,因为隐私,我在这里给它赋名为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

sql 复制代码
alter table A rename to A_BAK_0422;

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

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

sql 复制代码
CREATE TABLE A AS SELECT * FROM A_BAK_0422

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

Ⅲ:创建新A表索引

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

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

Ⅳ:与旧表进行数据整合

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

Ⅴ:数据验证

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

优化建议

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

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

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

相关推荐
极限实验室29 分钟前
INFINI Easysearch 向量搜索实战(一)
数据库·搜索引擎
枫叶丹432 分钟前
数据库上 Kubernetes 后,KES-Operator 如何简化集群运维
数据库
蓝速科技1 小时前
数字人一体机芯片选型:RK3576 与 X86 场景化对比指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
IvorySQL1 小时前
AI 时代,PostgreSQL 正在发生什么变化?
数据库·人工智能·postgresql
隔窗听雨眠1 小时前
分析型数据库与事务型数据库:核心差异与选型决策深度解析
数据库
吠品2 小时前
纯HTML+ECharts构建交互式数据看板:实现思路与踩坑记录
java·服务器·数据库
dkbnull2 小时前
数据库性能调优详解
数据库·mysql
风哥2号2 小时前
数据库教程FGMT50‑PostgreSQL体系结构深入与源码解析
数据库·postgresql
ly76892 小时前
磁盘 I/O 延迟突增:用 iostat、blktrace 与火焰图定位到具体调用栈
java·linux·前端·数据库·iostat·磁盘 i/o·blktrace
倔强的石头_2 小时前
数据迁移工具KDMS如何生成量化评估报告
数据库