深入理解oracle ADG和RAC

1. 引言

本节详细介绍oracle ADG和RAC。当然这里讲得的详细是相对理论的深入,不涉及到实验,比如ADG和RAC的搭建及调优等。

RAC (Real Application Clusters) 和 ADG (Active Data Guard)是Oracle 的两大核心高可用和灾备技术。它们是 Oracle 数据库高可用性(HA)、灾难恢复(DR)、可扩展性和数据保护架构的基石,但解决的问题和实现方式有本质区别。

2. Oracle RAC (Real Application Clusters):

2.1 目标:

实例级高可用性 (HA) 和横向扩展 (Scale-Out)。

2.2 原理:

多个服务器(节点)共享访问同一个物理数据库(存储)。每个节点运行一个独立的 Oracle 实例(包含 SGA、后台进程等),这些实例同时挂载并打开同一个数据库文件(数据文件、控制文件、联机重做日志)。如下图

2.3 关键组件:

共享存储: SAN, NAS, ASM, Exadata Storage 等。所有节点必须能并发读写同一份数据。
集群软件: Oracle Clusterware (包括 OCR, Voting Disk) 管理节点成员、心跳检测、故障转移协调。
高速互连: 专用网络(通常是 InfiniBand 或 10GbE+)用于节点间高速缓存同步(Cache Fusion)。
SCAN (Single Client Access Name): 简化客户端连接,自动负载均衡和故障转移。

2.4 如何工作:

并行处理: 应用程序可以连接到任何一个活动节点执行操作。多个节点可以同时处理针对同一个数据库的不同事务或查询。
Cache Fusion: RAC 的核心技术。当一个节点需要访问的数据块不在其本地 SGA 中,但可能在另一个节点的 SGA 中时,它可以通过高速互连直接从其他节点的内存中获取该块(而不是从磁盘读取),极大提升性能。这涉及复杂的全局锁管理(Global Resource Directory - GRD)。
故障转移 (Failover): 如果某个节点发生故障(硬件、软件、网络):

  1. Clusterware 检测到故障。
  2. 故障节点被逐出集群。
  3. 故障节点上正在运行的事务会回滚。
  4. 客户端连接(通过 TAF/SCAN)会透明地重新连接到存活的节点。
  5. 存活的节点接管故障节点的工作负载(可能需要从磁盘重新读取一些数据块到自己的 SGA)。
  6. 数据库本身(数据文件)始终在线且可用。 服务中断时间通常很短(秒级到分钟级)。

2.5 主要优势:

高可用性: 单节点故障不影响数据库整体可用性。
可扩展性: 通过添加节点,可以线性或接近线性地提升处理能力(特别是读密集型负载,写密集型需要更谨慎设计)。
负载均衡: 工作负载可以自动或手动分配到不同节点。
透明客户端故障转移: 应用程序感知不到后端节点的变化(需配合 TAF/FAN/SCAN)。

2.6 主要局限性:

复杂性: 安装、配置、管理、调优(尤其是 Cache Fusion)比单实例复杂得多。
成本: 需要额外硬件(服务器、高速网络、共享存储)、Oracle RAC 许可证(按 CPU 核心计费)。
共享存储单点故障: 虽然存储本身通常有 RAID/镜像保护,但如果整个共享存储不可用,所有节点都会宕机。需要配合 ASM 冗余或存储级复制解决。
脑裂风险: 需要 Voting Disk 和冗余网络防止。
写扩展性: 对写冲突非常敏感的应用,扩展性可能受限(需要精心设计应用和数据分区)。
不解决数据损坏/逻辑错误: 一个节点上的误操作(如 DROP TABLE)会立即影响整个数据库。
不提供地理分散的容灾: 节点通常位于同一个数据中心内(或近距离同城)。

3. Oracle ADG (Active Data Guard):

3.1目标:

数据保护、灾难恢复 (DR)、报表/查询卸载。提供物理备用数据库。

3.2原理:

基于 Oracle 的 Redo Apply 技术。在主数据库(Primary Database)之外,维护一个或多个物理上完全相同的备用数据库(Standby Database)。主库产生的重做日志(Redo Log)实时或近实时地传输到备库,并在备库上应用(Redo Apply),使备库的数据与主库保持同步。ADG架构如下图:

3.3 关键组件:

主数据库: 生产数据库,接受读写操作。
备用数据库: 物理副本,通常(在最大可用性或最大保护模式下)处于 MOUNT 状态或 READ ONLY WITH APPLY 状态。数据文件结构与主库完全相同。
日志传输服务: 负责将主库的重做日志(归档日志或在线日志)传输到备库(使用 LGWR/ARCH 进程 + Net Services)。
日志应用服务: 在备库上,使用 MRP (Managed Recovery Process) 应用接收到的重做日志,保持数据同步。
Data Guard Broker: 可选的管理框架,简化配置、监控和角色切换。

3.4 工作模式:

物理备用: 备库是主库的逐块物理副本。通过应用重做直接修改数据文件。这是 ADG 的基础。
ADG 核心特性: 物理备库可以在应用重做的同时,以 READ ONLY 模式打开!这是与普通物理备库(只能 MOUNT)的关键区别。

  1. 只读访问: 允许在备库上执行只读查询、生成报表、运行 BI 工具等,完全不影响主库性能,也不影响重做应用。
  2. 实时查询: 从 Oracle 11gR2 开始,支持实时查询,即使接收到的重做尚未完全应用到数据文件,查询也能看到最新的已传输重做所对应的数据状态(需要 STANDBY_MAX_DATA_DELAY 参数配合)。

3.5 保护模式:

