一、背景
近期,杭州某医院,因某厂商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运维和管理,在出现问题后恢复的代价是非常大的,希望各位注意此类情况发生;




