Oracle 高可用架构实战:RAC + Data Guard + GoldenGate 全景教程

Oracle 高可用架构实战:RAC + Data Guard + GoldenGate 全景教程

Oracle 提供了业界最完整的高可用架构体系。本文用一篇文章讲透 RAC、Data Guard、GoldenGate 三大核心组件,让你能根据业务需求选择最合适的方案。


一句话总结

Oracle 高可用 = RAC (节点级容错)+ Data Guard (站点级灾备)+ GoldenGate(异构同步),三者可组合使用,覆盖从单机房到跨地域的全场景高可用需求。


一、为什么需要 Oracle 高可用?

数据库宕机一分钟,企业损失可能上百万。Oracle 高可用架构解决三个核心问题:

问题 解决方案 目标
服务器/存储故障 RAC(Real Application Clusters) 节点故障自动切换,RTO ≈ 0
机房/城市级灾难 Data Guard 主备同步,RPO ≈ 0
异构迁移/读写分离 GoldenGate 实时复制,跨平台同步

二、Oracle RAC:多节点并行集群

2.1 什么是 RAC?

RAC(Real Application Clusters)是 Oracle 的核心高可用组件,允许多个数据库实例同时访问同一个共享数据库存储,提供:

  • 故障透明切换:一个节点宕机,其他节点自动接管
  • 负载均衡:连接分发到多个节点,提升吞吐
  • 在线扩展:加节点不停机

2.2 RAC 架构图

复制代码
        ┌──────────────────────────────────┐
        │         应用 / 中间件              │
        │    (TNS 负载均衡配置)              │
        └──────┬───────────┬───────────────┘
               │           │
    ┌──────────▼──┐    ┌───▼──────────┐
    │  Instance 1  │    │  Instance 2  │
    │  (Node 1)    │    │  (Node 2)    │
    │  SID: orcl1  │    │  SID: orcl2  │
    └──────┬───────┘    └──┬───────────┘
           │               │
           │   Cache Fusion (私有网络)
           ├───────────────┤
           │               │
    ┌──────▼───────────────▼───────────┐
    │       共享存储 (ASM / 共享磁盘)    │
    │    ┌────────┬────────┬────────┐  │
    │    │DATAFILE│CONTROL │REDO    │  │
    │    │        │FILE    │LOG     │  │
    │    └────────┴────────┴────────┘  │
    └──────────────────────────────────┘

2.3 核心组件

组件 作用
Grid Infrastructure 集群管理层,包含 Clusterware 和 ASM
ASM(Automatic Storage Management) 自动存储管理,替代传统文件系统
Voting Disk 集群成员仲裁,防止脑裂
OCR(Oracle Cluster Registry) 集群配置注册表
Cache Fusion 节点间数据块传输,通过私有网络
SCAN(Single Client Access Name) 单一接入点,客户端不感知节点变化

2.4 搭建 RAC 的关键步骤

bash 复制代码
# 1. 环境准备(两个节点都要做)
# 关闭防火墙和 SELinux
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 配置 /etc/hosts
cat >> /etc/hosts << EOF
# Public
192.168.1.101  rac1
192.168.1.102  rac2
# Private (Interconnect)
10.0.0.101     rac1-priv
10.0.0.102     rac2-priv
# VIP
192.168.1.201  rac1-vip
192.168.1.202  rac2-vip
# SCAN
192.168.1.100  rac-scan
EOF

# 2. 安装 Grid Infrastructure
# 解压并运行
cd /u01/app/19c/grid
./gridSetup.sh

# 3. 安装 Oracle Database 软件(仅安装,不建库)
cd /u01/app/oracle/product/19c/dbhome_1
./runInstaller

# 4. 用 DBCA 创建 RAC 数据库
dbca -silent -createDatabase \
  -templateName General_Purpose.dbc \
  -gdbName orcl -sid orcl \
  -createAsContainerDatabase true \
  -sysPassword xxxxx -systemPassword xxxxx \
  -storageType ASM \
  -diskGroupName +DATA \
  -nodeinfo rac1,rac2

2.5 检查 RAC 状态

bash 复制代码
# 检查集群状态
crsctl stat res -t

# 检查数据库实例
srvctl status database -d orcl

# 查看 RAC 节点信息
olsnodes -n

# 查看 ASM 磁盘组
asmcmd lsdg

