DG的ASYNC与SYNC深层原理解析
使用LGWR进程的SYNC方式
1)PrimaryDatabase产生的Redo日志要同时写到日志文件和网络。也就是说LGWR进程把日志写到本地日志文件的同时还要发送给本地的LNSn进程(NetworkServerProcess),再由LNSn(LGWRNetworkServerprocess)进程把日志通过网络发送给远程的目的地,每个远程目的地对应一个LNS进程,多个LNS进程能够并行工作。
2)LGWR必须等待写入本地日志文件操作和通过LNSn进程的网络传送都成功,PrimaryDatabase上的事务才能提交,这也是SYNC的含义所在。
3)StandbyDatabase的RFS进程把接收到的日志写入到StandbyRedoLog日志中。
4)PrimaryDatabase的日志切换也会触发StandbyDatabase上的日志切换,即StandbyDatabase对StandbyRedoLog的归档,然后触发StandbyDatabase的MRP或者LSP进程恢复归档日志。
因为PrimaryDatabase的Redo是实时传递的,于是StandbyDatabase端可以使用两种恢复方法:
实时恢复(Real-TimeApply):只要RFS把日志写入StandbyRedoLog就会立即进行恢复;
归档恢复:在完成对StandbyRedoLog归档才触发恢复。
PrimaryDatabase默认使用ARCH进程,如果使用LGWR进程必须明确指定。使用LGWRSYNC方式时,可以同时使用NET_TIMEOUT参数,这个参数单位是秒,代表如果多长时间内网络发送没有响应,LGWR进程会抛出错误。示例如下:
altersystemsetlog_archive_dest_2='SERVICE=STLGWRSYNCNET_TIMEOUT=30'scope=both;
使用LGWR进程的ASYNC方式
使用LGWRSYNC方法的可能问题在于,如果日志发送给StandbyDatabase过程失败,LGWR进程就会报错。也就是说PrimaryDatabase的LGWR进程依赖于网络状况,有时这种要求可能过于苛刻,这时就可以使用LGWRASYNC方式。它的工作机制如下:
1)PrimaryDatabase一端产生Redo日志后,LGWR把日志同时提交给日志文件和本地LNS进程,但是LGWR进程只需成功写入日志文件就可以,不必等待LNSn进程的网络传送成功。
2)LNSn进程异步地把日志内容发送到StandbyDatabase。多个LNSn进程可以并发发送。
3)PrimaryDatabase的OnlineRedoLog写满后发生LogSwitch,触发归档操作,也触发StandbyDatabase对StandbyDatabase对StandbyRedoLog的归档;然后触发MRP或者LSP进程恢复归档日志。
因为LGWR进程不会等待LNSn进程的响应结果,所以配置LGWRASYNC方式时不需要NET_TIMEOUT参数。示例如下:
altersystemsetlog_archive_dest_2='SERVICE=STLGWRASYNC'scope=both;
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。