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基本知识和排障案例及经验、性能调优等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88863.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88863.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/88863.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络安全实践:从环境搭建到漏洞复现

要求:1.搭建docker2.使用小皮面板搭建pikachu靶场3.使用BP的爆破模块破解pikachu的登陆密码步骤4.Kail的msf复现永恒之蓝一.搭建docker1. Docker介绍Docker 是容器,可以部分完全封闭。封闭意味:一个物质(放到容器)&…

车载诊断架构 --- 诊断功能开发流程

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

mysql数据库知识

MySQL数据库详解MySQL是目前全球最流行的关系型数据库管理系统之一,以其开源免费、高效稳定、易于扩展等特点,被广泛应用于Web开发、企业级应用等场景。本文将从基础概念、核心特性到实际应用,对MySQL进行全面解析。一、MySQL的基本概念1. 关…

基于springboot的美食文化和旅游推广系统

博主介绍:java高级开发,从事互联网行业多年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言&#xff0…

Rust赋能文心大模型4.5智能开发

文心大模型4.5版本概论 文心大模型4.5是百度推出的最新一代大规模预训练语言模型,属于文心大模型(ERNIE)系列。该模型在自然语言处理(NLP)、多模态理解与生成等领域表现出色,广泛应用于智能搜索、内容创作、对话交互等场景。 核心能力 语言理解与生成 支持复杂语义理解…

前端抓包(不启动前端项目就能进行后端调试)--whistle

1、安装 1.1.安装node.js 1.2.安装whistle npm install -g whistle2.安装浏览器插件【SwitchyOmega】在谷歌浏览器应用商店下载安装即可配置proxy127.0.0.1:8989是w2 start的端口号启用代理3.启动服务(每次抓包都得启动) w2 start点击链接访问网页 http:…

kettle从入门到精通 第102课 ETL之kettle xxl-job调度kettle的两种方式

之前我们一起学习过xxl-job调度carte,采用的xxl-job执行器方式,不了解的可以查看《kettle从入门到精通 第六十一课 ETL之kettle 任务调度器,轻松使用xxl-job调用kettle中的job和trans 》 今天我们一起来学习下使用xxl-job直接使用http调用…

纯前端 JavaScript 实现数据导出到 CSV 格式

日常开发中,数据导出到文件通常有两种方式: 在后端处理,以文件流或者资源路径的方式返回;后端返回数据,前端按需处理后再触发浏览器的下载事件,已保存到本地文件。 这里介绍后者的一种零依赖的实现方式。…

香港理工大学实验室定时预约

香港理工大学实验室定时预约 文章目录香港理工大学实验室定时预约简介接单价格软件界面网站预约界面代码对爬虫、逆向感兴趣的同学可以查看文章,一对一小班教学(系统理论和实战教程)、提供接单兼职渠道:https://blog.csdn.net/weixin_35770067/article/d…

Spring AI 项目实战(十七):Spring Boot + AI + 通义千问星辰航空智能机票预订系统(附完整源码)

系列文章 序号文章名称1Spring AI 项目实战(一):Spring AI 核心模块入门2Spring AI 项目实战(二):Spring Boot + AI + DeepSeek 深度实战(附完整源码)3Spring AI 项目实战(三):Spring Boot + AI + DeepSeek 打造智能客服系统(附完整源码)4

STM32CubeMX+CLion 使用ARM_CMSIS_DSP

安装 参考: 【CLion开发stm32】如何使用DSP库 - 未知的奇迹 - 博客园 实际上这样配置会出一点小问题,现对其修改 1. 项目根目录下新建 DSP_LIB文件夹 将目录STM32CubeMX\Repository\STM32Cube_FW_G4_V1.6.1\Drivers\CMSIS\DSP下的Include文件夹和So…

深入解析C#接口实现的两种核心技术:派生继承 vs 显式实现

—— 如何优雅解决多接口冲突问题 🔍 核心概念速览 派生成员实现 类通过继承基类方法隐式满足接口实现需求 interface IIfc1 { void PrintOut(string s); }class MyBaseClass { // 基类实现方法 public void PrintOut(string s) > Console.WriteLine($"Cal…

鸿蒙项目构建配置

鸿蒙项目构建配置 参考文档 深入鸿蒙开发之后,一般会遇到以下几个问题。 每次编译的时候需要手动配置不同的 versionCode 和 versionName;在使用 git 管理代码的时候,不同的人或者不在同一台电脑上,dev eco 这个编译器需要经常…

os.machine()详解

核心功能返回硬件架构 返回字符串表示系统的硬件架构,常见值包括: x86_64:64 位 x86 架构(Intel/AMD)armv7l:32 位 ARM 架构(如树莓派 3B)aarch64:64 位 ARM 架构&#x…

linux-shell脚本

linux-shell脚本一、什么是shell脚本?二、为什么要学习shell脚本?三、脚本执行的方式3.1 bash test.sh3.2 ./test.sh3.3 source test.sh3.4 . test.sh四、变量的使用4.1 变量定义与使用4.2 避免变量混淆4.3 位置变量for循环和位置变量的结合案例4.4 read…

【嵌入式】51单片机学习笔记-Keil5软件安装教程

00. 目录 文章目录00. 目录01. Keil C51概述02. Keil C51下载03. Keil C51安装04. Keil C51注册05. 附录01. Keil C51概述 Keil C51 是德国Keil公司(现被ARM收购)开发的嵌入式开发工具,专注于8051单片机的C语言和汇编开发。它是μVision IDE…

ai之 ubuntu本地安装mineru2.1.0

MinerU 目录 一、更新内容概述写在前面的话:总体来看,2.0版本升级为全新的 VLM 解析模式,更优于以前的基础解析方式。二、MinerU 安装部署下面使用源码来进行环境安装。注意:当前状态说明推荐解决方案如果是下载插件慢可以 指定阿里源三、MinerU 使用1. 在线体验2. 命令行使…

华为昇腾NPU与NVIDIA CUDA生态兼容层开发实录:手写算子自动转换工具链(AST级代码迁移方案)

点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。 当国产AI芯片崛起遭遇生态壁垒,如何实现CUDA算子到昇腾平台的无损迁移成为关键挑…

GraphRAG Docker化部署,接入本地Ollama完整技术指南:从零基础到生产部署的系统性知识体系

相关推荐:Umi-OCR 的 Docker安装(win制作镜像,Linux(Ubuntu Server 22.04)离线部署) 一、技术背景与发展脉络 1.1 RAG技术演进历程分析 检索增强生成(RAG)技术的发展经历了三个重要…

Android 系统默认Launcher3 菜单模式双层改成单层-3

Android 系统默认自带Launcher3 菜单都为双层模式 各手机大厂的Launcher的菜单模式都为单层 如何将launcher3的菜单模式改为单层模式 mOverviewPanel = (ViewGroup) findViewById(R.id.overview_panel); mWidgetsButton = findViewById(R.id.widget_butto…