本文档风哥主要介绍Oracle GoldenGate初始数据加载的实战操作,包括Oracle GoldenGate初始加载的概念、方法、架构原理、参数配置、实施步骤等内容,由风哥教程参考Oracle官方文档GoldenGate文档,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 Oracle GoldenGate初始数据加载概念
Oracle GoldenGate初始数据加载(Initial Load)是指在启动增量数据复制之前,将源数据库的现有数据一次性同步到目标数据库的过程。初始加载是GoldenGate部署的关键步骤,确保源端和目标端数据的一致性起点。更多视频教程www.fgedu.net.cn
- 一次性同步现有数据到目标端
- 支持多种加载方法(直接加载、文件加载等)
- 可以在业务运行期间进行(在线加载)
- 支持数据过滤和转换
- 加载完成后可以无缝切换到增量复制
1.2 Oracle GoldenGate初始加载方法
Oracle GoldenGate初始加载主要有以下几种方法:
- 直接加载(Direct Load):Extract直接通过网络将数据发送到Replicat
- 文件加载(File Load):Extract将数据写入文件,Replicat从文件读取
- 数据泵加载(Data Pump Load):使用数据泵传输数据文件
- 并行加载(Parallel Load):多个进程并行加载,提高性能
1.3 Oracle GoldenGate初始加载架构原理
Oracle GoldenGate初始加载架构工作原理:
- 数据提取:Extract进程从源表读取数据
- 数据传输:通过网络或文件传输到目标端
- 数据应用:Replicat进程将数据插入目标表
- 事务管理:批量提交,提高加载性能
- 错误处理:记录错误数据,支持重试
Part02-生产环境规划与建议
2.1 Oracle GoldenGate初始加载规划
Oracle GoldenGate初始加载规划要点:
– 数据量 < 100GB:直接加载 - 数据量 100GB - 1TB:文件加载 - 数据量 > 1TB:并行加载或分表加载
# 加载时间规划
– 选择业务低峰期进行
– 评估加载时间,避免影响业务
– 准备回滚方案
# 资源规划
– 源端:评估查询性能影响
– 目标端:评估插入性能影响
– 网络:评估带宽占用
# 数据一致性规划
– 确定加载开始SCN点
– 准备增量数据同步方案
– 制定数据校验方案
2.2 Oracle GoldenGate初始加载参数配置建议
Oracle GoldenGate初始加载参数配置建议:
EXTRACT initext
SETENV (NLS_LANG=”AMERICAN_AMERICA.AL32UTF8″)
SETENV (ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1)
SETENV (ORACLE_SID=fgedudb)
USERIDALIAS fgedu_ggadmin
RMTHOST 192.168.1.100, MGRPORT 7809
RMTTASK REPLICAT, GROUP initrep
# 性能参数
FETCHBATCHSIZE 5000
FLUSHBATCHES 100
# 表映射
TABLE fgedu.fgedu_orders;
TABLE fgedu.fgedu_customers;
# Replicat参数配置
REPLICAT initrep
SETENV (NLS_LANG=”AMERICAN_AMERICA.AL32UTF8″)
SETENV (ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1)
SETENV (ORACLE_SID=fgedudb_target)
USERIDALIAS fgedu_ggadmin_target
# 性能参数
BULKLOAD
INSERTAPPEND
MAXTRANS 1000
# 错误处理
HANDLECOLLISIONS
REPERror DEFAULT, ABEND
# 表映射
MAP fgedu.fgedu_orders, TARGET fgedu.fgedu_orders;
MAP fgedu.fgedu_customers, TARGET fgedu.fgedu_customers;
2.3 Oracle GoldenGate初始加载最佳实践
Oracle GoldenGate初始加载最佳实践:
- 选择合适的方法:根据数据量和网络环境选择加载方法
- 业务低峰期执行:减少对业务的影响
- 分批加载:大数据量分批次加载,降低风险
- 监控进度:实时监控加载进度和性能
- 数据校验:加载完成后进行数据一致性校验
- 准备回滚方案:制定加载失败的回滚方案
Part03-生产环境项目实施方案
3.1 Oracle GoldenGate初始加载准备工作
3.1.1 源端准备工作
SQL> SELECT table_name, num_rows, ROUND(blocks*8/1024,2) AS size_mb
FROM dba_tables
WHERE owner = ‘FGEDU’
AND table_name IN (‘FGEDU_ORDERS’, ‘FGEDU_CUSTOMERS’)
ORDER BY size_mb DESC;
TABLE_NAME NUM_ROWS SIZE_MB
—————————— ———- ———-
FGEDU_ORDERS 10000000 2048.5
FGEDU_CUSTOMERS 5000000 1024.3
# 2. 添加补充日志
GGSCI (fgedu.net.cn) 1> dblogin useridalias fgedu_ggadmin
Successfully logged into database.
GGSCI (fgedu.net.cn) 2> add trandata fgedu.fgedu_orders
Logging of supplemental redo data enabled for table FGEDU.FGEDU_ORDERS.
GGSCI (fgedu.net.cn) 3> add trandata fgedu.fgedu_customers
Logging of supplemental redo data enabled for table FGEDU.FGEDU_CUSTOMERS.
# 3. 获取当前SCN
SQL> SELECT current_scn FROM v$database;
CURRENT_SCN
———–
12345678
# 4. 记录加载开始SCN
# SCN: 12345678
3.1.2 目标端准备工作
SQL> CREATE TABLE fgedu.fgedu_orders (
order_id NUMBER(10) PRIMARY KEY,
customer_id NUMBER(10),
order_date DATE,
order_amount NUMBER(10,2),
order_status VARCHAR2(20),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Table created.
SQL> CREATE TABLE fgedu.fgedu_customers (
customer_id NUMBER(10) PRIMARY KEY,
customer_name VARCHAR2(100),
email VARCHAR2(100),
phone VARCHAR2(20),
address VARCHAR2(200),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Table created.
# 2. 禁用约束和索引(提高加载性能)
SQL> ALTER TABLE fgedu.fgedu_orders DISABLE CONSTRAINT SYS_C0012345;
SQL> ALTER INDEX fgedu.idx_orders_customer DISABLE;
# 3. 创建GoldenGate用户
SQL> CREATE USER fgedu_ggadmin_target IDENTIFIED BY password
DEFAULT TABLESPACE users
QUOTA UNLIMITED ON users;
User created.
SQL> GRANT CREATE SESSION, ALTER SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER, CREATE VIEW TO fgedu_ggadmin_target;
Grant succeeded.
SQL> GRANT DBA TO fgedu_ggadmin_target;
Grant succeeded.
3.2 Oracle GoldenGate创建初始加载Extract
3.2.1 创建初始加载Extract
$ cd /oracle/goldengate
$ ./ggsci
GGSCI (fgedu.net.cn) 1> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
# 2. 创建初始加载Extract
GGSCI (fgedu.net.cn) 2> add extract initext, sourceistable
Extract INITEXT added.
# 3. 配置初始加载Extract参数
GGSCI (fgedu.net.cn) 3> edit params initext
EXTRACT initext
SETENV (NLS_LANG=”AMERICAN_AMERICA.AL32UTF8″)
SETENV (ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1)
SETENV (ORACLE_SID=fgedudb)
USERIDALIAS fgedu_ggadmin
RMTHOST 192.168.1.100, MGRPORT 7809
RMTTASK REPLICAT, GROUP initrep
# 性能参数
FETCHBATCHSIZE 5000
FLUSHBATCHES 100
# 表映射
TABLE fgedu.fgedu_orders;
TABLE fgedu.fgedu_customers;
# 保存并退出
# 4. 验证配置
GGSCI (fgedu.net.cn) 4> view params initext
EXTRACT initext
SETENV (NLS_LANG=”AMERICAN_AMERICA.AL32UTF8″)
SETENV (ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1)
SETENV (ORACLE_SID=fgedudb)
USERIDALIAS fgedu_ggadmin
RMTHOST 192.168.1.100, MGRPORT 7809
RMTTASK REPLICAT, GROUP initrep
FETCHBATCHSIZE 5000
FLUSHBATCHES 100
TABLE fgedu.fgedu_orders;
TABLE fgedu.fgedu_customers;
3.3 Oracle GoldenGate创建初始加载Replicat
3.3.1 创建初始加载Replicat
$ cd /oracle/goldengate
$ ./ggsci
GGSCI (fgedu-target.net.cn) 1> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
# 2. 创建初始加载Replicat
GGSCI (fgedu-target.net.cn) 2> add replicat initrep, specialrun
REPLICAT added.
# 3. 配置初始加载Replicat参数
GGSCI (fgedu-target.net.cn) 3> edit params initrep
REPLICAT initrep
SETENV (NLS_LANG=”AMERICAN_AMERICA.AL32UTF8″)
SETENV (ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1)
SETENV (ORACLE_SID=fgedudb_target)
USERIDALIAS fgedu_ggadmin_target
# 性能参数
BULKLOAD
INSERTAPPEND
MAXTRANS 1000
# 错误处理
HANDLECOLLISIONS
REPERror DEFAULT, ABEND
# 表映射
MAP fgedu.fgedu_orders, TARGET fgedu.fgedu_orders;
MAP fgedu.fgedu_customers, TARGET fgedu.fgedu_customers;
# 保存并退出
# 4. 验证配置
GGSCI (fgedu-target.net.cn) 4> view params initrep
REPLICAT initrep
SETENV (NLS_LANG=”AMERICAN_AMERICA.AL32UTF8″)
SETENV (ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1)
SETENV (ORACLE_SID=fgedudb_target)
USERIDALIAS fgedu_ggadmin_target
BULKLOAD
INSERTAPPEND
MAXTRANS 1000
HANDLECOLLISIONS
REPERror DEFAULT, ABEND
MAP fgedu.fgedu_orders, TARGET fgedu.fgedu_orders;
MAP fgedu.fgedu_customers, TARGET fgedu.fgedu_customers;
3.3.2 执行初始加载
GGSCI (fgedu.net.cn) 5> start extract initext
Sending START request to MANAGER …
EXTRACT INITEXT starting
# 2. 监控加载进度
GGSCI (fgedu.net.cn) 6> info extract initext
EXTRACT INITEXT Last Started 2026-04-03 14:30:00 Status RUNNING
# 3. 查看统计信息
GGSCI (fgedu.net.cn) 7> stats extract initext
Sending STATS request to EXTRACT INITEXT …
Start of Statistics at 2026-04-03 14:35:00.
Extracting from FGEDU.FGEDU_ORDERS to FGEDU.FGEDU_ORDERS:
Total inserts 10000000.00
Total operations 10000000.00
Extracting from FGEDU.FGEDU_CUSTOMERS to FGEDU.FGEDU_CUSTOMERS:
Total inserts 5000000.00
Total operations 5000000.00
End of Statistics.
# 4. 查看报告
GGSCI (fgedu.net.cn) 8> view report initext
2026-04-03 14:30:00 INFO OGG-01057 Oracle GoldenGate Capture for Oracle, initext.prm: EXTRACT starting.
2026-04-03 14:30:00 INFO OGG-01226 Oracle GoldenGate Capture for Oracle, initext.prm: Connected to database fgedudb.
2026-04-03 14:35:00 INFO OGG-01052 Oracle GoldenGate Capture for Oracle, initext.prm: Extracting from FGEDU.FGEDU_ORDERS to FGEDU.FGEDU_ORDERS.
2026-04-03 14:40:00 INFO OGG-01052 Oracle GoldenGate Capture for Oracle, initext.prm: Extracting from FGEDU.FGEDU_CUSTOMERS to FGEDU.FGEDU_CUSTOMERS.
2026-04-03 14:45:00 INFO OGG-01051 Oracle GoldenGate Capture for Oracle, initext.prm: EXTRACT ending.
# 5. 验证加载完成
GGSCI (fgedu.net.cn) 9> info extract initext
EXTRACT INITEXT Last Started 2026-04-03 14:30:00 Status STOPPED
# 6. 在目标端验证数据
SQL> SELECT COUNT(*) FROM fgedu.fgedu_orders;
COUNT(*)
———-
10000000
SQL> SELECT COUNT(*) FROM fgedu.fgedu_customers;
COUNT(*)
———-
5000000
Part04-生产案例与实战讲解
4.1 Oracle GoldenGate直接加载方法案例
以下是一个使用直接加载方法的完整案例:
Extract INIT_DIRECT added.
GGSCI (fgedu.net.cn) 2> edit params init_direct
EXTRACT init_direct
SETENV (NLS_LANG=”AMERICAN_AMERICA.AL32UTF8″)
SETENV (ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1)
SETENV (ORACLE_SID=fgedudb)
USERIDALIAS fgedu_ggadmin
RMTHOST 192.168.1.100, MGRPORT 7809
RMTTASK REPLICAT, GROUP rep_direct
FETCHBATCHSIZE 5000
FLUSHBATCHES 100
TABLE fgedu.fgedu_orders;
# 3. 目标端配置
GGSCI (fgedu-target.net.cn) 1> add replicat rep_direct, specialrun
REPLICAT added.
GGSCI (fgedu-target.net.cn) 2> edit params rep_direct
REPLICAT rep_direct
SETENV (NLS_LANG=”AMERICAN_AMERICA.AL32UTF8″)
SETENV (ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1)
SETENV (ORACLE_SID=fgedudb_target)
USERIDALIAS fgedu_ggadmin_target
BULKLOAD
INSERTAPPEND
MAXTRANS 1000
HANDLECOLLISIONS
REPERror DEFAULT, ABEND
MAP fgedu.fgedu_orders, TARGET fgedu.fgedu_orders;
# 4. 执行加载
GGSCI (fgedu.net.cn) 3> start extract init_direct
Sending START request to MANAGER …
EXTRACT INIT_DIRECT starting
# 5. 监控进度
GGSCI (fgedu.net.cn) 4> stats extract init_direct
Sending STATS request to EXTRACT INIT_DIRECT …
Start of Statistics at 2026-04-03 15:00:00.
Extracting from FGEDU.FGEDU_ORDERS to FGEDU.FGEDU_ORDERS:
Total inserts 1000000.00
Total operations 1000000.00
End of Statistics.
# 6. 验证结果
SQL> SELECT COUNT(*) FROM fgedu.fgedu_orders;
COUNT(*)
———-
1000000
4.2 Oracle GoldenGate文件加载方法案例
以下是一个使用文件加载方法的完整案例:
# 1. 源端配置
GGSCI (fgedu.net.cn) 1> add extract init_file, sourceistable
Extract INIT_FILE added.
GGSCI (fgedu.net.cn) 2> edit params init_file
EXTRACT init_file
SETENV (NLS_LANG=”AMERICAN_AMERICA.AL32UTF8″)
SETENV (ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1)
SETENV (ORACLE_SID=fgedudb)
USERIDALIAS fgedu_ggadmin
EXTFILE /oracle/goldengate/dirdat/initfile.dat, MEGABYTES 2000, PURGE
FETCHBATCHSIZE 10000
TABLE fgedu.fgedu_orders;
# 2. 执行Extract
GGSCI (fgedu.net.cn) 3> start extract init_file
Sending START request to MANAGER …
EXTRACT INIT_FILE starting
# 3. 监控Extract进度
GGSCI (fgedu.net.cn) 4> stats extract init_file
Sending STATS request to EXTRACT INIT_FILE …
Start of Statistics at 2026-04-03 15:30:00.
Extracting from FGEDU.FGEDU_ORDERS to FGEDU.FGEDU_ORDERS:
Total inserts 10000000.00
Total operations 10000000.00
End of Statistics.
# 4. 传输文件到目标端
$ scp /oracle/goldengate/dirdat/initfile.dat oracle@192.168.1.100:/oracle/goldengate/dirdat/
# 5. 目标端配置
GGSCI (fgedu-target.net.cn) 1> add replicat rep_file, specialrun
REPLICAT added.
GGSCI (fgedu-target.net.cn) 2> edit params rep_file
REPLICAT rep_file
SETENV (NLS_LANG=”AMERICAN_AMERICA.AL32UTF8″)
SETENV (ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1)
SETENV (ORACLE_SID=fgedudb_target)
USERIDALIAS fgedu_ggadmin_target
EXTFILE /oracle/goldengate/dirdat/initfile.dat
BULKLOAD
INSERTAPPEND
MAXTRANS 2000
HANDLECOLLISIONS
REPERror DEFAULT, ABEND
MAP fgedu.fgedu_orders, TARGET fgedu.fgedu_orders;
# 6. 执行Replicat
GGSCI (fgedu-target.net.cn) 3> start replicat rep_file
Sending START request to MANAGER …
REPLICAT REP_FILE starting
# 7. 监控Replicat进度
GGSCI (fgedu-target.net.cn) 4> stats replicat rep_file
Sending STATS request to REPLICAT REP_FILE …
Start of Statistics at 2026-04-03 16:00:00.
Replicating from FGEDU.FGEDU_ORDERS to FGEDU.FGEDU_ORDERS:
Total inserts 10000000.00
Total operations 10000000.00
End of Statistics.
# 8. 验证结果
SQL> SELECT COUNT(*) FROM fgedu.fgedu_orders;
COUNT(*)
———-
10000000
4.3 Oracle GoldenGate初始加载常见问题处理
4.3.1 初始加载性能问题
# 分析原因1:Fetch Batch Size设置过小
# 解决方案:增加FETCHBATCHSIZE
GGSCI (fgedu.net.cn) 1> edit params initext
# 修改参数:FETCHBATCHSIZE 10000
# 分析原因2:网络带宽不足
# 解决方案:使用文件加载方法
# 1. 停止当前Extract
GGSCI (fgedu.net.cn) 2> stop extract initext
# 2. 修改为文件加载模式
GGSCI (fgedu.net.cn) 3> edit params initext
# 修改参数:
# 删除:RMTHOST 192.168.1.100, MGRPORT 7809
# 删除:RMTTASK REPLICAT, GROUP initrep
# 添加:EXTFILE /oracle/goldengate/dirdat/init.dat, MEGABYTES 2000, PURGE
# 3. 重新启动Extract
GGSCI (fgedu.net.cn) 4> start extract initext
# 分析原因3:目标端插入性能不足
# 解决方案:优化目标端参数
# – 禁用索引和约束
# – 使用BULKLOAD和INSERTAPPEND
# – 增加MAXTRANS参数
4.3.2 初始加载数据不一致
# 分析步骤1:对比记录数
SQL> — 源端
SQL> SELECT COUNT(*) FROM fgedu.fgedu_orders;
COUNT(*)
———-
10000000
SQL> — 目标端
SQL> SELECT COUNT(*) FROM fgedu.fgedu_orders;
COUNT(*)
———-
9999995
# 分析步骤2:查找缺失数据
SQL> — 源端
SQL> SELECT order_id FROM fgedu.fgedu_orders
MINUS
SELECT order_id FROM fgedu.fgedu_orders@dblink_target;
ORDER_ID
———-
10001
10002
10003
10004
10005
# 解决方案1:重新加载缺失数据
# 1. 创建临时Extract
GGSCI (fgedu.net.cn) 1> add extract init_fix, sourceistable
# 2. 配置参数,只加载缺失数据
GGSCI (fgedu.net.cn) 2> edit params init_fix
EXTRACT init_fix
SETENV (NLS_LANG=”AMERICAN_AMERICA.AL32UTF8″)
USERIDALIAS fgedu_ggadmin
RMTHOST 192.168.1.100, MGRPORT 7809
RMTTASK REPLICAT, GROUP rep_fix
TABLE fgedu.fgedu_orders, FILTER (order_id IN (10001, 10002, 10003, 10004, 10005));
# 3. 启动加载
GGSCI (fgedu.net.cn) 3> start extract init_fix
# 解决方案2:完全重新加载
# 1. 清空目标表
SQL> TRUNCATE TABLE fgedu.fgedu_orders;
# 2. 重新执行初始加载
# …
Part05-风哥经验总结与分享
5.1 Oracle GoldenGate初始加载总结
Oracle GoldenGate初始加载的关键要点:
- 方法选择:根据数据量和网络环境选择合适的加载方法
- 数据一致性:记录加载开始SCN,确保数据一致性
- 性能优化:调整批处理大小、禁用索引约束等优化加载性能
- 数据校验:加载完成后进行数据一致性校验
- 回滚方案:制定加载失败的回滚方案
5.2 Oracle GoldenGate初始加载检查清单
Oracle GoldenGate初始加载部署检查清单:
□ 评估数据量和加载时间
□ 选择合适的加载方法
□ 确保源表已启用补充日志
□ 确保目标表已创建
□ 禁用目标表索引和约束
□ 获取加载开始SCN
□ 准备回滚方案
# 加载中检查清单
□ 监控加载进度
□ 监控源端性能影响
□ 监控目标端性能影响
□ 监控网络带宽占用
# 加载后检查清单
□ 对比源端和目标端记录数
□ 进行数据校验和对比
□ 启用目标表索引和约束
□ 启动增量复制进程
□ 验证增量复制正常
5.3 Oracle GoldenGate初始加载性能优化
Oracle GoldenGate初始加载性能优化建议:
- 调整批处理大小:根据内存和网络环境调整FETCHBATCHSIZE
- 禁用索引和约束:加载完成后再重建索引和启用约束
- 使用并行加载:大数据量使用多个进程并行加载
- 优化网络传输:使用压缩和合适的TCP参数
- 选择合适时间:在业务低峰期进行初始加载
- 分区加载:对大表按分区进行加载
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