# 检查 Cache Fusion 状态(互联网络)
oifcfg getif

2.6 配置客户端负载均衡

plaintext 复制代码
# tnsnames.ora
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

SCAN 是 RAC 的单一接入点,客户端只需连 SCAN 地址,Oracle 自动分发连接。


三、Oracle Data Guard:异地灾备

3.1 什么是 Data Guard?

Data Guard 是 Oracle 的灾备方案,通过维护一个或多个 Standby(备库) 来保护主库(Primary)的数据安全。

保护模式:

模式 数据安全性 性能影响 RPO
Maximum Performance(默认) 中 最小 可能丢少量数据
Maximum Availability 高 低 正常情况下不丢
Maximum Protection 最高 中 绝对不丢

3.2 两种备库类型

类型 说明 优势
Physical Standby 物理备库,块级复制,Redo Apply 数据一致性最高,性能最好
Logical Standby 逻辑备库,SQL Apply 备库可读可写,支持异构

3.3 搭建 Physical Standby 步骤

主库配置:

sql 复制代码
-- 1. 开启归档模式
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

-- 2. 开启 Force Logging
ALTER DATABASE FORCE LOGGING;

-- 3. 配置 Redo 传输参数
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary,standby)' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primary' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=standby ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby' SCOPE=BOTH;

-- 4. 创建 Standby Redo Log(比 Online Redo Log 多一组)
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 4 SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 5 SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 6 SIZE 200M;

-- 5. 配置 FAL(自动缺口解决)
ALTER SYSTEM SET FAL_SERVER='standby' SCOPE=BOTH;
ALTER SYSTEM SET FAL_CLIENT='primary' SCOPE=BOTH;

-- 6. 配置 TNS
-- 编辑 tnsnames.ora,添加 standby 的连接串

创建备库:

bash 复制代码
# 方法一:用 RMAN 从活动数据库复制(推荐,11g+)
rman TARGET sys/xxxxx@primary AUXILIARY sys/xxxxx@standby

RMAN> DUPLICATE TARGET DATABASE FOR STANDBY
      FROM ACTIVE DATABASE
      NOFILENAMECHECK;

# 方法二:用 RMAN 备份恢复
# 先在主库备份
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;

# 将备份传到备库服务器,恢复
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;

启动备库 Redo Apply:

sql 复制代码
-- 在备库执行
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

-- 验证同步状态
SELECT THREAD#, SEQUENCE#, STATUS FROM V$MANAGED_STANDBY;

3.4 Active Data Guard(ADG)

普通 Data Guard 的备库只能处于 MOUNT 状态。Active Data Guard(需付费许可)允许备库在 Redo Apply 的同时以只读模式打开,实现:

  • 读写分离:查询负载分流到备库
  • 报表卸载:报表查询不影响主库性能
  • 备份卸载:RMAN 备份可以在备库执行
sql 复制代码
-- 开启 Active Data Guard
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
ALTER DATABASE OPEN READ ONLY;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

-- 验证
SELECT OPEN_MODE, DATABASE_ROLE FROM V$DATABASE;
-- 应显示: READ ONLY WITH APPLY / PHYSICAL STANDBY

3.5 Switchover 与 Failover

sql 复制代码
-- Switchover(计划性切换,无数据丢失)
-- 在主库执行
ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY;

-- 在备库执行
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
ALTER DATABASE OPEN;

-- Failover(非计划性切换,主库不可用时)
-- 在备库执行
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
ALTER DATABASE OPEN;

-- Data Guard Broker 方式(更简单)
DGMGRL> SWITCHOVER TO standby;
DGMGRL> FAILOVER TO standby;

3.6 Data Guard 监控

sql 复制代码
-- 检查 Redo 传输延迟
SELECT NAME, VALUE, DATUM_TIME
FROM V$DATAGUARD_STATS
WHERE NAME IN ('transport lag', 'apply lag');

-- 检查归档传输状态
SELECT DEST_ID, STATUS, ERROR
FROM V$ARCHIVE_DEST
WHERE DEST_ID IN (1, 2);

-- 查看 Redo Apply 进度
SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS
FROM V$MANAGED_STANDBY;

-- 检查 GAP(归档缺口)
SELECT * FROM V$ARCHIVE_GAP;

四、Oracle GoldenGate:异构实时同步

4.1 什么是 GoldenGate?

