Oracle 11g rac rman恢复数据库(ORA-00600引起)
的有关信息介绍如下:Oracle 11g rac rman恢复数据库,由ORA-00600造成!
rac架构介绍:
使用NFS提供共享存储(集群信息、数据文件、归档、备份都存放在共享文件上)
故障原因:
存储宕机,共享文件无法使用,导致数据库宕机(集群和数据库)。重启存储,然后重启2台数据库服务器之后,集群软件正常启动,但是数据库无法启动,使用srvctl start database -d orcl 报ORA-00600错误,尝试srvctl start database -d orcl -o mount 能够正常启动到mount状态。然后尝试alter database open或者recover database或者alter database open resetlogs 都会报错ORA-00600,查看相关trace文件没有详细报错信息!只能通过rman方法将数据库还原并恢复!
数据库备份信息:
1:全备
2:归档备份
3:备份规则
4:故障放生日期及最新全备
故障解决:
1:参数文件
2:还原控制文件
3:还原数据文件
4:catalog 归档备份集
5:恢复数据库
6:alter database open resetlogs
注意:alert日志中的分日志中均没有详细报错日志信息
全备策略
先备份数据文件-->切换归档-->备份归档日志-->备份控制文件
归档备份策略
备份归档日志-->备份控制文件
备份规则
周一全备,其他时间都是归档备份,控制文件备份信息保存15天
故障放生日期及最新全备
故障发生时间:2015年3月7日
全备最新时间:2015年3月2日
三月3日到3月7日归档备份正常
参数文件
由于数据库集群信息正常启动,且可以确定数据信息都是正常的,所以无需重新生成参数文件,参数文件还是使用原始参数文件!
注意:因为集群软件正常运行,所以可以启动数据库到nomount状态,在节点1执行 srvctl start database -d orcl -o nomount 可以发现两节点数据库状态为started!当然也可以在两节点分别执行startup nomount将两个节点实例启动到nomount状态!
还原控制文件
由于全备备份集最新是在2015年3月2日,所以需要还原控制文件,还原控制文件的备份集采用3月2日控制文件备份集,还原之后启动节点1的数据库到mount状态,可以发现在节点2实例仍处于nomount状态,也需要手动在节点2将数据库实例启动到nomount状态。启动之后通过查看集群信息,可以发现db在节点1上。此步骤同时发现原始控制文件中只有control01.ctl,还原之后生成两份control01.ctl和control02.ctl
到此步骤:两个节点都处于mount状态
还原数据文件
此时发现存放数据文件的目录有原始数据文件,此时需要明白restore不仅有还原数据文件功能还有修复数据文件功能!所以不需要删除原始数据文件,直接进行还原即可!
catalog 归档备份集
在节点1还原数据文件之后,通过crosscheck backupset 发现备份集信息只到2015年3月2日,但是还需要恢复3月2号以后的数据。由于3月2号之后的归档备份集太多,如果采用catalog一个一个弄时间有点慢(远程主机没有安装UE,不能进行列模式复制),所以想到能不能catalog3月7日的一份控制文件:
catalog backuppiece '3月7日控制文件备份集';经过crosscheck 发现控制文件备份信息的更新到3月7日,但是进行recover database的时候发现总是报错,没有改归档。最后又将控制文件的备份信息还原到3月2日:catalog backuppiece '3月2日控制文件备份集';然后对3月3日-7日的归档备份进行catalog(在catalog的时候可以直接ll | awk '{print $9}' 直接取文件名称)
注意:对备份集批量catalog的时候需要多按几次Enter键,catalog完成之后需要检查是否有备份集遗漏!
恢复数据库
在节点1对3月2日之后的归档备份集catalog完成之后,recover database 执行正常!恢复数据库最后恢复redo04.log的时候报错ORA-10562,由此可以判断数据库无法启动原因是:当前redo由于突然断电造成损坏,重启db后,造成DB320表空间不一致,db无法启动。
注意:才recover database之后才了解到数据库无法启动的真正原因,其实这可以在节点1的alert日志报错:
ORA-00600:internal error code arguments:
节点2的alert日志报错:
ORA-00600:internal error code arguments:
中可以确定redo日志损坏引起的internal error
alter database open resetlogs
在节点1进行数据库recover database之后,进行alter database open resetlogs 打开数据库,打开之后发现节点1处于open 状态,但是节点2处于mounted状态,所以我将两个节点进行shutdown immediate 关闭数据库,然后通过srvctl start database -d orcl启动两个节点。