DataGuard 架构和概念整理

1. DataGuard 概述
  • 定义:DataGuard 是一种保障数据安全的高可用架构,通过搭建与主数据库同步的备用数据库,提供 Oracle 数据库的容灾、数据保护、故障恢复等功能,实现数据库快速切换与灾难性恢复。
  • 原理:日志文件从主库传输到备库,然后在备库上应用这些日志,从而使备库与主库保持同步。
  • 组成 :由一个 primary 数据库及一个或多个 standby 数据库组成,备库最多 9 个。
    • 主库:即被大部分应用访问的生产数据库,可以是单实例数据库或 RAC。
    • 备库:备库也支持单机或 RAC,备库正常为只读状态。
2. DataGuard 分类
  • 物理 DataGuard
    • 应用的是主库的归档日志,无论从逻辑结构和物理结构都与主库保持一致。
    • 通过块拷贝方式同步,使用数据库 recovery 恢复功能来应用主库的更改。
    • 通过接收并应用主库的 redo log 以介质恢复的方式 (Redo Apply) 实现同步。
  • 逻辑 DataGuard
    • 应用的是主库归档日志中提取的 SQL 语句,只需保证逻辑结构一致。
    • 通过接收 primary 数据库的 redo log 并转换成 SQL 语句,然后在 standby 数据库上执行 SQL 语句 (SQL Apply) 实现同步。
3. 日志传输
  • 概念:DataGuard 数据同步过程分为三个阶段:日志传输、日志接收、日志应用。
  • 传输方式
    • ARCH 进程(传归档日志)
      • 主库:产生日志后通过 LGWR 进程写入在线重做日志,当满足相关条件后在线重做日志会进行切换,ARC0 进程归档该日志至主库本地的归档目录 (log_archive_dest_1 配置),归档完成后,ARC1 进程将归档日志传输到备库 (log_archive_dest_2 配置)。
      • 备库:备库 RFS 进程负责接收日志。如果备库有 standby 重做日志,则把日志复制到 standby 重做日志,接着把 standby 重做日志归档至备库本地归档目录,最后应用归档日志;如果没有配置 standby 重做日志,RFS 进程接收日志后直接放到备库的归档目录下,再应用该日志。
    • LGWR 进程(传重做日志)
      • ASYNC 模式:
        • 主库:只要有新的重做日志产生,LGWR 进程将触发 LNSn(Log Network Server)进程把新生成的重做日志传输到备库。
        • 备库:RFS 进程负责接收日志。接收到日志后将其写入 standby 重做日志,如果备库开启了实时应用,就立即做日志应用,如果没有开启,则等 standby 重做日志归档后再应用。
      • SYNC 模式(不建议,会影响生产):
        • 主库:redo log buffer 中只要有新的变更产生,LGWR 进程将触发 LNSn 进程把新生成的重做日志传输到备库。
        • 备库:RFS 进程负责接收日志。接收到日志后将其写入 standby 重做日志,如果备库开启了实时应用,就立即做日志应用,如果没有开启,则等 standby 重做日志归档后再应用。这种方式备库需要给主库一个回复,证明传输成功,如果有问题一直不回复就会导致主库的 LGWR 进程一直挂起,影响主库。
  • FAL(Fetch Archive Log)进程
    • 用于解决主库产生的连续归档日志在备库接受时不连续的问题。
    • 通过 fal_clientfal_server 参数进行交互。
    • 当主库的某些日志没有成功发送到备库时,会发生归档裂缝(Archive Gap),缺失的日志就是裂缝(Gap)。
    • DG 能够自动检测并解决归档裂缝,不需要 DBA 的介入,但需要配置 fal_clientfal_server 参数。
