DataGuard日志传输模式

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【前言】学习技术跟学习武功一样,之前整理了DataGuard的搭建和切换,这些都是武功招式,但是心法还没有学。本文档介绍DataGuard的重要心法,DataGuard的三种保护模式跟日志传输模式的关系,文章的主要内容来自于Oracle DataGuard 11G的参考手册。

【前言】学习技术跟学习武功一样,之前整理了DataGuard的搭建和切换,这些都是武功招式,但是心法还没有学。本文档介绍DataGuard的重要心法,DataGuard的三种保护模式跟日志传输模式的关系,文章的主要内容来自于Oracle DataGuard 11G的参考手册。

 

【1】DataGuard日志传输模式的介绍

DataGuard的原理简单来说就是把ORL写入本地的同时,传送一份到备库上面进行执行,日志传输是整个DataGuard的核心,就很有必要对日志传输的几种模式进行介绍;

 

DATAGUARD所有的同步模式都可以简化成下面这张图:
image 

1、主数据库的LGWR 进程将重做数据写入到自己的ORL 中,同时Log Network Server(LNS)进程从SGA的重做缓冲区中读取重做日志的信息,交由Oracle Net服务传输到备份数据库;

2、备用数据库由另一个Data Guard进程Remote File Server(RFS)接收。RFS 在备用数据库上接收重做数据,然后将其写入一个名为备用重做日志(StandbyRedo Log,SRL)文件的顺序文件中。

当了解了简单的原理之后,便可以深入的了解详细的三种传输模式了;

 

同步方式:同步传输(synchronous transport,SYNC)又称“零数据损失”方法,因为要等到LNS确认事务恢复所需的重做数据已被写入备用站点的磁盘上,才允许LGWR 认可提交操作成功。

image

(1) 用户提交一个事务,事务在SGA 中创建一个重做记录。LGWR从日志缓冲区中读取重做记录,写入ORL,然后等待LNS 的确认。
(2) LNS 从日志缓冲区中读取相同的重做记录,通过Oracle Net 服务传给备用数据库。备用数据库上的RFS 接收重做数据,然后将其写入备用重做日志文件中。
(3) 当RFS 从磁盘接收到一个写完消息时,会将一个确认消息传回给主数据库上的LNS进程,LNS 接着通知LGWR 传输完成。LGWR 接着向用户发送提交确认信息。

优点:保证了数据的安全;

缺点:影响主库的性能;

 

异步传输方式:(asynchronous transport,ASYNC)与SYNC 的不同之处在于,LGWR不必等待来自LNS 的确认消息,无论主数据库与备用数据库相距多远,都几乎不会影响到主数据库的性能。

image

原理图如上:

 

异步传输方式会根据场景的不同,调节读取日志的方式,所有的场景都在下面的原理图中,请细看

9910228

场景一:LNS的读取速度跟得上重做日志产生的速度(系统比较空闲或者网络带宽比较高),这种情况下异步传输的链路跟同步传输的情景是一样的。LNS进程从日志缓冲池中读取重做日志,然后通过Oracle Net服务传给备用数据库。

 

场景二:当LNS赶不上SGA重做日志的产生速度(可以联想到一个水池,其注水速度比排水速度快)。在将重做数据传给备用数据库前就回收了日志缓冲区,LNS 将自行转为从ORL 读取和发送重做数据(从Data Guard 11g 开始提供此项功能)。当LNS 赶上进度后,将自行转回到直接从日志缓冲区中读取/发送。

 

场景三:(这种情况比较复杂,这边也是摘录了Data Guard的完全参考手册整理而成)

在极少数情况下,(ORL产生的速率非常快,或者网络出现故障的情况下),LNS还在发送第一个ORL文件的时候,但是系统已经发生了多次日志切换,LNS发送的完当前的文件,下个要传送的文件已经被归档。

这时候Data Guard在主数据库上使用ARCH 进程连续ping备用数据库来确定其状态。当还原与备用数据库的通信后,ARCH ping 进程会查询备用控制文件(通过其RFS 进程),来确定备用数据库从主数据库收到的最后一个完整日志文件。Data Guard 确定需要哪些日志文件来重新同步备用数据库,然后立即开始使用其他ARCH 进程传输相应文件。

接下来执行日志切换时,LNS 会试图连接备用数据库,成功后开始传输当前重做数据,而ARCH 进程在后台处理间隔。一旦备用应用进程能赶上当前重做记录的进度,应用进程就自行转换,不再读取归档重做日志,改而读取当前SRL(假定用户已经配置了Data Guard“实时应用”)。

最后需要注意的一点是,从Data Guard 10g 开始,主数据库的一个ARCH进程一直专门负责本地归档,从而确保在处理间隔期间,远程归档操作不影响主数据库回收;

为使备用数据库赶上进度,主数据库必须以远超平时生成重做数据的速度传输数据。Data Guard 架构允许使用多个后台ARCH 进程来快速处理间隔,与此同时,LNS 进程像通常一样执行当前日志流的SYNC 或者ASYNC 传输。

 

总结异步传输方式:

1、LNS首先会读取SGA中的重做日志缓存,这种情况下是最佳情况;

2、当LNS从第1个操作里面读取不到数据的情况下就去获取当前联机重做日志的数据;

3、当LNS从第1、2个操作里面均获取不到数据的情况下就要去查看备库上面日志的传输情况,查看完成后主库通过返回的信息进行传输数据;

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
NoSQL Redis 索引
Filebeat收集日志数据传输到Redis,通过Logstash来根据日志字段创建不同的ES索引
Filebeat收集日志数据传输到Redis,通过Logstash来根据日志字段创建不同的ES索引
183 0
|
4月前
|
SQL 存储 JSON
更快更强,SLS 推出高性能 SPL 日志查询模式
从海量的日志数据中,按照各种灵活的条件进行即时查询搜索,是可观测场景下的基本需求。本文介绍了 SLS 新推出的高性能 SPL 日志查询模式,支持 Unix 风格级联管道式语法,以及各种丰富的 SQL 处理函数。同时通过计算下推、向量化计算等优化,使得 SPL 查询可以在数秒内处理亿级数据,并支持 SPL 过滤结果分布图、随机翻页等特性。
12138 111
|
5月前
|
存储 关系型数据库 分布式数据库
PolarDB-SCC使用问题之为什么PolarDB-SCC选择基于RDMA的日志传输
PolarDB-SCC使用问题之为什么PolarDB-SCC选择基于RDMA的日志传输
|
5月前
|
缓存 数据库 RDMA
PolarDB-SCC使用问题之为什么PolarDB-SCC选择使用基于RDMA的日志传输
PolarDB-SCC使用问题之为什么PolarDB-SCC选择使用基于RDMA的日志传输
|
5月前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在online模式下增量抓取Oracle数据时,在archive_log切换时,出现数据丢失的情况,是什么原因
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
关系型数据库 数据库
|
6月前
|
SQL 关系型数据库 MySQL
|
7月前
|
算法 测试技术 C++
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
76 0
|
7月前
|
SQL 消息中间件 缓存
Flink SQL中使用DEBUG模式来输出详细的日志信息,
Flink SQL中使用DEBUG模式来输出详细的日志信息,
319 0
|
存储 SQL 运维
阿里云日志服务SLS全面升级:秒级处理数千亿行日志、新计费模式可省32%
数据更安全、计费更灵活  阿里云日志服务SLS内核全面升级
941 0
阿里云日志服务SLS全面升级:秒级处理数千亿行日志、新计费模式可省32%