news 2026/7/17 16:37:35

Oracle 主从复制:构建读写分离的经典架构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Oracle 主从复制:构建读写分离的经典架构

Oracle 主从复制:构建读写分离的经典架构


前言


在前面的文章中,我们详细探讨了Oracle RAC集群、Data Guard灾备以及GoldenGate异构数据复制。这些技术从不同维度解决了数据库的高可用性和数据流动问题。但在实际业务架构中,有一个非常经典的数据库架构模式值得我们单独拿出来深入探讨——主从复制(Master-Slave Replication)


“主从复制”这个概念在MySQL中被广泛使用,但在Oracle生态中,它并不是一个单一的功能名称,而是一种架构设计模式。其核心目标是将主数据库的变更实时同步到一个或多个从属数据库,从而实现读写分离、负载分散和报表查询优化。本文将系统梳理Oracle中实现主从复制的各种技术方案,并深入实战最主流的Active Data Guard读写分离架构。


1. 什么是 Oracle 中的主从复制?


1.1 核心概念


在Oracle语境下,主从复制指的是这样一种架构:一个主库(Primary/Master)负责处理所有的写事务(INSERT、UPDATE、DELETE),同时将数据变更实时或准实时地复制到一个或多个从库(Standby/Slave)上。从库可以用于分担主库的读查询压力、执行报表分析、数据备份等任务。


从库集群主库写操作INSERT/UPDATE/DELETE读操作SELECT读操作SELECT复杂查询/报表数据同步数据同步数据同步

应用程序

主数据库
读写模式

从库1
只读模式

从库2
只读模式

从库3
报表/分析


1.2 Oracle 主从复制实现方案对比


Oracle提供了多种技术来实现主从复制架构,它们各有侧重,适用于不同的场景。


| 方案 | 技术原理 | 从库模式 | 复制粒度 | 延迟 | 适用场景 |

| :--- | :--- | :--- | :--- | :--- | :--- |

|Active Data Guard| 物理日志应用 |只读| 整库 | 极低 | 读写分离、实时报表、灾备 |

|GoldenGate| 逻辑日志捕获 |可读写| 表/列/行 | 极低 | 异构复制、数据集成、读写分离 |

|Streams| 规则驱动逻辑复制 |可读写| 表/模式 | 中低 | 灵活的逻辑复制 |

|物化视图| SQL级周期性刷新 |只读| 表/视图 | 高(异步) | 汇总数据、异步报表 |

|高级复制| 触发器/日志 |可读写| 表 | 中 | (已逐渐被取代)对等互备 |


2. 方案一:Active Data Guard —— 最主流的读写分离方案


2.1 什么是 Active Data Guard?


Active Data Guard是Oracle Data Guard的增强选件(需要企业版+额外License)。它在物理备库的基础上,允许备库在应用日志保持与主库同步的同时,以只读模式打开,对外提供查询服务。


这是目前Oracle环境下实现读写分离的首选方案,因为它具备:

  • 数据强一致性:物理备库与主库在数据块级别完全相同。
  • 极低延迟:通过实时应用(Real-Time Apply),数据延迟通常为秒级甚至亚秒级。
  • 完全透明:应用程序无需关心底层同步机制。


2.2 配置 Active Data Guard 实战步骤


假设您已经按照本系列第2篇文章配置好了一个物理备库,接下来的步骤是在此基础上启用Active Data Guard。


第一步:确保许可证和版本


确保您拥有Active Data Guard的License,且数据库版本为Oracle 11g及以上。


第二步:在备库上启动只读模式并应用日志


-- 1. 以SYSDBA登录备库 sqlplus / as sysdba -- 2. 停止当前的恢复模式(如果正在运行) ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; -- 3. 以只读模式打开数据库 ALTER DATABASE OPEN READ ONLY; -- 4. 启动实时日志应用(后台运行) ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;


