说明
文中介绍的DG或ADG是指物理DG,若有逻辑DG的知识点会特殊指出。
DG架构介绍
介绍架构之前,先放一张官方DG架构图:

Data Guard的工作分为三部分:日志(redo日志或者归档日志)的发送、接收与应用。下面详细说明一下这三个步骤:
1. 日志的发送
主库需要不停地发送日志(redo日志或者归档日志)到备库,主库通过日志来告诉备库做了哪些操作,使得备库可以“复制”主库做的一系列操作。这个发送是由主库的LGWR进程(11g及以上版本默认使用)或者ARCn进程(10g默认使用)来完成,但是每台备机有且仅有只能选择一种进程,因此每台备机要么使用LGWR,要么使用ARCn,不能够同时用这两个进程传输。并且这两个进程的保护能力也有区别。LGWR进程是传输的redo日志的,ARCn是传输归档日志的。
(1)使用ARCn进程传输
当redo日志写满发生日志切换后,会产生归档文件,ARCn进程就会把此时产生的新归档传到备机。备机的RFS进程来接收并写入归档到备机的归档路径,最后通过MRP进程(逻辑DG是LSP进程)进行归档应用。
需要注意的是,使用ARCn进程传输的归档,不会写入到Standby Redo Logs中,而是直接将归档文件放到备机。
(2)使用LGWR进程传输
LGWR进程又分为SYNC(同步)和ASYNC(异步)方式传输
1)使用SYNC方式
SYNC方式是主库把redo日志写到本地的同时,把该redo日志通过主机的LNSn进程也同步传输到备机(LNSn进程可以并行工作),再由备机的RFS进程接收redo日志并写入到Standby Redo Logs,最后由MGR进程应用归档日志。
需要注意的是,LGWR进程必须等待redo日志写入本地归档,同时通过LNSn进程传输都成功,主库的事物才能commit,缺一不可,不然就会等待两件事全部完成。
2)使用ASYNC方式
由于使用SYNC的方式非常依赖网络,所以一旦日志传输到备库失败,LGWR进程就会报错。于是就可以使用ASYNC的方式来传输。ASYNC方式不需要等待redo日志传输到备机成功,就可以把redo日志写入到本地,但是LGWR进程依旧会同时在写入redo日志到本地的同时,告诉LNSn进程,只不过LNSn是异步的。
另外,如果使用LGWR进程进行传输,如果LGWR由于某些故障传不了redo日志,就会使用ARCn进程来代替它传输。
2. 日志的接收
备库进程RFS进程一旦接收到日志(redo或者归档日志),就会把日志写入到备库的Standby Redo Logs或者归档日志文件中。
注:当主库发生日志切换,备库的Standby Redo Logs也会切换,并且归档该日志。
3. 日志的应用
1)日志实时应用(Real Time Apply)
该方式需要包含写入到Standby Redo Logs这个操作,只要日志被写入Standby Redo Logs就会触发恢复,这种方式可以减少主备库切换时间,因为在切换过程中最耗时就是恢复日志。
2)归档应用(默认恢复方式)
该方式是默认方式,会在主库发生日志切换时,触发备库的归档,归档完成后会进行恢复。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69992972/viewspace-2842613/ ,如需转载,请注明出处,否则将追究法律责任。