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

相关推荐
这个DBA有点耶1 小时前
从DBA到数据架构师(五):数据架构演进中的技术债务管理
数据库·程序人生·云原生·架构·dba·数据库管理员
沪上企服通2 小时前
高端财税的技术切面:从“可审计级旧账重建“看企业税务合规中台的架构演进
架构
Bruce_Liuxiaowei2 小时前
基于微步在线威胁情报的公网 IP 攻击迹象监测:threatbook_query 脚本全解析与 BruceSec 平台整合实践
数据库·tcp/ip·安全·网络安全·智能体
码农颜2 小时前
5.6.2 ⾏级锁死锁
数据库·sql·oracle
dogstarhuang3 小时前
大模型 API 停服怎么办:用 API 网关实现多模型统一接入与可切换架构
人工智能·后端·架构·大模型·api·数字化转型·ai应用
ChaHae-In3 小时前
MyBatis动态SQL与MyBatis-Plus高效开发指南
数据库·oracle·mybatis
冰暮流星3 小时前
mysql之分组查询
数据库·mysql
倒流时光三十年4 小时前
PostgreSQL Semi-Join(半连接)通俗讲解
数据库·postgresql
过江龙8474 小时前
Java架构师的AI转型之路(中):Agent与编排体系实战
架构
NiceCloud喜云4 小时前
腾讯云国际版云数据库选型:MySQL、Redis 怎么按业务架构来判断
数据库·mysql·腾讯云