GoldenGate 是 Oracle 的数据复制工具,支持:

  • 异构数据库同步:Oracle → MySQL / PostgreSQL / SQL Server / Kafka
  • 实时复制:基于 Redo Log / Archive Log 的 CDC(变更数据捕获)
  • 双向复制:多活架构
  • 选择性复制:只同步特定表/列

4.2 GoldenGate 架构

复制代码
源端                                    目标端
┌─────────────────┐                   ┌──────────────────┐
│   Source DB      │                   │   Target DB      │
│   (Oracle)       │                   │   (MySQL/Kafka)  │
└────────┬────────┘                   └────────▲─────────┘
         │                                     │
┌────────▼────────┐                   ┌────────┴─────────┐
│  Extract 进程    │                   │  Replicat 进程    │
│  (捕获变更)      │                   │  (应用变更)       │
└────────┬────────┘                   └────────▲─────────┘
         │                                     │
         │  ┌─────────────────────────┐        │
         └─►│  Trail Files (传输文件)  ├────────┘
            └─────────────────────────┘

4.3 配置 GoldenGate(Oracle → Oracle 单向复制)

源端配置:

sql 复制代码
-- 1. 开启数据库补充日志
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
ALTER SYSTEM ARCHIVE LOG CURRENT;

-- 2. 创建 GoldenGate 用户
CREATE USER oggadmin IDENTIFIED BY xxxxx;
GRANT DBA TO oggadmin;
bash 复制代码
# 3. 启动 GGSCI 配置
cd /u01/goldengate
./ggsci

GGSCI> DBLOGIN USERID oggadmin, PASSWORD xxxxx

# 4. 配置 Extract 进程
GGSCI> ADD EXTRACT ext1, TRANLOG, BEGIN NOW
GGSCI> ADD EXTTRAIL ./dirdat/et, EXTRACT ext1

GGSCI> EDIT PARAMS ext1
EXTRACT ext1
USERID oggadmin, PASSWORD xxxxx
RMTHOST target_host, MGRPORT 7809
RMTTRAIL ./dirdat/rt
TABLE hr.employees;
TABLE hr.departments;

# 5. 配置 Data Pump(可选,用于传输 Trail 文件)
GGSCI> ADD EXTRACT pump1, EXTTRAILSOURCE ./dirdat/et
GGSCI> ADD RMTTRAIL ./dirdat/rt, EXTRACT pump1

# 6. 启动
GGSCI> START EXTRACT ext1
GGSCI> START EXTRACT pump1

目标端配置:

bash 复制代码
GGSCI> DBLOGIN USERID oggadmin, PASSWORD xxxxx

# 1. 配置 Replicat 进程
GGSCI> ADD REPLICAT rep1, EXTTRAIL ./dirdat/rt

GGSCI> EDIT PARAMS rep1
REPLICAT rep1
USERID oggadmin, PASSWORD xxxxx
MAP hr.employees, TARGET hr.employees;
MAP hr.departments, TARGET hr.departments;

# 2. 启动
GGSCI> START REPLICAT rep1

4.4 GoldenGate 监控

bash 复制代码
GGSCI> INFO ALL              -- 查看所有进程状态
GGSCI> INFO EXTRACT ext1     -- Extract 详情
GGSCI> STATS EXTRACT ext1    -- 统计信息
GGSCI> LAG EXTRACT ext1      -- 延迟信息
GGSCI> VIEW REPORT ext1      -- 查看报告

五、方案对比与选型指南

维度 RAC Data Guard GoldenGate
解决问题 节点故障 站点灾难 异构同步
数据一致性 完全一致 近实时(取决于模式) 近实时
切换时间 自动(秒级) 手动/自动(分钟级) 无需切换
性能影响 Cache Fusion 开销 Redo 传输开销 解析 Redo 开销
备库可用性 所有节点可读写 只读(ADG)或不可用 目标库可读写
许可证费用 RAC 许可 包含在 EE 中 ADG/GG 单独收费
搭建复杂度 高(共享存储+集群) 中 中
适用场景 7×24 核心业务 灾备/读写分离 异构迁移/数据仓库

最佳组合方案

