恢复重做日志组成员
1) 查看当前 redo 日志组情况,从结果看是有 3 个日志组,每个日志组有 1 个成员, 1 号日志组为当前正在使用的日志组
SQL> conn / as sysdba
Connected.
SQL>
SQL> select group#,members,status from v$log;
GROUP# MEMBERS STATUS
---------- ---------- ----------------
1 1 CURRENT
2 1 UNUSED
3 1 UNUSED
SQL> select group#,member from v$logfile order by 1,2;
GROUP# MEMBER
---------- --------------------------------------------------
1 /u01/app/oracle/oradata/ORA11GR2/redo01.log
2 /u01/app/oracle/oradata/ORA11GR2/redo02.log
3 /u01/app/oracle/oradata/ORA11GR2/redo03.log
前期准备:增加日志组成员
SQL> alter database add logfile member '/u01/app/oracle/oradata/ORA11GR2/redo01_a.log' to group 1;
Database altered.
SQL> alter database add logfile member '/u01/app/oracle/oradata/ORA11GR2/redo02_a.log' to group 2;
Database altered.
SQL> alter database add logfile member '/u01/app/oracle/oradata/ORA11GR2/redo03_a.log' to group 3;
Database altered.
验证:
SQL> select group#,members,status from v$log;
GROUP# MEMBERS STATUS
---------- ---------- ----------------
1 2 CURRENT
2 2 UNUSED
3 2 UNUSED
SQL> select group#,member from v$logfile order by 1,2;
GROUP# MEMBER
---------- --------------------------------------------------
1 /u01/app/oracle/oradata/ORA11GR2/redo01.log
1 /u01/app/oracle/oradata/ORA11GR2/redo01_a.log
2 /u01/app/oracle/oradata/ORA11GR2/redo02.log
2 /u01/app/oracle/oradata/ORA11GR2/redo02_a.log
3 /u01/app/oracle/oradata/ORA11GR2/redo03.log
3 /u01/app/oracle/oradata/ORA11GR2/redo03_a.log
6 rows selected.
2) 删除当前正在使用的第一组 redo 的其中一个成员
[oracle@wang backup]$ cd $ORACLE_BASE
[oracle@wang oracle]$ cd oradata/ORA11GR2/
[oracle@wang ORA11GR2]$ ls redo*
redo01_a.log redo02_a.log redo03_a.log
redo01.log redo02.log redo03.log
[oracle@wang ORA11GR2]$
[oracle@wang ORA11GR2]$ rm redo01_a.log
[oracle@wang ORA11GR2]$
[oracle@wang ORA11GR2]$ ls redo*
redo01.log redo02_a.log redo02.log redo03_a.log redo03.log
[oracle@wang ORA11GR2]$
1) 此时数据库在使用上是没有问题的,我们一致性关闭数据库,并重启,看看有没有异常
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL> startup
ORACLE instance started.
Total System Global Area 830930944 bytes
Fixed Size 2257800 bytes
Variable Size 503319672 bytes
Database Buffers 322961408 bytes
Redo Buffers 2392064 bytes
Database mounted.
Database opened.
2) 数据库重启的步骤没有异常(也就是说,丢失一个 redo 成员并未影响使用),只是在 alert 日志中有如下错误
[oracle@wang trace]$ pwd
/u01/app/oracle/diag/rdbms/ora11gr2/ORA11GR2/trace
[oracle@wang trace]$ tail -100f alert_ORA11GR2.log
------------------------------------------------------------------------------------------------------------
ALTER DATABASE OPEN
LGWR: STARTING ARCH PROCESSES
Fri Sep 23 07:58:23 2016
ARC0 started with pid=20, OS id=7827
ARC0: Archival started
LGWR: STARTING ARCH PROCESSES COMPLETE
ARC0: STARTING ARCH PROCESSES
Errors in file /u01/app/oracle/diag/rdbms/ora11gr2/ORA11GR2/trace/ORA11GR2_lgwr_7736.trc:
ORA-00313: open failed for members of log group 1 of thread 1
Errors in file /u01/app/oracle/diag/rdbms/ora11gr2/ORA11GR2/trace/ORA11GR2_lgwr_7736.trc:
ORA-00313: open failed for members of log group 2 of thread 1
Errors in file /u01/app/oracle/diag/rdbms/ora11gr2/ORA11GR2/trace/ORA11GR2_lgwr_7736.trc:
ORA-00313: open failed for members of log group 3 of thread 1
Errors in file /u01/app/oracle/diag/rdbms/ora11gr2/ORA11GR2/trace/ORA11GR2_lgwr_7736.trc:
ORA-00313: open failed for members of log group 1 of thread 1
Thread 1 opened at log sequence 1
Current log# 1 seq# 1 mem# 0: /u01/app/oracle/oradata/ORA11GR2/redo01.log
Successful open of redo thread 1
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
SMON: enabling cache recovery
Fri Sep 23 07:58:24 2016
ARC1 started with pid=21, OS id=7839
Fri Sep 23 07:58:24 2016
Errors in file /u01/app/oracle/diag/rdbms/ora11gr2/ORA11GR2/trace/ORA11GR2_m000_7843.trc:
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/ORA11GR2/redo01_a.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Errors in file /u01/app/oracle/diag/rdbms/ora11gr2/ORA11GR2/trace/ORA11GR2_m000_7843.trc:
Errors in file /u01/app/oracle/diag/rdbms/ora11gr2/ORA11GR2/trace/ORA11GR2_m000_7843.trc:
Fri Sep 23 07:58:24 2016
ARC2 started with pid=23, OS id=7847
Checker run found 1 new persistent data failures
ARC1: Archival started
ARC2: Archival started
ARC1: Becoming the 'no FAL' ARCH
ARC1: Becoming the 'no SRL' ARCH
ARC2: Becoming the heartbeat ARCH
Fri Sep 23 07:58:24 2016
ARC3 started with pid=22, OS id=7855
[7823] Successfully onlined Undo Tablespace 2.
Undo initialization finished serial:0 start:125398924 end:125399034 diff:110 (1 seconds)
Verifying file header compatibility for 11g tablespace encryption..
Verifying 11g file header compatibility for tablespace encryption completed
SMON: enabling tx recovery
Database Characterset is AL32UTF8
No Resource Manager plan active
replication_dependency_tracking turned off (no async multimaster replication found)
Starting background process QMNC
Fri Sep 23 07:58:25 2016
QMNC started with pid=24, OS id=7859
ARC3: Archival started
ARC0: STARTING ARCH PROCESSES COMPLETE
Completed: ALTER DATABASE OPEN
Starting background process CJQ0
Fri Sep 23 07:58:26 2016
CJQ0 started with pid=28, OS id=7887
5)修复这个问题也是很简单的,因为 redo 的成员也是互为镜像的,我们首先一致性关闭数据库
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
3) 复制第一组 redo 成员
[oracle@wang ORA11GR2]$ ls redo*
redo01.log redo02_a.log redo02.log redo03_a.log redo03.log
[oracle@wang ORA11GR2]$
[oracle@wang ORA11GR2]$ cp redo01.log redo01_a.log
[oracle@wang ORA11GR2]$
[oracle@wang ORA11GR2]$ ls redo*
redo01_a.log redo02_a.log redo03_a.log
redo01.log redo02.log redo03.log
[oracle@wang ORA11GR2]$
4) 启动数据库,恢复完成
SQL> startup
ORACLE instance started.
Total System Global Area 830930944 bytes
Fixed Size 2257800 bytes
Variable Size 503319672 bytes
Database Buffers 322961408 bytes
Redo Buffers 2392064 bytes
Database mounted.
Database opened.
查看alert日志也没有报错信息了!!!!!!!!!!