您的位置首页百科问答

Oracle 11g rac rman恢复数据库(ORA-00600引起)

Oracle 11g rac rman恢复数据库(ORA-00600引起)

的有关信息介绍如下:

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启动两个节点。