概述:
今天在自己测试环境玩DG,在备库上操作的一不小心把oracle用户的进程全部杀(切记在生产环境每步操作都要知道是在干嘛,切记规范操作,安全第一),已经建立了同步机制的备库就这样意外挂掉了。随后尝试启动数据库的时候遇到ora-10458,ora-01196,ora-01110。
故障现象
SQL> startup
ORACLE instance started.
Total System Global Area 1970864128 bytes
Fixed Size 2254544 bytes
Variable Size 805308720 bytes
Database Buffers 1157627904 bytes
Redo Buffers 5672960 bytes
SQL> alter database mount;
Database altered.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-10458: standby database requires recovery
ORA-01196: file 1 is inconsistent due to a failed media recovery session
ORA-01110: data file 1: '/u01/app/oracle/oradata/DG/system.dbf'
小z我经验不足,没有遇到过这个情况(但是这个故障应该很多dba都遇到过的问题),然后我就去看alert日志。
...
alter database open
AUDIT_TRAIL initialization parameter is changed to OS, as DB is NOT compatible for database opened with read-only access
Beginning Standby Crash Recovery.
Serial Media Recovery started
Managed Standby Recovery starting Real Time Apply
Media Recovery of Online Log [Thread=2, Seq=202]
...
Recovery of Online Redo Log: Thread 2 Group 15 Seq 202 Reading mem 0
...
ORA-16016: archived log for thread 2 sequence# 202 unavailable
...
这个几个信息都指向的2节点的202的日志,是突然备库宕机导致丢失了日志没有应用上,这种情况备库需要进行恢复。
解决方法
一 、重建DG物理备库
重新搭建物理备库,在数据量下的情况是允许的,但是数据量很大的情况下是不建议的。
二、利用已经建立好的同步机制恢复DG备库
这个方法就比较简单了。
备库(现在是mount状态):
SQL> recover managed standby database using current logfile disconnect from session;
Media recovery complete.
主库(发起切换日志的操作):
SYS@rac1>alter system switch logfile;
System altered.
SYS@rac1>/
System altered.
SYS@rac1>/
System altered.
SYS@rac1>/
System altered.
SYS@rac1>/
System altered.
主库发起切日志操作的时候,主库会将未应用或未成功应用的日志传输到备库应用。这里也就启到恢复的作用了。(等待几分钟)
备库:
SQL> recover managed standby database cancel;
Media recovery complete.
SQL> alter database open read only;
Database altered.
取消同步并成功将备库拉至read only状态,至此,备库已经能正常打开了。
PS:在业务压力大,缺失归档(未应用的归档)较多情况下,也就是说通过dg本身去追是很吃力的,建议使用基于scn的rman增量备份恢复进行追归档。