数据库的logfile被rm删除,每个logfile group仅有一个logfile member,当该logfile变为current时发现问题。
数据库仍然可以正常运行,但是LNS进程报错称找不到被删除的logfile。我们使用lgwr async模式传输redo到远端physical standby,physical standby无法得到被删除的logfile。
从pfiles中可以看出,因为lgwr进程每时每刻都获得所有logfile的文件句柄,所以虽然该logfile被删除,lgwr还是可以正常读写该logfile,数据库还是可以正常的运行。
但是lns进程只是获得当前的文件句柄,所以当切换到被删除的logfile时,lns进程不能访问该文件。
XFAN primary$> ps -ef |grep lns1|grep XFAN
oracle 17579 1 0 03:02:06 ? 0:01 ora_lns1_XFAN
XFAN primary$> pfiles 17579 | grep redo
/oracle/SCRATCH/data03/XFAN/redo/.redo2.log::cdev:vxfs: — LNS process only hold redo2.log’s handler
XFAN primary$> ps -ef |grep lgwr|grep XFAN
oracle 16377 1 0 02:44:54 ? 0:01 ora_lgwr_XFAN
XFAN primary$> pfiles 16377 |grep redo
/oracle/SCRATCH/data03/XFAN/redo/.redo1.log::cdev:vxfs:
/oracle/SCRATCH/data03/XFAN/redo/.redo2.log::cdev:vxfs:
/oracle/SCRATCH/data03/XFAN/redo/.redo3.log::cdev:vxfs:
/oracle/SCRATCH/data03/XFAN/redo/.redo4.log::cdev:vxfs: — LGWR process hold all redo log files’ handler
首先做的是在primary数据库上清除该logfile,过程如下:
1. 切换到好的logfile group
alter system switch logfile;
2. checkpoint,使该logfile的状态从active变为inactive
alter system checkpoint;
3. 清除该logfile,因为不能被归档,所以要加上unarchived
alter database clear unarchived logfile group x;
因为中间少了一个archive log,所以physical standby不能继续recover。
使用incremental backup来修复该physical standby,大约花费6个小时。如果重新build standby,大约需要花费一个星期。