执行完成后,您的备库就同时处于只读打开状态实时恢复状态。此时:

  • 用户可以连接到备库执行查询。
  • 主库的Redo日志会持续传输到备库并实时应用。
  • 备库上的查询会返回与主库高度一致的最新数据。


第三步:验证 Active Data Guard 状态


-- 在备库上查询数据库角色和打开模式 SELECT DATABASE_ROLE, OPEN_MODE FROM V$DATABASE; -- 期望结果:DATABASE_ROLE=PHYSICAL STANDBY, OPEN_MODE=READ ONLY WITH APPLY -- 查询日志应用延迟 SELECT NAME, VALUE FROM V$DATAGUARD_STATS WHERE NAME IN ('transport lag', 'apply lag'); -- 期望 'apply lag' 接近 0


2.3 应用层配置:读写分离的路由策略


启用Active Data Guard只是完成了数据库层的准备,真正的读写分离还需要在应用层或中间件层实现路由逻辑。


策略一:多数据源配置(以WebLogic为例)


在WebLogic中配置两个数据源:

  • jdbc/orcl_rw:连接到主库服务,用于所有写操作。
  • jdbc/orcl_ro:连接到备库服务,用于所有读操作。


// 伪代码示例:在应用代码中使用注解或配置实现路由 @Transactional(readOnly = false) @TargetDataSource("orcl_rw") public void createOrder(Order order) { ... } @Transactional(readOnly = true) @TargetDataSource("orcl_ro") public List<Order> queryOrders() { ... }


策略二:使用数据库服务(Service)进行路由


在主库和备库上创建不同的数据库服务:


# 在主库创建读写服务 srvctl add service -d orcl -s ORCL_RW -r orcl1,orcl2 # 在备库创建只读服务 srvctl add service -d orcl -s ORCL_RO -r orcl_stby1


应用程序根据不同业务需求,使用不同的服务名进行连接。


2.4 Active Data Guard 读写分离架构图


读取路径写入路径SYNC/ASYNC

应用服务器集群

写操作
INSERT/UPDATE/DELETE

主库服务
ORCL_RW

主库
Primary Database

读操作
SELECT/报表查询

只读服务
ORCL_RO

Active Data Guard 备库
Physical Standby
Read Only with Apply

Redo日志实时传输与应用


3. 方案二:GoldenGate 实现灵活的主从复制


当需要目标端完全可读写(例如创建额外索引、写入临时表),或者源端和目标端是异构平台时,GoldenGate是更佳选择。


3.1 GoldenGate 主从复制架构


从库(目标端)主库(源端)DataPump传输

主库
Oracle

Extract 进程

Trail File

Trail File

Replicat 进程

从库
Oracle/其他
完全可读写


3.2 GoldenGate 实现步骤概要


  1. 环境准备:源端和目标端分别安装GoldenGate软件,创建Manager进程。
  2. 全量初始化:使用RMAN、Data Pump或GoldenGate Initial Load将源库基准数据同步到目标库。
  3. 配置Extract进程:在源端创建Extract,捕获需要复制的表的变更。
  4. 配置Data Pump进程:在源端创建Pump,将Trail文件传输到目标端。
  5. 配置Replicat进程:在目标端创建Replicat,应用变更到目标表。
  6. 启动同步:依次启动Manager、Extract、Pump、Replicat进程。


3.3 对比总结


| 需求场景 | 推荐方案 |

| :--- | :--- |

| Oracle同构,备库只需读 |Active Data Guard|

| Oracle同构,备库需要写 |GoldenGate|

| 异构数据库复制 |GoldenGate|

| 只需要复制部分表 |GoldenGateStreams|

| 简单的异步汇总报表 |物化视图|


4. 方案三:物化视图 —— 异步的轻量级主从复制


4.1 什么是物化视图复制?


物化视图(Materialized View)是Oracle提供的一种基于SQL的复制机制。它本质上是在从库上创建一个存储了查询结果的物理表,并通过定期的刷新机制与主库保持同步。


4.2 配置示例


