ITPub博客

首页 > 数据库 > Oracle > 一次dataguard备份恢复到单实例的故障记录

一次dataguard备份恢复到单实例的故障记录

Oracle 作者:lpwebnet 时间:2014-02-08 11:20:23 0 删除 编辑
    前期rman恢复都很顺利,但是recover的时候有问题报少归档文件,无法RECOVER,
然后alter database open resetlogs继续报错,报ORA-03113: end-of-file on communication channel
期间删除了REDO,重建了REDO,但是依然没有解决问题。
    而且报ORA-03113: end-of-file on communication channel的错误,后面并没有ID信息的提示。
后来去查看init.ora文件,发现与源库对比少了DG的配置参数,把dg的配置参数primary的部分复制到目标机init.ora文件里面,然后用init.ora文件以mount级别启动数据库,然后alter database open resetlogs,数据库打开了。


总结:
看来只报ORA-03113: end-of-file on communication channel,有可能就是参数文件错误了。
----------------------------------------------------------------------------------
另外附一份关于REDO全部丢失,没有备份,如何操作打开库。
----------------------------------------------------------------------------------

1.故障环境模拟
首先查看一下数据字典里的日志文件内容
SQL> select * from v$logfile;


    GROUP# STATUS  TYPE    MEMBER                                                                                                                                          IS_


         3         ONLINE  /u01/app/oracle/oradata/test1/redo03.log                                                                                                        NO
         2         ONLINE  /u01/app/oracle/oradata/test1/redo02.log                                                                                                        NO
         1         ONLINE  /u01/app/oracle/oradata/test1/redo01.log                                                                                                        NO
         4         STANDBY /u01/app/oracle/oradata/test1/redo04.log                                                                                                        NO
         5         STANDBY /u01/app/oracle/oradata/test1/redo05.log                                                                                                        NO
         6         STANDBY /u01/app/oracle/oradata/test1/redo06.log                                                                                                        NO
         7         STANDBY /u01/app/oracle/oradata/test1/redo07.log   
把REDO文件全部移走
[root@ora_test01 test1]# pwd
/u01/app/oracle/oradata/test1
[root@ora_test01 test1]# ls
control01.ctl  redo01.log  redo02.log  redo03.log  redo04.log  redo05.log  redo06.log  redo07.log  sysaux01.dbf  system01.dbf  temp01.dbf  undotbs01.dbf  users01.dbf
[root@ora_test01 test1]# mv redo* /ora_move/
在服务重启数据库
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.


Total System Global Area  780824576 bytes
Fixed Size                  2232432 bytes
Variable Size             482348944 bytes
Database Buffers          289406976 bytes
Redo Buffers                6836224 bytes
Database mounted.
ORA-03113: end-of-file on communication channel
Process ID: 2706
Session ID: 191 Serial number: 3


这就报错了


SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01139: RESETLOGS option only valid after an incomplete database recovery


2.故障处理流程


手动重建REDO
SQL> alter database drop logfile group 4;


Database altered.


SQL> alter database drop logfile group 5;  


Database altered.


SQL> alter database drop logfile group 6; 


Database altered.


SQL> alter database drop logfile group 7;


Database altered.


SQL> alter database add logfile group 4 '/u01/app/redo4.log' size 50m;


Database altered.


SQL> alter database add logfile group 5 '/u01/app/redo5.log' size 50m;


Database altered.


SQL> alter database add logfile group 6 '/u01/app/redo6.log' size 50m;


Database altered.


这里吧standby的REDO删除,重建正常的,当然你可以重建standby的,这个无所谓,只为了下面复制的方面,因为REDO最少两个,所以下面在操作系统级别复制3分REDO,
[root@ora_test01 app]# cp -p redo4.log redo1.log
[root@ora_test01 app]# cp -p redo5.log redo2.log
[root@ora_test01 app]# cp -p redo6.log redo3.log


然后 更改日志文件位置
SQL> alter database rename file '/u01/app/oracle/oradata/test1/redo01.log' to '/u01/app/redo1.log' ;


Database altered.


SQL> alter database rename file '/u01/app/oracle/oradata/test1/redo02.log' to '/u01/app/redo2.log' ;


Database altered.


SQL> alter database rename file '/u01/app/oracle/oradata/test1/redo03.log' to '/u01/app/redo3.log' ;


Database altered.


继续强制打开,依然报错,看来还需要recover一下。


SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01139: RESETLOGS option only valid after an incomplete database recovery


当还原的时候,提示不需要还原。
SQL> recover database;
ORA-00283: recovery session canceled due to errors
ORA-00264: no recovery required


那就强制还原吧,首先设置两个参数为true,这步骤最好做一下。
SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile ;


System altered.


SQL> alter system set "_allow_terminal_recovery_corruption"=true scope=spfile ;


System altered.


重启数据库


SQL> shutdown immediate ;
Database closed.
Database dismounted.
ORACLE instance shut down.


SQL> startup mount;
ORACLE instance started.


Total System Global Area  780824576 bytes
Fixed Size                  2232432 bytes
Variable Size             482348944 bytes
Database Buffers          289406976 bytes
Redo Buffers                6836224 bytes
Database mounted.


开始强制还原
SQL> recover database until cancel;
Media recovery complete.
然后打开库
SQL>  alter database open resetlogs ;


Database altered.
成功。


最后把两个参数还原回去


SQL> alter system set "_allow_resetlogs_corruption"=false scope=spfile ;


System altered.


SQL> 
SQL> alter system set "_allow_terminal_recovery_corruption"=false scope=spfile ;


System altered.
重启库,测试完成。
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup          
ORACLE instance started.


Total System Global Area  780824576 bytes
Fixed Size                  2232432 bytes
Variable Size             482348944 bytes
Database Buffers          289406976 bytes
Redo Buffers                6836224 bytes
Database mounted.
Database opened.


3.总结
本次操作之适用于REDO丢掉没备份,没有归档,无法打开库的情况。






来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17172228/viewspace-1077974/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-07-21

  • 博文量
    120
  • 访问量
    847738