Oracle 恢复备库控制文件时的报错问题分析(ORA-00313)

搭建DataGuard时恢复备库控制文件的报错问题分析(ORA-00313)

在备库此时存在如下参数时的情况:

db_file_name_convert =/oracle/app/oradata/proddg2, /oracle/app/oradata/prod
log_file_name_convert=/oracle/app/oradata/proddg2, /oracle/app/oradata/prod

恢复备库的控制文件:

RMAN> restore controlfile from '/home/oracle/rman/standby.ctl';
SQL> alter database mount;
Database altered.

此时警告日志会出现很多这种错误:

Errors in file /oracle/app/diag/rdbms/prod/prod/trace/prod_arc3_4119.trc:
ORA-00313: open failed for members of log group 4 of thread 1
ORA-00312: online log 4 thread 1: '/oracle/app/oradata/prod/std_redo04.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory

查看数据文件与日志文件信息:

SQL> select name from v$datafile;  //数据文件路径会根据db_file_name_convert转化
**NAME**
/oracle/app/oradata/prod/system01.dbf
/oracle/app/oradata/prod/sysaux01.dbf
/oracle/app/oradata/prod/undotbs01.dbf
/oracle/app/oradata/prod/users01.dbf
/oracle/app/oradata/prod/example01.dbf

SQL> select member from v$logfile; //日志文件路径会根据log_file_name_convert转化
MEMBER
/oracle/app/oradata/prod/redo03.log
/oracle/app/oradata/prod/redo02.log
/oracle/app/oradata/prod/redo01.log
/oracle/app/oradata/prod/std_redo04.log
/oracle/app/oradata/prod/std_redo05.log
/oracle/app/oradata/prod/std_redo06.log

再直接使用RMAN执行restore database即可。

RMAN> restore database;

开启主库的日志传输:

SQL>  alter system set log_archive_dest_state_2=enable scope=both;

观察备库警告日志:

Errors in file /oracle/app/diag/rdbms/prod/prod/trace/prod_rfs_4169.trc:
ORA-00313: open failed for members of log group 4 of thread 1
ORA-00312: online log 4 thread 1: '/oracle/app/oradata/prod/std_redo04.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
**SRL log 4 needs clearing because log has not been created**

.....

Clearing online log 4 of thread 1 sequence number 0
Errors in file /oracle/app/diag/rdbms/prod/prod/trace/prod_arc3_4119.trc:
ORA-00313: open failed for members of log group 4 of thread 1
ORA-00312: online log 4 thread 1: '/oracle/app/oradata/prod/std_redo04.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory

Clearing online log 4 of thread 1 sequence number 0

等等standbylog不存在的错误,但也可以看出Oracle会自动进行clearing操作,备库会根据控制文件自动创建出standbylog:

日志组clearing介绍:

常用于当日志文件丢失时使用,丢失的日志组必须为inactive。

也可以手动执行clearing:

--清理日志组即可,oracle会自动创建新的日志文件出来,状态为unused
SYS@orcl11g> alter database clear logfile group 1;
SYS@orcl11g> alter database clear logfile group 3;
[oracle@dgpridb prod]$ ll
total 2081760
-rw-r----- 1 oracle oinstall  10043392 Aug 25 06:40 control01.ctl
-rw-r----- 1 oracle oinstall  10043392 Aug 25 06:40 control02.ctl
-rw-r----- 1 oracle oinstall 355213312 Aug 25 06:33 example01.dbf
-rw-r----- 1 oracle oinstall 104858112 Aug 25 06:40 std_redo04.log
-rw-r----- 1 oracle oinstall 104858112 Aug 25 06:40 std_redo05.log
-rw-r----- 1 oracle oinstall 104858112 Aug 25 06:40 std_redo06.log
-rw-r----- 1 oracle oinstall 555753472 Aug 25 06:34 sysaux01.dbf
-rw-r----- 1 oracle oinstall 786440192 Aug 25 06:35 system01.dbf
-rw-r----- 1 oracle oinstall  94380032 Aug 25 06:31 undotbs01.dbf
-rw-r----- 1 oracle oinstall   5251072 Aug 25 06:31 users01.dbf

但为什么redo log却没有自动创建,redo会什么时候创建呢

此时开启日志应用服务:

alter database recover managed standby database disconnect from session;

观察警告日志:

**Clearing online redo logfile 3 /oracle/app/oradata/prod/redo03.log**
Clearing online log 3 of thread 1 sequence number 83
Errors in file /oracle/app/diag/rdbms/prod/prod/trace/prod_mrp0_4199.trc:
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/oracle/app/oradata/prod/redo03.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Errors in file /oracle/app/diag/rdbms/prod/prod/trace/prod_mrp0_4199.trc:
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/oracle/app/oradata/prod/redo03.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
**Clearing online redo logfile 3 complete**

Media Recovery Log /oracle/app/arch/prod1_78_1046156085.dbf
Media Recovery Log /oracle/app/arch/prod1_79_1046156085.dbf
Media Recovery Log /oracle/app/arch/prod1_80_1046156085.dbf
Media Recovery Log /oracle/app/arch/prod1_81_1046156085.dbf
Media Recovery Log /oracle/app/arch/prod1_82_1046156085.dbf
Media Recovery Log /oracle/app/arch/prod1_83_1046156085.dbf
Media Recovery Waiting for thread 1 sequence 84 (in transit)

Clearing online log 3 of thread 1 sequence number 83

