暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

一起误删seg$部分数据的恢复

一、背景

近期,杭州某医院,因某厂商dba运维数据库,原计划删除回滚段,误操作执行删除基表seg$语句,导致停机时间2天;

损坏环境说明:LINUX ORACLE 11.2.0.1 ,数据量3TB,无任何备份;

二、事件经过

维护该系统数据库的开发看到数据库空间满了,在网上搜了一篇文章,原计划是清理undo过大的问题,但是并未检查该语句的风险,误操作删掉了seg$部分数据,以下是他参考的链接:

https://blog.csdn.net/weixin_39560207/article/details/111494683

事后删除完成后又对该seg$做了大量的操作,还是没能恢复,又接着执行了关库重启的动作,关库关不掉,执行了shutdown abort,启动又起不来open直接报错了;由于是4月份,当时操作未截太多图,这个报错记不太清楚了;

紧接着用户在1天多时间里面联系了多个dba,均未解决,最后找到了我,花了半天时间研究将问题进行了处理:有两种解决办法:

1、后台回滚seg$的修改,将seg$所在的cluster table,循环高水位下的所有是7c的行头,然后找出来改为6c,再处理空间、索引块对应问题,直接开库。

2、单system起库测试,取消sysaux、undo等文件,然后将剩余除sysaux的文件挨着修改文件头的rdba、scn、resetlogs、文件状态等信息,再rename \recover\online,导出文件,重建db;

第一种最快,但是遗憾的是我检查了底层,有大量的块已经被覆盖了,恢复不了;所以只能选择重建库动作;下面是恢复完成后导出的图片:







三、总结和教训

数据库是所有业务系统运行的基础,如果缺乏专业dba运维和管理,在出现问题后恢复的代价是非常大的,希望各位注意此类情况发生;



文章转载自数据库技术加油站,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论