数据恢复:一则强行关库引发的蝴蝶效应

李真旭(Roger)

ACOUG 核心专家,Oracle ACE,云和恩墨技术专家

这是某网友的维护的一套数据库,据说是正常重启之后就无法启动数据库了。那么我们先来看看日志是什么样的:

我们可以看到,节点1在9:48:52秒被强行终止重启了实例。而且我们还可以看出该节点从9:42开始就出现ORA-27090 错误。而该错误通常跟操作系统有关系,通过后面的Linux-x86_64 Error: 4: Interrupted system call 错误也验证了这一点。

这里我们无论是看节点1还是节点2的alert log日志都会发现,由于smon进程在进程事务恢复时失败之后,导致数据库实例最终宕掉。宕掉之后就再也无法正常启动了。很明显这是强行关库之后带来的蝴蝶效应。

这里我们来看看其中节点2的这个ORA-00600 [16559]是什么含义?

从解释来看,这是Oracle 数据字典表tab$出现了不一致的情况。比较郁闷的是,客户的dataguard也坏掉了,也是一样的错误。那么看来只能进行恢复了。这里首先要明白,节点1的ora-00600 [16703]本质上来讲跟ora-00600 [16559]是一回事。

从具体的错误来看,Oracle在open时,进行bootstrap初始化的过程就失败了,因此报错ORA-00704: bootstrap process failure.处理思路也很简单,我们首先通过10046 trace跟踪open的过程,来看看Oracle 在bootstrap初始化的时候在进行什么操作时报错的?

从上面的错误不难看出就是在访问tab$ 的时候报错的,而且是访问的obj#=20的这个对象。那么这个对象是什么呢?

根据我们的查询以及对ORA-00600 [16703],[1403],[20] 这个错误的理解,那么我这里可以大致判断这个错误后的几个数字的含义:
16703: 错误代码,表示数据字典基表存在不一致

1403: 表示数据没找到或者不匹配,即not data found.

20: 表示访问的对象号,即object_id.

同时我们从前面的10046 trace跟踪来看,报错的SQL语句访问了3个block,然后报错,分别是file 1 block 50,51,26。

这我们分别dump 上面的3个block发现其中block 51,26 的dump 内容如下:

block 51

block 26

看到这里,我就想是否可以通过bbed先把这2个block 给修复了,看看是否能够起来。如下是简单的修复过程:

对于51号block 由于是Index 修改非常简单,这里不多说。26号block 是cluster table,这个相对复杂的多。首先提交事务、修改lock flag之后verify还是报错,如下:

这里继续修改聚簇对应的kdbr信息(这里以其中一个kdbr为例):

我们经过几处简单修改之后,再次verify校验已经不再报错了;不过再次open数据库时,发现报另外一个错误了:

从错误来看,bootstrap的初始化过程仍然有问题。通过10046 trace跟踪发现还是那几个block。回想前面这个block的dump时,看到的几行操作是delete,如下:

tl: 4 fb: -CHDFL– lb: 0×2  cc: 0 cki: 0

那么我们这里试做将这几个被删除的操作进行还原是否ok 呢? 也就是用bbed来恢复这7个delete操作。

由于是cluster table 的block,操作相对麻烦一些。不过我尝试修改之后,最后发现错误仍然一样。其中[kdoirp-3]是什么含义呢? 我们来看下Oracle 文档的描述:

很明显,这表示insert row piece。 看来我们单纯的修改这2个block 并不能绕过这个问题。 实际上后面我dump分析发现又涉及到_next_object,又将问题复杂化了。

虽然我相信多折腾几次可以解决这个问题。但是操作确实麻烦,费劲。不过此时通过之前的备份restore出来的system文件已经ok了。这里我用bbed 将涉及到的几个block 进行替换,最后再修改resetlogs信息,重建控制文件之后,进行recover。非常顺利的打开了数据库。

最后检查alert log 还涉及到smon 回滚某个事务失败。那么如何完美处理呢?
首先dump undo header,然后获取该事务涉及的操作对象,然后使用参数屏蔽回滚段后,将undo表空间重建即可。
针对涉及到的对象,由于破坏了事务的完整性,那么建议对表进行分析,其中Index进行重建。

----the end

本文出自数据和云公众号,原文链接

时间: 2024-10-26 20:57:09

数据恢复:一则强行关库引发的蝴蝶效应的相关文章

我明明 immediate 关库的,怎么就打不开了?!

五一放假期间,某客户的数据库出现故障,据说对方找了一些工程师折腾了一天,都无法将数据库open,其中参考了网络上的很多文章,也使用了一系列隐含参数,均无法将数据库打开.这里我简单的与大家分享一下这个case. 首先我介绍一下整个case的背景,客户在4月30号凌晨通过shutdown immediate停库维护后,启动数据库无法报错,此时发现数据库无法open,期间尝试了各种数据库手段,均失败告终. 我们先来看看相关日志,如下是数据库停库的日志: 我们可以看出,这个数据库确实是以shutdown