复制代码
                    ┌─ RAC Node 1 ─┐
  Primary Site:     │              ├─ Shared ASM ─┐
                    └─ RAC Node 2 ─┘              │
                                                  │
                   Data Guard (Async/Sync)         │
                                                  │
                    ┌─ RAC Node 1 ─┐              │
  Standby Site:     │              ├─ Shared ASM ─┘
                    └─ RAC Node 2 ─┘
                          │
                   GoldenGate (异构同步)
                          │
              ┌───────────┼───────────┐
              ▼           ▼           ▼
           MySQL      PostgreSQL    Kafka
          (Web应用)   (报表系统)   (数据湖)

六、生产环境最佳实践

6.1 RAC 注意事项

  1. 互联网络:必须使用私有高速网络(至少 1Gbps,推荐 10Gbps)
  2. ASM 磁盘组:DATA 和 FRA 分开,使用 Normal Redundancy
  3. 服务管理:为不同应用创建不同 Service,实现负载隔离
  4. 节点驱逐:配置 I/O Fencing,防止脑裂

6.2 Data Guard 注意事项

  1. 保护模式选择:金融系统用 Maximum Availability,一般业务用 Maximum Performance
  2. Standby Redo Log:大小与 Online Redo Log 一致,数量多一组
  3. 网络带宽:评估 Redo 生成速率,确保网络能支撑传输
  4. 定期演练:每季度做一次 Switchover 演练,验证灾备有效性
  5. 监控告警:设置 transport lag 和 apply lag 阈值告警

6.3 GoldenGate 注意事项

  1. 补充日志:确保源库开启必要的补充日志
  2. DDL 复制 :需要单独配置 DDL 支持(DDL INCLUDE)
  3. 冲突解决:双向复制需要配置冲突检测和解决策略
  4. Trail 文件清理:定期清理旧的 Trail 文件,防止磁盘满

七、常见故障排查

7.1 RAC 脑裂(Split-Brain)

bash 复制代码
# 现象:两个节点都认为对方已死,各自独立运行
# 检查 Voting Disk
crsctl query css votedisk

# 检查节点状态
olsnodes -n -s

# 解决:Voting Disk 仲裁,少数派节点会被自动驱逐
# 预防:确保互联网络稳定,配置 I/O Fencing

7.2 Data Guard Redo 传输失败

sql 复制代码
-- 检查错误
SELECT DEST_ID, STATUS, ERROR FROM V$ARCHIVE_DEST_STATUS;

-- 常见原因:
-- 1. 网络不通 → 检查防火墙和 TNS 连通性
-- 2. 密码文件不同步 → 用 orapwd 重新生成并拷贝
-- 3. 归档缺口 → 手动传输缺失的归档日志

7.3 GoldenGate 延迟过大

bash 复制代码
# 检查延迟
GGSCI> LAG EXTRACT ext1
GGSCI> LAG REPLICAT rep1

# 常见原因:
# 1. 大事务 → 拆分大事务或使用 INTEGRATED 模式
# 2. 网络带宽不足 → 压缩 Trail 文件或增加带宽
# 3. 目标端性能问题 → 优化目标端索引和触发器

八、Oracle 高可用架构版本演进

版本 关键特性
11g Active Data Guard、GoldenGate 集成
12c Multitenant(CDB/PDB)、Application Continuity
19c Automatic Indexing、Real-Time Statistics、ADG DML 重定向
23ai AI 优化、JSON 关系二元性、微服务集成增强

九、总结

需求 推荐方案 备注
服务器故障不中断 RAC 需要共享存储
机房灾难不丢数据 Data Guard Max Protection 同步模式,性能有影响
机房灾难可接受少量延迟 Data Guard Max Performance 异步模式,性能最好
读写分离/报表卸载 Active Data Guard 需 ADG 许可
Oracle → MySQL 迁移 GoldenGate 支持异构
全场景高可用 RAC + DG + GG 最完整但也最贵

系列文章


:Oracle 高可用不是一套方案打天下。小公司用 Data Guard 就够了,金融系统必须 RAC + DG,异构迁移离不开 GoldenGate。选对方案,比会搭更重要。

相关推荐
天空属于哈夫克33 天前
企业微信二次开发:精准实现关键词自动回复
架构·企业微信
晨米酱3 天前
AGENTS.md:Agent 的上下文策略层
面试·架构·agent
这个DBA有点耶3 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G3 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备3 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远3 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
码流子3 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
moMo3 天前
从固定流程到问题路由:让 LangGraph RAG 按需检索
架构
2601_962218613 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
张洛闻Eren3 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github