最大性能 (Max Performance): 默认模式。异步传输重做。主库提交事务无需等待备库确认。提供最高主库性能,但备库可能有少量数据丢失(RPO > 0)。适用于异地灾备。
最大可用性 (Max Availability): 同步传输重做。主库提交事务需等待至少一个备库确认写入重做日志(但不一定已应用)。如果备库不可用,主库会自动降级为最大性能模式,不会挂起。平衡了高可用和数据保护(RPO ≈ 0)。适用于同城或近距离灾备。
最大保护 (Max Protection): 同步传输重做。主库提交事务必须等待至少一个备库确认重做已写入磁盘日志文件。如果所有同步备库不可用,主库会关闭,防止数据丢失。提供最高数据保护(RPO = 0),但牺牲了主库可用性。较少使用。

3.6 角色切换:

切换 (Switchover): 计划的、无损的主备角色互换。用于维护、升级等。主库变为备库,备库变为主库。操作相对简单,停机时间短。
故障转移 (Failover): 当主库发生不可恢复的故障(硬件损坏、数据中心故障)时,将备库提升 (Activate) 为新的主库。这通常是有损操作(可能有数据丢失,取决于保护模式和传输延迟),需要手动介入或 Broker 自动执行。

3.7 主要优势:

强大的灾难恢复: 提供地理上独立的数据库副本,应对站点级故障。
数据保护: 防止存储故障、数据损坏(可利用备库恢复主库)、人为误操作(可利用备库闪回或恢复)。
报表/查询卸载: 利用 ADG 的只读能力,将昂贵的只读负载(报表、BI、查询)从主库卸载到备库,显著提升主库性能和可扩展性。这是 ADG 非常核心的价值。
零数据丢失潜力: 在最大可用性/保护模式下可实现 RPO=0。
滚动升级/打补丁: 通过 Switchover,可以在备库(新主库)上先应用变更,验证后再切换回来,减少计划停机时间。
数据库快照: 可以在 ADG 备库上创建临时的、可写的快照数据库用于测试、开发,不影响主库或备库的同步。
备份卸载: 可以在备库上进行备份操作,减轻主库压力。

3.8 主要局限性:

备库只读: ADG 备库是物理只读的,不能直接接受写操作(快照数据库除外)。
延迟: 备库数据与主库存在一定的延迟(RPO),取决于网络带宽、距离、保护模式、主库负载。
资源需求: 需要额外的服务器、存储、网络带宽和 Oracle 许可证(ADG 需要额外许可,但比 RAC 便宜很多)。
不解决主库实例级故障: 主库实例崩溃,需要 RAC 或其他机制保证实例级高可用。
应用兼容性: 卸载查询到备库时,需注意只读限制(如不能修改序列)和会话状态问题。

4. RAC 与 ADG 的关系

RAC 和 ADG 是互补的技术,它们解决不同层面的问题:

4.1 RAC + ADG 黄金组合: 这是企业级高可用和灾备的最佳实践。

  1. RAC: 在主站点提供实例级高可用性,解决单台服务器故障问题,提供负载均衡和横向扩展能力。
  2. ADG: 将整个 RAC 数据库(包含所有节点共享的数据)复制到一个或多个异地站点的物理备库(可以是单实例或另一个 RAC)。提供:
    灾难恢复: 应对站点级故障。
    数据保护: 防止逻辑/物理损坏。
    报表卸载: 在备库运行只读负载,释放主 RAC 集群资源。
    效果: 实现了从服务器、实例到数据中心的多层次高可用和容灾。

4.2独立使用:

**只有 RAC:**能应对单节点故障,但无法应对共享存储故障、站点故障、数据损坏/误操作。缺乏异地容灾和查询卸载。

**只有 ADG:**能提供数据保护、容灾和查询卸载,但主库本身是单点故障(单实例)。如果主库实例宕机,需要手动 Failover 到备库,恢复时间(RTO)较长。

4.RAC 与 ADG综合对比


简单来说,RAC 是"多个人(实例)同时操作同一份文件(数据库)",解决的是干活的人(服务器)突然病倒(故障)的问题,并可以加人提高效率(扩展)。ADG 是"实时复印机",把主文件(数据库)一模一样地复制一份或多份到其他地方(备库)。主文件坏了(灾难/损坏),可以用复印件(备库)。同时,复印件可以用来查阅(只读查询),减轻主文件查阅压力(卸载)。

本文完。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,后续不定期分享DB基本知识和排障案例及经验、性能调优等。

相关推荐
花嫁代二娃34 分钟前
Linux:环境变量
linux
胚芽鞘68139 分钟前
关于java项目中maven的理解
java·数据库·maven
sun0077004 小时前
mysql索引底层原理
数据库·mysql
古希腊数通小白(ip在学)4 小时前
stp拓扑变化分类
运维·服务器·网络·智能路由器
Muxiyale5 小时前
使用spring发送邮件,部署ECS服务器
java·服务器·spring
l1x1n06 小时前
Vim 编辑器常用操作详解(新手快速上手指南)
linux·编辑器·vim
workflower7 小时前
MDSE和敏捷开发相互矛盾之处:方法论本质的冲突
数据库·软件工程·敏捷流程·极限编程
FreeBuf_7 小时前
微软365 PDF导出功能存在本地文件包含漏洞,可泄露敏感服务器数据
服务器·microsoft·pdf
Tony小周7 小时前
实现一个点击输入框可以弹出的数字软键盘控件 qt 5.12
开发语言·数据库·qt
lifallen7 小时前
Paimon 原子提交实现
java·大数据·数据结构·数据库·后端·算法