重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛
标题:
GoldenGate 实时同步入门:从零搭建 Oracle 到 Oracle 的数据同步链路
[打印本页]
作者:
mahan
时间:
2026-5-10 21:20
标题:
GoldenGate 实时同步入门:从零搭建 Oracle 到 Oracle 的数据同步链路
数据库之间要同步数据,你第一个想到什么?
很多人会说数据泵 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,如需同步要额外配置
过滤规则:可以按表、按列、按条件过滤,只同步需要的数据
欢迎光临 重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛 (http://bbs.cqsztech.com/)
Powered by Discuz! X3.2