日志正常应用了,并且也发现redo不存在的错误,并且数据库自动进行了clearing,自动创建新的日志组。

[oracle@dgpridb prod]$ ll redo*
-rw-r----- 1 oracle oinstall 52429312 Aug 25 06:42 redo01.log
-rw-r----- 1 oracle oinstall 52429312 Aug 25 06:42 redo02.log
-rw-r----- 1 oracle oinstall 52429312 Aug 25 06:42 redo03.log

总结:

我这边是在主库创建了standby redolog,所以备库控制文件中也存在standby redolog,Oracle会自动执行clearing创建standby redolog,如果没有在主库创建standby redolog,那么就需要在备库mount状态时进行创建standby redolog,也可以不创建,如果不在备库创建standby redolog,备库会虚拟几组standby redollog。

当不在主库创建standby redolog时的情况:

恢复备库的控制文件:

db_file_name_convert =/oracle/app/oradata/proddg2, /oracle/app/oradata/prod
log_file_name_convert=/oracle/app/oradata/proddg2, /oracle/app/oradata/prod
RMAN> restore controlfile from '/home/oracle/rman/standby.ctl';

SQL> alter database mount;

Database altered.

备库控制文件中记录的日志组信息,不存在standby redolog

SQL> select member from v$logfile;

MEMBER
/oracle/app/oradata/prod/redo03.log
/oracle/app/oradata/prod/redo02.log
/oracle/app/oradata/prod/redo01.log

RMAN> restore database;

开启主库日志传输并跟踪警告日志:

RFS[4]: Assigned to RFS process 4492
RFS[4]: No standby redo logfiles created
RFS[4]: Opened log for thread 1 sequence 86 dbid 457994418 branch 1046156085

在主库执行日志切换:

RFS[4]: No standby redo logfiles created
RFS[4]: Opened log for thread 1 sequence 87 dbid 457994418 branch 1046156085
Archived Log entry 10 added for thread 1 sequence 87 rlc 1046156085 ID 0x1b70d452 dest 2:
RFS[4]: No standby redo logfiles created
RFS[4]: Opened log for thread 1 sequence 88 dbid 457994418 branch 1046156085

每接收一个日志就会出现RFS[4]: No standby redo logfiles created。

(注意如果不在备库创建standby redo,主库alert日志中没有明显的日志传输信息)

此时备库开启日志应用,检查是否可以正常应用

SQL> alter database recover managed standby database disconnect from session;

Clearing online redo logfile 3 /oracle/app/oradata/prod/redo03.log
Clearing online log 3 of thread 1 sequence number 86
Errors in file /oracle/app/diag/rdbms/prod/prod/trace/prod_mrp0_4505.trc:
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/oracle/app/oradata/prod/redo03.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Errors in file /oracle/app/diag/rdbms/prod/prod/trace/prod_mrp0_4505.trc:
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/oracle/app/oradata/prod/redo03.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Clearing online redo logfile 3 complete

Clearing online redo logfile 3 complete
Media Recovery Log /oracle/app/arch/prod1_78_1046156085.dbf
Media Recovery Log /oracle/app/arch/prod1_79_1046156085.dbf
Media Recovery Log /oracle/app/arch/prod1_80_1046156085.dbf
Media Recovery Log /oracle/app/arch/prod1_81_1046156085.dbf
Media Recovery Log /oracle/app/arch/prod1_82_1046156085.dbf
Media Recovery Log /oracle/app/arch/prod1_83_1046156085.dbf
Media Recovery Log /oracle/app/arch/prod1_84_1046156085.dbf
Media Recovery Log /oracle/app/arch/prod1_85_1046156085.dbf
Media Recovery Log /oracle/app/arch/prod1_86_1046156085.dbf
Media Recovery Log /oracle/app/arch/prod1_87_1046156085.dbf
Media Recovery Waiting for thread 1 sequence 88 (in transit)

结论:

还是会进行redo clearing 然后正常应用日志。

在备库手动创建standby redolog:

alter database add standby logfile  group 4 '/oracle/app/oradata/prod/std_redo04.log' size 50M;
alter database add standby logfile  group 5 '/oracle/app/oradata/prod/std_redo05.log' size 50M;
alter database add standby logfile  group 6 '/oracle/app/oradata/prod/std_redo06.log' size 50M;
alter database add standby logfile  group 7 '/oracle/app/oradata/prod/std_redo07.log' size 50M;

出现如下错误:

ORA-01156: recovery or flashback in progress may need access to files

关闭日志应用:

SQL>alter database recover managed standby database cancel;

再次创建成功。

再次从主库进行一次日志切换:

SQL> alter system switch logfile;

跟踪备库警告日志:

Archived Log entry 12 added for thread 1 sequence 89 rlc 1046156085 ID 0x1b70d452 dest 2:
RFS[4]: Selected log 4 for thread 1 sequence 90 dbid 457994418 branch 1046156085
Tue Aug 25 07:33:18 2020
RFS[4]: Selected log 5 for thread 1 sequence 91 dbid 457994418 branch 1046156085
Tue Aug 25 07:33:18 2020
Archived Log entry 13 added for thread 1 sequence 90 ID 0x1b70d452 dest 1:
Tue Aug 25 07:35:39 2020
RFS[4]: Selected log 4 for thread 1 sequence 92 dbid 457994418 branch 1046156085
Tue Aug 25 07:35:39 2020
Archived Log entry 14 added for thread 1 sequence 91 ID 0x1b70d452 dest 1:

完毕~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值