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

客户案例:Oracle异常恢复-bbed

原创 small_A 2021-06-07
4482

某客户Oracle数据库无法启动,请求数据救援。

客户环境:Oracle 12.2单机 CDB(只有一个PDB) Windows 2012 ,block 16k,非归档模式,无备份
故障背景:客户在4.16打算移动pdb数据文件(C盘–>D盘),没有停数据库就复制粘贴数据文件了,之后数据库操作rename命令后C盘数据文件部分丢失,控制文件中数据文件位置改成了D盘,启动数据库启动失败,后客户工程师多次尝试恢复并多次resetlogs均未成功。
故障描述:数据库CDB启动正常,PDB无法启动。

看到是Windows系统后背发凉,Windows系统使用起来不方便,本次处理故障走了很多弯路,下面一一记录分析。

1.首先看到客户现场环境先查了一下checkpoint并尝试重启。

图片.png
很显然重启失败,要不然也不会要求我们来恢复了。

2.考虑通过隐含参数拉起数据库

_allow_resetlogs_corruption=TRUE
启动数据库报错ORA_00600[kcvfdb_pdb_set_clean_scn]:
图片.png
重新分步启动后报错ORA-01209:
图片.png
恢复没成功,此处报错ORA_00600[kcvfdb_pdb_set_clean_scn]错误,这里走的第一个弯路就是直接忽略了,推进了scn。这里错误的意思是:PDB SCN必须改成513165573,现在是513165879。需要通过bbed修改pdb数据文件scn,noresetlogs重建控制文件启动,在修改数据文件的resetlogs SCN。这里忽略了直接按照现场处理故障思路进一步恢复。

3.重建控制文件

重建控制文件后启动报错ORA-01190:
图片.png
看到这个错误,想到的就是使用bbed吧 resetlogs scn改到与CDB一致

4.bbed修改resetlogs scn

数据文件不是很多总共7个,直接手改
需要注意:Windows系统块头是从2号块开始的
set dba 8,2
assign dba 8.2 kcvfh.kcvfhrlc=dba 1,2 kcvfh.kcvfhrlc
assign dba 8.2 kcvfh.kcvfhrls=dba 1,2 kcvfh.kcvfhrls
p kcvfh.kcvfhrlc
p kcvfh.kcvfhrls
sum apply

这个操作要在数据库完全静止下进行修改,然后重建resetlogs创建控制文件启动数据库
依然报错:ORA-01190

5.再次修改resetlogs报错

图片.png
查看pdbresetlogs_change#与CDB不一致,重新修改resetlogs scn,将error变成空。
重新启动数据库报错ORA-00600[kcbzib_kcrsds_1]:
图片.png

6.决定event推进scn

12.2系统event 21307096推进scn
参数文件设置 event=“21307096 trace name context forever, level 1” --level 1 推进100w
重建控制文件,然后resetlogs启动,依然同样报错
图片.png

7.决定修改checkpoint scn

这里就是就是另一个弯路,在Linux中checkpoint scn 的offset是 kscnbase 484 ,而在windows上是offset 140,多次修改140失败,其实这里应该修改offset 484,它才是scn。

图片.png
图片.png

修改完之后验证
图片.png
重建控制文件启动,数据库成功拉起
图片.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论