重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 159|回复: 0
打印 上一主题 下一主题

[Oracle] GoldenGate 实时同步入门:从零搭建 Oracle 到 Oracle 的数据同步链路

[复制链接]
跳转到指定楼层
楼主
发表于 2026-5-10 21:20:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
数据库之间要同步数据,你第一个想到什么?

很多人会说数据泵 expdp/impdp。没错,数据泵适合一次性的全量迁移。但如果需要实时同步、不停服、持续复制,你需要 OGG —— Oracle GoldenGate。

今天用一篇文章讲清楚 OGG 的核心概念和搭建流程。

一、GoldenGate 是什么?
一句话:基于日志的实时数据复制工具。

它的工作原理:

Extract 进程:从源库读取 Redo Log,提取变更数据
Trail 文件:变更数据写入中间文件
Data Pump 进程:把 Trail 文件传输到目标端
Replicat 进程:在目标库回放变更
源库 Oracle ──→ Extract ──→ Trail ──→ Data Pump ──→ 网络 ──→ Trail ──→ Replicat ──→ 目标库 Oracle
和 DataGuard 的区别:

DG 是物理级复制(整个数据库),GoldenGate 是逻辑级复制(可以选表、选列)
DG 只能 Oracle 到 Oracle,GoldenGate 可以 Oracle 到 MySQL/PostgreSQL/Kafka
DG 备库默认只读,GoldenGate 目标库可以读写
二、搭建前准备
1. 源库开启 Supplemental Logging
GoldenGate 依赖 Redo Log 中的数据,需要开启补充日志。

-- 检查是否已开启
SELECT supplemental_log_data_min FROM v$database;

-- 开启
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

-- 对需要同步的表开启列级补充日志
ALTER TABLE hr.employees ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
2. 源库开启归档模式
ARCHIVE LOG LIST;
-- 如果未开启:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
3. 创建 GoldenGate 用户
-- 源库
CREATE USER ggs_owner IDENTIFIED BY "GGS#2024secure"
    DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;
GRANT DBA TO ggs_owner;
EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('ggs_owner');

-- 目标库(同样的操作)
三、安装 GoldenGate
# 解压安装包
unzip V978711-01.zip -d /u01/ogg

# 源端和目标端都要装
# 创建目录结构
cd /u01/ogg
./ggsci
GGSCI> CREATE SUBDIRS
执行后会创建以下目录:

dirdat/    -- Trail 文件
dirdef/    -- 表定义文件
dirchk/    -- 检查点文件
dirrpt/    -- 报告文件
dirpcs/    -- 进程状态
dirtmp/    -- 临时文件
四、配置源端(Extract + Data Pump)
1. 配置 Manager 进程
GGSCI> EDIT PARAMS MGR
PORT 7809
DYNAMICPORTLIST 7810-7830
AUTORESTART EXTRACT *, RETRIES 3, WAITMINUTES 5
PURGEOLDEXTRACTS /u01/ogg/dirdat/*, USECHECKPOINTS, MINKEEPDAYS 3
2. 配置 Extract 进程
GGSCI> ADD EXTRACT ext_hr, TRANLOG, BEGIN NOW
GGSCI> ADD EXTTRAIL /u01/ogg/dirdat/eh, EXTRACT ext_hr
GGSCI> EDIT PARAMS ext_hr
EXTRACT ext_hr
USERID ggs_owner, PASSWORD GGS#2024secure
EXTTRAIL /u01/ogg/dirdat/eh
TABLE hr.employees;
TABLE hr.departments;
TABLE hr.jobs;
3. 配置 Data Pump 进程
GGSCI> ADD EXTRACT pump_hr, EXTTRAILSOURCE /u01/ogg/dirdat/eh
GGSCI> ADD RMTTRAIL /u01/ogg/dirdat/rh, EXTRACT pump_hr
GGSCI> EDIT PARAMS pump_hr
EXTRACT pump_hr
USERID ggs_owner, PASSWORD GGS#2024secure
RMTHOST 192.168.1.102, MGRPORT 7809
RMTTRAIL /u01/ogg/dirdat/rh
TABLE hr.employees;
TABLE hr.departments;
TABLE hr.jobs;
五、配置目标端(Replicat)
1. 配置 Manager 进程
同源端,端口可以相同(不同机器)。

2. 配置 Replicat 进程
GGSCI> ADD REPLICAT rep_hr, EXTTRAIL /u01/ogg/dirdat/rh
GGSCI> EDIT PARAMS rep_hr
REPLICAT rep_hr
USERID ggs_owner, PASSWORD GGS#2024secure
ASSUMETARGETDEFS
MAP hr.employees, TARGET hr.employees;
MAP hr.departments, TARGET hr.departments;
MAP hr.jobs, TARGET hr.jobs;
ASSUMETARGETDEFS:源和目标表结构一致时使用,省去 DEFGEN 步骤。

六、启动同步
按顺序启动:

# 1. 两端的 Manager
GGSCI> START MGR

# 2. 源端 Extract
GGSCI> START EXTRACT ext_hr

# 3. 源端 Data Pump
GGSCI> START EXTRACT pump_hr

# 4. 目标端 Replicat
GGSCI> START REPLICAT rep_hr
验证状态:

GGSCI> INFO ALL

Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING
EXTRACT     RUNNING     EXT_HR      00:00:02      00:00:05
EXTRACT     RUNNING     PUMP_HR     00:00:01      00:00:03
REPLICAT    RUNNING     REP_HR      00:00:03      00:00:05
Lag 保持在几秒内就说明同步正常。

七、常见问题
Q1:Replicat 报 ORA-01403 数据冲突
目标库已有数据,和源库变更冲突。解决:

-- 在 Replicat 参数中添加冲突处理
MAP hr.employees, TARGET hr.employees,
    HANDLECOLLISIONS;
Q2:Extract 进程 ABENDED
最常见原因:Redo Log 被覆盖了。

-- 增加归档日志保留时间
ALTER SYSTEM SET log_archive_min_succeed_dest = 2;
Q3:同步延迟越来越大
检查:

网络带宽是否够用
目标库是否有锁等待
是否有大事务(单条 DELETE 删百万行)
大事务拆分处理:

-- 拆成每次 1 万行
BEGIN
  LOOP
    DELETE FROM big_table WHERE create_time < SYSDATE - 90 AND ROWNUM <= 10000;
    EXIT WHEN SQL%ROWCOUNT = 0;
    COMMIT;
  END LOOP;
END;
Q4:怎么做初始化同步
新搭建 GoldenGate 时,需要先把存量数据同步到目标库:

# 方法一:expdp/impdp 全量导出导入,然后启动 GoldenGate 增量同步
# 方法二:GoldenGate Initial Load
GGSCI> ADD EXTRACT initext, SOURCEISTABLE
GGSCI> EDIT PARAMS initext
EXTRACT initext
USERID ggs_owner, PASSWORD GGS#2024secure
RMTHOST 192.168.1.102, MGRPORT 7809
RMTFILE /u01/ogg/dirdat/initld
TABLE hr.*;
八、生产环境建议
密码加密:不要明文写密码,用 ENCRYPT PASSWORD 加密
监控告警:定期检查 Lag,超过 60 秒就告警
断点续传:GoldenGate 支持断点续传,网络中断后会自动恢复
DDL 同步:默认不同步 DDL,如需同步要额外配置
过滤规则:可以按表、按列、按条件过滤,只同步需要的数据

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2026-5-24 10:37 , Processed in 0.216384 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表