4. 日志接收及应用
  • 日志接收

    • 备库使用 RFS(Remote File Server)进程接收日志,接收到日志后,就把日志写到 standby redo log(如果有这个就先写这个,没有这个就直接写 archived log 文件中)或者 archived log 文件中。
    • 如果写到 standby redo log 文件中,则当主库发生日志切换时,也会触发备库上的 standby redo log 的日志切换,并把这个 standby redo log 归档。
  • 日志应用

    • 应用接收到的主库日志,实现主备库的数据同步。
    • 物理备库:使用 MRP(Managed Recovery Process)进程应用日志。
    • 逻辑备库:使用 LSP(Logical Standby Process)进程应用日志。
  • 日志应用模式

    • Redo 应用:物理备库数据库专用,通过介质恢复的方式保持与 primary 数据库的同步。
    • SQL 应用:逻辑备库数据库专用,核心是通过 LogMiner 分析出 SQL 语句在 standby 端执行。
  • 日志应用服务

    • 实时应用(Real-time Apply):必须使用 standby redo log,每当日志被写入 standby redo log 时,就会触发恢复。这种方式可以减少数据库切换(switchover 或 failover)的时间。

      sql 复制代码
      ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
    • 非实时应用:在主库发生日志切换,触发备库归档操作,归档完成后触发恢复。

      sql 复制代码
      ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
5. DataGuard 三种保护模式及转换
  • 最大保护(Maximum Protection)

    • 保证主库和备库的同步,任何情况下主库的损毁都不会导致已提交数据的丢失。
    • 如果主库和备库之间的网络出现问题,或者备库本身出现问题,都会导致主库宕机。
    • 要求主库必须配置 Standby RedoLog,而备库必须使用 LGWR,SYNC,AFFIRM 方式归档到 Standby Database。
    sql 复制代码
    ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;
  • 最大可用(Maximum Availability)

    • 保证主库和备库的同步,与最大保护的区别在于当网络或备库不可用时,主库仍可以继续使用。
    • 正常情况下,主备库之间是同步的。当网络或者备库出现问题时,不会影响到主库的宕机,主库会自动转换为最高性能模式,等待备库可用时,将归档传输到备库做恢复。
    sql 复制代码
    ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY;
  • 最大性能(Maximum Performance)

    • 缺省模式,主库和备库是异步的。这种模式可能在主库出现损坏时,丢失一部分数据。
    • 保证主库性能最大化,主备库之间数据是异步传输的。即主库日志归档以后才会传输到备用库,在备库上使用归档日志文件做恢复操作。
    sql 复制代码
    ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
  • 模式转换

    • 转换为最高可用:

      sql 复制代码
      ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY;
    • 转换为最大性能:

      sql 复制代码
      ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
    • 转换为最大保护:

      sql 复制代码
      ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;
6. 总结
  • 关于 DataGuard 的架构和概念主要是需要搞懂日志的传输、接收及应用。
  • 建议阅读官方文档及《Oracle Data Guard 11g 完全参考手册》。
相关推荐
百度智能云技术站3 小时前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle
梦想平凡5 小时前
PHP 微信棋牌开发全解析:高级教程
android·数据库·oracle
夏木~7 小时前
Oracle 中什么情况下 可以使用 EXISTS 替代 IN 提高查询效率
数据库·oracle
吴冰_hogan8 小时前
MySQL InnoDB 存储引擎 Redo Log(重做日志)详解
数据库·oracle
CodeCraft Studio8 小时前
【实用技能】如何在 SQL Server 中处理 Null 或空值?
数据库·oracle·sqlserver
武汉联从信息8 小时前
浅谈ORACLE中间件SOA BPM,IDM,OID,UCM,WebcenterPortal服务器如何做迁移切换
oracle
Elastic 中国社区官方博客9 小时前
Elasticsearch:什么是查询语言?
大数据·数据库·elasticsearch·搜索引擎·oracle
夜光小兔纸10 小时前
oracle dblink 的创建及使用
数据库·oracle
Smile丶凉轩11 小时前
MySQL库的操作
数据库·mysql·oracle
p@nd@12 小时前
Oracle筑基篇-调度算法-LRU的引入
数据库·oracle·操作系统·lru