就不干开发

导航

dataguard原理详解

其实dataguard的作用就是通过将主库的redo log传输给从库,从库应用传输过来的redo log,从而实现数据的传输的,跟MySQL的主从复制差不多
在data guard中,存在两类SYNC和ASYNC,下面分别描述两类的工作方法,从而进一步认识它的原理。
SYNC同步模式
0
1.当用户发出commit命令后,会生成一条重做数据(redo entry),传输给SGA的redo buffer(缓存池),SGA(System Global Area系统全局区)主要由共享池、数据缓冲区、重作日志缓冲区组成。LGWR后台进程监控并读取到这条缓存数据后,将它写入到online redo log file,等待LNS(Log Network Server)进程返回确认消息。注意:这个过程是先传输redo数据,再生成redo日志
2.LNS进程通过监控redo buffer并读取到这条新加入的数据后,通过Oracle Net Services传给从库。从库的RFS进程收到redo数据后写入自身库
3.当RFS确定写入所有的redo record到磁盘后,向primary DB的LNS发送确认信息,随后LNS将消息同步给LGWR进程。当LGWR收到LNS转发的确认信息后,才返回commit成功的消息给user。
ASYNC异步模式
0
跟同步模式类似,唯一不同点是从库的LGWR进程不用等待LNS返回确认消息,直接读取online redo log的redo数据。这种模式可以使用压缩方式传输redo数据,节省带宽,但会增加CPU负载

缺点

如果LNS在读取online redo log中记录时刚好遇到online switch,则可能造成standby的archivelog gap。LNS的不同步记录,在提高性能的同时也可能会产生数据的丢失。
对于redo log的丢失,data guard处理方法如下:log file gap主演出现在主控不断有事务提交,同时LNS可能由于网络或从库的问题,无法及时同步造成。此时主库继续生成redo log并归档。
data guard在主库生成ARCH进程,不断ping从库,只要网络联通,ARCH的ping进程通过RFS进程查询从库的控制文件,获取上次同步完成的log文件,这样可以确定从哪个归档日志继续同步,填补丢失的日志。缺失日志填补完后,会自动过渡到从当前日志文件中进行同步。具体流程如下
0
 

posted on 2022-08-26 11:26  专注运维20年  阅读(966)  评论(0编辑  收藏  举报