1. 首页 > Oracle教程 > 正文

Oracle教程FG248-Oracle GoldenGate初始数据加载实战

本文档风哥主要介绍Oracle GoldenGate初始数据加载的实战操作,包括Oracle GoldenGate初始加载的概念、方法、架构原理、参数配置、实施步骤等内容,由风哥教程参考Oracle官方文档GoldenGate文档,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 Oracle GoldenGate初始数据加载概念

Oracle GoldenGate初始数据加载(Initial Load)是指在启动增量数据复制之前,将源数据库的现有数据一次性同步到目标数据库的过程。初始加载是GoldenGate部署的关键步骤,确保源端和目标端数据的一致性起点。更多视频教程www.fgedu.net.cn

Oracle GoldenGate初始数据加载的主要特点:

  • 一次性同步现有数据到目标端
  • 支持多种加载方法(直接加载、文件加载等)
  • 可以在业务运行期间进行(在线加载)
  • 支持数据过滤和转换
  • 加载完成后可以无缝切换到增量复制

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进程将数据插入目标表
  • 事务管理:批量提交,提高加载性能
  • 错误处理:记录错误数据,支持重试
风哥提示:初始加载是GoldenGate部署的关键步骤,加载方法的选择要根据数据量、网络环境、业务需求等因素综合考虑。对于大数据量场景,建议使用并行加载或文件加载方法。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 Oracle GoldenGate初始加载规划

Oracle GoldenGate初始加载规划要点:

# 初始加载方法选择
– 数据量 < 100GB:直接加载 - 数据量 100GB - 1TB:文件加载 - 数据量 > 1TB:并行加载或分表加载

# 加载时间规划
– 选择业务低峰期进行
– 评估加载时间,避免影响业务
– 准备回滚方案

# 资源规划
– 源端:评估查询性能影响
– 目标端:评估插入性能影响
– 网络:评估带宽占用

# 数据一致性规划
– 确定加载开始SCN点
– 准备增量数据同步方案
– 制定数据校验方案

2.2 Oracle GoldenGate初始加载参数配置建议

Oracle GoldenGate初始加载参数配置建议:

# Extract参数配置
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初始加载最佳实践:

  • 选择合适的方法:根据数据量和网络环境选择加载方法
  • 业务低峰期执行:减少对业务的影响
  • 分批加载:大数据量分批次加载,降低风险
  • 监控进度:实时监控加载进度和性能
  • 数据校验:加载完成后进行数据一致性校验
  • 准备回滚方案:制定加载失败的回滚方案
生产环境建议:初始加载前要充分评估数据量、网络带宽、系统资源等因素。建议先在测试环境进行验证,确保加载方案可行。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 Oracle GoldenGate初始加载准备工作

3.1.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 目标端准备工作

# 1. 创建目标表结构
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

# 1. 登录源端GoldenGate
$ 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

# 1. 登录目标端GoldenGate
$ 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 执行初始加载

# 1. 启动初始加载Extract
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

风哥提示:初始加载完成后,要及时验证数据一致性。可以通过对比源端和目标端的记录数、校验和等方式进行验证。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 Oracle GoldenGate直接加载方法案例

以下是一个使用直接加载方法的完整案例:

# 场景:小数据量(<100GB)直接加载 # 1. 准备工作 # - 确保网络连接正常 # - 确保目标表已创建 # 2. 源端配置 GGSCI (fgedu.net.cn) 1> add extract init_direct, sourceistable
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文件加载方法案例

以下是一个使用文件加载方法的完整案例:

# 场景:大数据量(>100GB)文件加载

# 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. 重新执行初始加载
# …

生产环境建议:初始加载完成后,必须进行数据一致性校验。可以通过对比记录数、校验和、抽样对比等方式进行验证。from oracle:www.itpux.com

Part05-风哥经验总结与分享

5.1 Oracle GoldenGate初始加载总结

Oracle GoldenGate初始加载的关键要点:

  • 方法选择:根据数据量和网络环境选择合适的加载方法
  • 数据一致性:记录加载开始SCN,确保数据一致性
  • 性能优化:调整批处理大小、禁用索引约束等优化加载性能
  • 数据校验:加载完成后进行数据一致性校验
  • 回滚方案:制定加载失败的回滚方案

5.2 Oracle GoldenGate初始加载检查清单

Oracle GoldenGate初始加载部署检查清单:

# 加载前检查清单
□ 评估数据量和加载时间
□ 选择合适的加载方法
□ 确保源表已启用补充日志
□ 确保目标表已创建
□ 禁用目标表索引和约束
□ 获取加载开始SCN
□ 准备回滚方案

# 加载中检查清单
□ 监控加载进度
□ 监控源端性能影响
□ 监控目标端性能影响
□ 监控网络带宽占用

# 加载后检查清单
□ 对比源端和目标端记录数
□ 进行数据校验和对比
□ 启用目标表索引和约束
□ 启动增量复制进程
□ 验证增量复制正常

5.3 Oracle GoldenGate初始加载性能优化

Oracle GoldenGate初始加载性能优化建议:

  • 调整批处理大小:根据内存和网络环境调整FETCHBATCHSIZE
  • 禁用索引和约束:加载完成后再重建索引和启用约束
  • 使用并行加载:大数据量使用多个进程并行加载
  • 优化网络传输:使用压缩和合适的TCP参数
  • 选择合适时间:在业务低峰期进行初始加载
  • 分区加载:对大表按分区进行加载
风哥提示:GoldenGate初始加载是数据复制部署的关键步骤,加载质量直接影响后续增量复制的稳定性。建议在加载前充分评估和测试,确保加载方案可行。更多视频教程www.fgedu.net.cn

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息