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。选对方案,比会搭更重要。

相关推荐
安易算力3 小时前
昇腾CANN算子开发与MindSpore部署调优实践:从Ascend C到模型推理全链路
网络·架构
余槐i3 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
数据库小学妹3 小时前
PostgreSQL表膨胀怎么办?autovacuum清不动的根因与排查命令
数据库·postgresql·表膨胀·mvcc·数据库运维
mister_guo4 小时前
MySQL-1267错误:排序规则冲突的原因与解决方案
数据库·mysql
骇客野人4 小时前
在麒麟操作系统上 分别安装 jdk1.8, 达梦数据库,redis ,memcache 的操作实施方案和步骤
数据库·redis·memcached
美狐美颜SDK开放平台6 小时前
直播APP如何实现美白滤镜功能?视频美颜SDK技术开发方案详解
前端·数据库·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk
省钱兄--zs7 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构
用户0390614707197 小时前
PMSM 矢量控制(FOC)环路公式推导
架构
HaipengYu7 小时前
从 Config Hook 到 Server/TUI:OpenCode 插件 V1 到 V2 的架构演进
人工智能·架构
罗丹丹Luna7 小时前
移动端显示“已提交”以后:SAP 与低代码集成该怎样暴露真实状态
后端·架构