DNS故障追踪 由24岁站长引发的蝴蝶效应  

中介交易 SEO诊断 淘宝客 云主机 技术大厅 24岁的免费域名服务商DNSPod站长吴洪声在2天2夜没有合眼后,决定主动约见媒体,就5月19日晚间多省大规模网络故障事件做出说明.在吴洪声看来,这次由DNSPod遭到恶意攻击引起的事故是一场蝴蝶效应:他的DNSPod是蝴蝶扇了下翅膀,暴风影音就成为了太平洋上的风暴. 18日晚:蝴蝶的翅膀 吴洪声直到20号下午才意识到,19日晚上大规模的网络故障与自己的DNSPod有关.此前的一天里,他一直忙于处理网络故障:18日晚上22点左右,DNSPod设在江

DNS规模故障追踪:由24岁站长引发的蝴蝶效应

5月22日凌晨消息,24岁的免费域名服务商DNSPod站长吴洪声在2天2夜没有合眼后,决定主动约见媒体,就5月19日晚间多省大规模网络故障事件做出说明.在吴洪声看来,这次由DNSPod遭到恶意攻击引起的事故是一场蝴蝶效应:他的DNSPod是蝴蝶扇了下翅膀,暴风影音就成为了太平洋上的风暴. 18日晚:蝴蝶的翅膀 吴洪声直到20号下午才意识到,19日晚上大规模的网络故障与自己的DNSPod有关.此前的一天里,他一直忙于处理网络故障:18日晚上22点左右,DNSPod设在江苏常州的主站及多个DNS服务

oracle数据库重启之后无法open的恢复案例

这是某网友的维护的一套数据库,据说是正常重启之后就无法启动数据库了.那么我们先来看看日志是什么样的: Errors in file /u01/app/oracle/admin/orcl/bdump/orcl1_p012_18165.trc: ORA-27090: Message 27090 not found;  product=RDBMS; facility=ORA Linux-x86_64 Error: 4: Interrupted system call Additional inform

Oracle中DG备库报错ORA-00313、00312、27037

DATAGUARD配置如下: PROD为主库,SBDB为备库 日志组1-3组为redolog file,4-6组为standby log 在创建standby log后主库关库,使用冷备tar包将数据传输到备库进行的恢复. DG配置完成之后,启动备库之后,备库alert日志报错如下: Errors in file /u01/app/oracle/admin/SBDB/udump/sbdb_rfs_14903.trc: ORA-00313: open failed for members of l

iPad当早教机引发质疑

杭州长江实验小学前天招收一年级新生,现场增加了测视力这个环节,不测不知道,一测吓一跳:今年近700名前来报名的孩子中,双眼视力能达到5.2的不足50人,大部分孩子的视力在4.8左右.而记者昨天对长江实验小学一(2)班的学生做了一个小调查,发现有18个学生家里有iPad,他们平时都用来玩游戏. 是喜是忧? 6岁男孩成了"数码控" 6岁男孩小昕,用妈妈的话形容是十足的"数码控".小时候,妈妈就拿着手机放<摇篮曲>给他听,每次他一哭,把手机丢给他玩,他就安静了

大数据时代的“蝴蝶效应”

"大数据"是时下最炙手可热的IT词汇,但如今却被泼了一盆冷水:一次全国范围的数据泄密,竟诱发了一桩婚事告吹,可谓是"大泄露"引发的"蝴蝶效应". 虽然相关网站已无法访问,相关数据库下载也已失效,但"查开房"事件暴露出的信息安全问题仍不容小觑.有业内人士提醒,数据库包含的海量身份证.住址.电话等信息是不法分子眼中的 "肥肉",更大的"蝴蝶效应"-各类推销.诈骗活动将迎来"井喷&q

星干线培训影视专才惹关注引发蜂拥报名效应

星干线发布会合影 腾讯娱乐讯 近期,新成立的北京星干线影视专才培训基地倍受关注.这是国内现今唯一一家由中广协电视剧导演工作委员会指定的正规影视专才培训基地.在上周成功的举办成立仪式后,引发巨大蝴蝶效应,各方人马蜂拥报名. 北京星干线影视专才培训基地旨在向有志于从事影视表演.导演.编剧.制作.特技及影视服务等工作的影视新人和爱好者提供简明.直接的实战型技能培训.毕业人才可直接与中广协电视剧导演工作委员会中300多位导演合作,以解决导演们在多年的拍戏中一直遇到的从业人员素质不高.不够专业.不能准确理

使用xtrabackup对Mysql备份恢复

备份原理:XtraBackup基于InnoDB的crash-recovery功能.它会复制innodb的data file,由于不锁表,复制出来的数据是不一致的,在恢复的时候使用crash-recovery,使得数据恢复一致.InnoDB维护了一个redo log,又称为transaction log,事务日志,它包含了innodb数据的所有改动情况.XtraBackup在备份的时候, 一页一页地复制innodb的数据,而且不锁定表,与此同时,XtraBackup还有另外一个线程监视着trans