本文主要讲解Oracle Dataguard体系结构 — By Firsouler 2021.8.12
1.概述
备库类型
- 物理备库(Physical standby database):常用模式,尤其Oracle11.1之后,可以只读方式打开,11.2开始可以滚动升级。
- 逻辑备库(Logical standby database):可以跨平台,限制较多。10g中常见于升级或者只读方式使用,主要是解析日志转换成sql之后使用。
- 快照备库(Snapshot Standby Database):主要用于测试,可临时将物理备库转换成快照数据库进行压力等业务测试,接收归档不应用,测试完成后可再转换成物理备库。
Dataguard之前,怎么保护(灾备)
- 存储复制
- 逻辑同步
redo 简单说明

思考: LGWR/SGA/DBWn 关系,当执行commit时,怎么个流程,频繁commit的影响? Dataguard又是如何操作的,归档日志对于备端的作用是什么?
2.Redo传输服务
在主数据库LGWR进程将SGA中重做写入其ORL的同时,LNS进程从SGA中的重做缓冲区读取数据,并将重做传递给Oracle Net Services,以便传输到备用数据库。如果是RAC模式,每个数据库都有自己的LNS进程。备用数据库中,会通过Remote File Server(RFS)进程接收重做记录,并将其写入到standby log(SRL)中。如果多个备库,主库会有多个LNS进程对应相关RFS进程。
LNS支持两种传输方式,同步(sync)和异步(async), 传输架构如下图所示:

同步传输
同步传输(SYNC)也称为“零数据丢失”方法,在LNS确认恢复事务所需的重做已写入备用数据库的磁盘之前,LGWR不允许commit成功。

如上图所示,具体同步流程是:
- 1.用户提交一个事务,并在SGA中创建重做记录。LGWR进程会将记录从log buffer写入到online redo日志文件中,最后等待LNS确认的消息
- 2.LNS在log buffer读取重做记录并通过网络传输到备用数据库,然后RFS接收并写入到standby redo logfile中。
- 3.RFS将接收的数据写入standby redo logfile完成时,它将确认消息发送给主端LNS,再通知LGWR,最后LGWR向用户提交确认消息。
思考: 这种方式优点、缺点是什么 ,会对数据库或者业务造成什么影响
异步传输
异步传输LGWR不需要从LNS进程等待确认,对主库性能几乎无影响。如果LNS无法跟上进度,并且在重做传输到备用设备之前,日志缓冲区被回收,LNS将自动转换为从ORL(数据保护11g之后)读取和发送。一旦LNS被捕获,它会自动转换回直接从日志缓冲区读取/发送。
日志缓冲区命中率在视图X$LOGBUF_READHIST中跟踪。命中率低表示LNS经常从ORL而不是日志缓冲区读取。如果重做传输即将结束,但与重做生成速率不同步,则考虑在数据保护11G中增加日志缓冲区大小以获得更有利的命中率。这将减少或消除从ORL读取LNS的I/O开销。

思考: 我们部署Dataguard经常用什么模式,同步还是异步? 有什么影响
数据压缩
Oracle 11g之后提供了日志传输压缩技术,减少带宽对传输的影响,提高了cpu使用率。在一些带宽限制较多,cpu资源空间较大情况下可以考虑使用。
自动间隙解析(Automatic Gap Resolution)
简单说,就是不实时应用了,断档了。如果备端有问题或者网络问题DG中断,主端arch进程会不断ping备端,直到正常后,将归档日志传输过去,备端会先应用归档日志。直到可追上 standby logfile,之后才会继续实时应用。 如果归档日志有丢失,只能增量恢复。

思考: 实时应用的情况下,备端归档是怎么产生的, dg几种方式确保数据同步?
3.应用服务
我们都知道,Dataguard有两种备库应用方式,Redo Apply 和SQL Apply,也就是物理备库和逻辑备库的应用方式。
Redo Apply
主要是通过介质恢复的方式进行应用。 如下图所示,并行的介质恢复是什么意思?

Redo Apply 优势
- 完整复制,无数据类型等限制
- 高性能,管理简单
- 最佳的物理保护,主端备端都会验证
- 提供灾难恢复同时,可以只读查询和报告(11g)
- 提供灾难恢复同时,提供主端备份
- 提供灾难恢复保护同时,可提供业务对数据库做相关测试,如读写等(快照数据库)。
- 提供滚动升级(临时转换为逻辑备库)
SQL Apply
主端传输过来的数据,重新构建成sql,应用的备库,会耗用更多资源,如cpu,内存和IO等。因为是逻辑,它本身有不支持的数据类型,如XML/TEXT

优势:
- 灵活,备端可做写操作相关测试(注意别影响正常同步),如数据泵导出、临时表、报表等
- 可滚动升级
4.Dataguard保护模式
- 最高性能模式: 常用,主要使用ASYNC方式, 不影响主库性能,该模式下,不建议arch传输方式。
- 最高可用模式: SYNC方式,等待备库应用,如果超过NET_TIMEOUT设置秒数,不再等待,主库继续操作
- 最大保护模式: SYNC方式,会一直等待备库应用后,主库继续后续操作。此种方式,建议配置多个备库,只要一个备库正常,对业务影响最小。
思考:Dataguard 传输和应用的要点,主要功能和区别?
5.角色管理
- 手动切换: 常用与升级、迁移
- 故障切换: 因主端故障,需要备端切换为主端,供业务使用
6.Dataguard管理
除了使用一些命令查看视图外,可以使用Oracle EM 或者Data Guard broker 来管理Dataguard。
7.活动的备用数据库
- 提供了只读查询
- RMAN快速备份(块跟踪)
- 测试,快照数据库提供了临时测试功能
本文主要讲解Oracle Dataguard体系结构,及主要功能,具体功能特性可参见其他资料。
8.参考
- 《Oracle Dataguard handbook》
- 《Oracle19 Data Guard Concepts and Administration》