-- 在从库上创建到主库的数据库链接 CREATE DATABASE LINK primary_link CONNECT TO scott IDENTIFIED BY password USING 'ORCL_PRIMARY'; -- 在主库的源表上创建物化视图日志(记录变更) CREATE MATERIALIZED VIEW LOG ON scott.orders WITH PRIMARY KEY, ROWID (customer_id, amount); -- 在从库上创建物化视图 CREATE MATERIALIZED VIEW scott.orders_mv REFRESH FAST ON DEMAND -- 增量快速刷新,按需 START WITH SYSDATE -- 首次刷新时间 NEXT SYSDATE + 1/24 -- 后续每小时刷新一次 AS SELECT * FROM scott.orders@primary_link;


适用场景:

  • 对实时性要求不高的报表查询。
  • 需要汇总/聚合数据的场景。
  • 网络不稳定,允许较大延迟的环境。


总结


Oracle主从复制并非单一的技术,而是一个由Active Data Guard、GoldenGate、Streams、物化视图等技术组成的解决方案矩阵。对于绝大多数Oracle同构环境的读写分离需求,Active Data Guard因其强一致性、低延迟和易管理性,是当之无愧的首选方案。当涉及异构平台、目标端可写或精细化复制时,GoldenGate则展现了无与伦比的灵活性。


选择合适的主从复制方案,需要综合考量数据一致性要求、延迟容忍度、目标端读写需求、预算(License成本)等多方面因素。


在下一篇文章中,我们将上升到架构设计层面,深入探讨如何综合利用本系列所学的所有技术,设计一个完整的Oracle数据库灾难恢复方案。敬请期待!


---


如果本文对您有帮助,请随手点赞、收藏!您的支持是我持续分享深度技术内容的最大动力。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 16:37:31

计算机毕业设计之基于springboot的疫苗预约系统设计与实现

本文介绍了一款使用SpringBoot和Vue开发的疫苗预约系统&#xff0c;及其设计与实现过程。根据软件工程对软件系统开发定制的规则和标准&#xff0c;详细的介绍了系统的分析与设计过程&#xff0c;并且详细的概括了系统的开发与测试过程。本文的管理系统使用了java进行系统的后端…

作者头像 李华
网站建设 2026/7/17 16:37:12

终极CVAT计算机视觉标注工具:从零开始的高效标注完整指南

终极CVAT计算机视觉标注工具&#xff1a;从零开始的高效标注完整指南 【免费下载链接】cvat Computer Vision Annotation Tool (CVAT) is a leading platform for building high-quality visual datasets for vision AI. It offers open-source, cloud, and enterprise product…

作者头像 李华
网站建设 2026/7/17 16:36:33

SingGuard-4b多模态安全评估:文本、图像、图像文本的全面防护

SingGuard-4b多模态安全评估&#xff1a;文本、图像、图像文本的全面防护 【免费下载链接】SingGuard-4b 项目地址: https://ai.gitcode.com/hf_mirrors/inclusionAI/SingGuard-4b SingGuard-4b是一款强大的多模态安全评估工具&#xff0c;专为全面防护文本、图像及图像…

作者头像 李华
网站建设 2026/7/17 16:34:57

企业GEO优化效果怎么测?五大核心指标帮你建立可量化的评估体系

2026年的数字营销圈&#xff0c;最热的关键词非GEO莫属。数据最能说明问题——据IDC最新数据&#xff0c;2026年全球GEO市场规模预计达到220亿美元&#xff0c;中国市场更是突破942亿元人民币&#xff0c;同比暴增169.7%。但在高速增长的另一面&#xff0c;是市场的混乱与企业的…

作者头像 李华
网站建设 2026/7/17 16:34:42

CANN/asc-devkit norm3df函数文档

norm3df 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言&#xff0c;原生支持C和C标准规范&#xff0c;主要由类库和语言扩展层构成&#xff0c;提供多层级API&#xff0c;满足多维场景算子开发诉求。 项目地址: https://gitcode.com/ca…

作者头像 李华