data guard主要提供两个服务:
1)redo传输服务:即把primay端的redo日志传输到一个或多个standby目的地。
2)redo应用服务:即在standby端应用从primay端传输过来的redo日志。
本文先讲讲其中的redo传输服务。
1、使用arcn传输redo日志
默认情况下采用arcn传输redo日志,不过只有在最高性能模式下才可以使用arcn(具体可参考《[oracle] data guard 之 三种保护模式介绍》),采用arch传输redo日志的示意图如下:
其大致过程如下:
1)primay段arc0一旦完成日志切换,arc1就将新生成的归档日志传输到standby端;
2)standby端由rfs进程接受日志,如果配置了standby redo log,记录至standby redo log,等standby redo log做log switch形成归档日志,再应用归档日志做恢复;如果没有配置standby redo log,rfs进程接收到日志后,放到standby端归档目录下,standby再应用归档日志做恢复。
2、使用lgwr传输redo日志
使用lgwr进程和arcn有很大的不一样,最明显的区别是它不需要等primary完成日志切换后再传输,其示意图如下:
其过程大致如下:
1)一旦primary有redo日志产生,lgwr将触发lnsn进程传输redo只standby redo log;注意:这里不能由lgwr直接传输,因为整个数据库实例只有一个lgwr,为了保证它的主要性能不受影响,不能由它直接传输)
2)网络传输模式可以选择sync或async,sync是指当primary提交时, 必须得等redo传输至standby成功后,才能返回。所以如果设置sync,建议同时设置net_timeout参数,超时无响应,则返回错误。async是指primary提交是否成功和日志是否传输成功没有关系,这样对primary的性能影响最小。
3)standby端的rfs进程把redo写入standby redo log,如果开启了实时应用,就将redo应用至standby数据库,如果没有开启实时应用,等standby redo log归档后再应用到standby数据库。