Logical standby不能非归档
最近碰见一个例子,logical standby在非归档模式下,无法进行实时的日志应用real time apply,只有当primary数据库一个日志文件switch log file之后,逻辑数据库才能应用从priamry 传递过来的归档日志文件。
将逻辑数据库设置为归档模式后,alter database archivelog; 才可以进行实时的日志应用real time apply。 该现象在10g和11gR2都会发生。
观察是否逻辑数据库处于real time apply状态,最简单就是观察standby log file有没有进程在读取和写入。通常real time apply状态下,RFC进程负责接收primary 传递来的redo log stream并写入到standby log file中,再由MRP进程从standby log file中读取接收到的日志信息来协调其他进程应用到standby database中。因此在real time apply模式中,会看到2个进程(RFC&MRP)打开standby log file。
ADGLG1–$> fuser *
ADGLG1_standby_redo01.log:
ADGLG1_standby_redo02.log:
ADGLG1_standby_redo03.log:
ADGLG1_standby_redo04.log:
ADGPOC_redo01.log: 17772o
ADGPOC_redo02.log: 17772o
ADGPOC_redo03.log: 17772o
ADGPOC_redo04.log: 17772o
或许是一些内部的原因导致logical standby设计如此。其实,如果是1写多读的架构,读节点是没有必要处于归档模式的。