Oracle 12c环境下GoldenGate数据子集复制及多目标库配置咨询
嘿,针对你的两个Oracle GoldenGate相关问题,我来给你详细拆解下:
问题1:在Oracle 12c环境中使用GoldenGate,能否复制满足WHERE条件的数据子集?
当然可以!GoldenGate自带的过滤功能就能轻松实现这个需求,常用的实现方式有两种:
- 直接在
TABLE语句中加WHERE子句:在Extract进程的参数文件里,针对目标表指定过滤条件,比如只捕获薪资高于5000的员工数据:
这样Extract只会抓取符合条件的行变更,后续的传输和应用环节也只会处理这些数据。TABLE scott.emp, WHERE (sal > 5000); - 使用
FILTER子句实现复杂逻辑:如果需要更灵活的过滤规则(比如结合函数、多列判断),可以用FILTER配合GoldenGate的内置函数,比如:
👉 注意:过滤条件用到的列必须在Extract的捕获范围内,初始加载全量数据时也要同步应用相同的过滤规则,避免目标库加载不符合条件的数据。TABLE scott.emp, FILTER (@COLTEST(sal, >, 5000) AND @COLTEST(deptno, =, 10));
问题2:能否将数据从一个源库复制到两个不同目标库(对应不同模式)?
完全没问题!GoldenGate支持多目标分发的场景,主要有两种实现思路,取决于你的目标库部署方式:
场景A:两个目标库是独立服务器
这种情况需要用「主Extract + 多个Data Pump」的架构:
- 配置主Extract进程:从Oracle 12c源库捕获数据,写入本地trail文件:
EXTRACT ext_main USERIDALIAS ggsource_alias EXTTRAIL ./dirdat/source TABLE scott.*; - 配置多个Data Pump进程:每个Data Pump对应一个目标服务器,将本地trail文件转发到对应目标端的远程trail文件:
# 对应第一个目标服务器的Data Pump EXTRACT dp_target1 USERIDALIAS ggsource_alias RMTHOST target_server1, MGRPORT 7809 RMTTRAIL ./dirdat/t1 TABLE scott.*; # 对应第二个目标服务器的Data Pump EXTRACT dp_target2 USERIDALIAS ggsource_alias RMTHOST target_server2, MGRPORT 7809 RMTTRAIL ./dirdat/t2 TABLE scott.*; - 在每个目标服务器上配置独立的Replicat进程,将远程trail文件的数据映射到对应的目标模式:
# 目标服务器1的Replicat(映射到hr模式) REPLICAT rep_hr USERIDALIAS ggtarget1_alias MAP scott.*, TARGET hr.*; # 目标服务器2的Replicat(映射到finance模式) REPLICAT rep_fin USERIDALIAS ggtarget2_alias MAP scott.*, TARGET finance.*;
场景B:两个目标模式在同一服务器
这种情况更简单,只需要在目标端配置两个Replicat进程即可:
- 主Extract和Data Pump(如果需要)正常配置,生成统一的trail文件。
- 创建两个Replicat,分别映射到不同的目标模式:
# 第一个Replicat:映射到hr模式 REPLICAT rep_hr USERIDALIAS ggtarget_alias MAP scott.emp, TARGET hr.emp; MAP scott.dept, TARGET hr.dept; # 第二个Replicat:映射到finance模式 REPLICAT rep_fin USERIDALIAS ggtarget_alias MAP scott.emp, TARGET finance.emp; MAP scott.dept, TARGET finance.dept;
👉 注意事项:每个Replicat进程需要独立的参数文件和checkpoint文件,避免进程间的冲突;如果目标库是异构数据库(比如一个Oracle、一个MySQL),要确保GoldenGate支持对应的异构复制,参数配置要适配目标库的语法。
内容的提问来源于stack exchange,提问作者venkat
相关产品推荐
相关产品推荐

