BOC的SCN传播方式的前提是,只有当某个节点的SCN发生改变时才进行传播,LGWR进程会与LMS进程协同工作来同步节点间的SCN,LGWR负责将redo信息写入重做日志文件并发送最新的SCN,LMS进程负责节点间SCN信息的传播。
BOC的SCN传播方式分为两种:间接方式和直接方式
间接方式需要经历8个步骤:
步骤1:用户进程提交事务,并通知LGWR进程,之后进入等待状态,对应的等待事件是log file sync。
步骤2:LGWR进程将事务的提交SCN发送给本地的一个LMS进程。
步骤3:LGWR进程将事务对应的重新信息写入重做日志文件。
步骤4:本地节点的LMS进程将包含了SCN的信息发送给所有远程节点的LMS进程。
步骤5:所有远程节点的LMS进程接收到了SCN信息并反馈给本地节点的LMS进程。
步骤6:重新信息的I/O请求完成,并反馈给LGWR进程。
步骤7:本地节点的LMS进程通知LGWR,所有远程节点都已经收到了事务的SCN。
步骤8:本地节点的LGWR进程通知用户进程事务提交结束。
步骤2和步骤3是同时发生的,目的是为了提高SCN的传播效率
步骤5和步骤6的发生顺序可能是相反的,取决于集群私网和重做日志文件所在磁盘的I/O性能
直接方式需要经历7个步骤
步骤1:用户进程提交事务,并通知LGWR进程,之后进入等待状态,对应的等待事件是log file sync。
步骤2:LGWR进程直接将包含了事务提交SCN的信息发送给所有远程节点的LMS进程
步骤3:LGWR进程将事务对应的重新信息写入重做日志文件。
步骤4:所有远程节点的LMS进程接收到了SCN信息并反馈给本地节点的LMS进程
步骤5:重新信息的I/O请求完成,并反馈给LGWR进程。
步骤6:本地节点的LMS进程通知LGWR,所有远程节点都已经收到了事务的SCN。
步骤7:本地节点的LGWR进程通知用户进程事务提交结束。
直接方式比间接方式少了一个步骤,由LGWR根据系统负载自行决定使用哪种SCN的传播方式。