今天的目标是在ogg的目标端通过REPLICAT进程FILTER数据过滤的目的, OGG 过滤函数, 满足条件才执行应用到目标库;不满足直接丢弃这条 trail 记录。把过滤后的数据推送到ActiveMQ中。
主要实现的方式,是在目标端的ogg REPLICAT进程中配置如下参数
MAP TEST.LCCONT, TARGET TEST.LCCONT,FILTER(@STREQ("CONTTYPE",'1') > 0);
MAP
TEST.LCCONT, TARGET
TEST.LCCONT
源表:
TEST.LCCONT,目标表:
TEST.LCCONT(同表同步,常见单向复制、双活其中一侧)
FILTER():OGG 过滤函数,
满足条件才执行应用到目标库;不满足直接丢弃这条 trail 记录@STREQ:OGG 内置函数
@STREQ(字段,常量) →
字符串相等比较@STREQ = String Equals,区分大小写
@STREQ("CONTTYPE",'1') > 0
等价逻辑:
当 CONTTYPE = '1' 返回1(true),否则返回0(false)⚠️重点坑点 1:字段引号写法"CONTTYPE"在 OGG 语法代表 字段名'1'代表字符串常量
WHERE CONTTYPE = '1'
@STREQ:
字符串比较如果 CONTTYPE 是数字类型 NUMBER,数据库里值是 1(数字),
@STREQ(CONTTYPE,'1') 依然可以匹配;@NUMEQ:
数值比较
@NUMEQ(CONTTYPE,1)@STREQ("CONTTYPE",'1') 返回 0 →
数据被过滤丢弃只要该行 CONTTYPE≠'1',不管新增、修改、删除,全部丢弃。
👉 场景风险:一条 UPDATE 操作:原数据 CONTTYPE='1' → 更新后 CONTTYPE='2'源端执行 UPDATE,这条变更会被 FILTER 过滤;目标库数据不会同步变更,源和目标出现不一致!
数据已经传输到 trail,只是 Replicat 丢弃;不能减少网络、trail 文件大小。如果想要源头过滤,需要把 FILTER 写在 Extract 端。
MAP TEST.LCCONT, TARGET TEST.LCCONT, FILTER (@STREQ(CONTTYPE, '1') > 0);
CONTTYPE,没有特殊字符不需要
""FILTER (@STREQ(CONTTYPE, '1'));
FILTER (@STREQ(CONTTYPE, '1') OR @STREQ(CONTTYPE, '3'));
FILTER (@NUMEQ(CONTTYPE, 1));
FILTER (@GETENV ('GGHEADER', 'OPTYPE') <> 'DELETE' AND @STREQ(CONTTYPE, '1'))查看 Replicat 报告文件
Stats replicat 查看统计:
[oracle@zlf-ogg-test-1 ggsmq191]$ ./ggsci Oracle GoldenGate for Big Data Version 19.1.0.0.13 (Build 003) Oracle GoldenGate Command Interpreter Version 19.1.0.0.220118 OGGCORE_19.1.0.0.0OGGBP_PLATFORMS_220111.1823 Linux, x64, 64bit (optimized), Generic on Jan 11 2022 19:42:00 Operating system character set identified as UTF-8. Copyright (C) 1995, 2022, Oracle and/or its affiliates. All rights reserved. GGSCI (zlf-ogg-test-1.novalocal) 1> info all Program Status Group Lag at checkpt Time Since checkpt MANAGER RUNNING REPLICAT RUNNING NEWRMQ 00:00:00 00:00:07 GGSCI (zlf-ogg-test-1.novalocal) 2> stats newrmq Sending STATS request to REPLICAT NEWRMQ ... Start of Statistics at 2026-07-29 12:37:08. DDL replication statistics: *** Total statistics since replicat started *** Operations 3.00 Mapped operations 0.00 Unmapped operations 3.00 Other operations 0.00 Excluded operations 0.00 Errors 0.00 Retried errors 0.00 Discarded errors 0.00 Ignored errors 0.00 Replicating from TEST.LCCONT to TEST.LCCONT: *** Total statistics since 2026-07-28 16:42:17 *** Total inserts 773.00 Total updates 1937.00 Total deletes 384.00 Total upserts 0.00 Total discards 0.00 Total operations 3094.00
观察:
Filtered 指标,代表被过滤丢弃的记录数量,验证过滤是否生效。


如果业务后续会更新 CONTTYPE 的值(比如从 1 改成其他值),会引发源目标不一致,设计同步方案时务必评估!
示例场景:源库:
UPDATE LISMAN.LCCONT SET CONTTYPE='2' WHERE ...;
GGSCI (zlf-ogg-test-1.novalocal) 4> view param mgr
PORT 4002
ACCESSRULE, PROG REPLICAT, IPADDR 100.100.120.100, ALLOW
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, minkeepdays 7
GGSCI (zlf-ogg-test-1.novalocal) 5> view param newrmq
REPLICAT newrmq
setenv (NLS_LANG = AMERICAN_AMERICA.ZHS16GBK)
GetEnv (JAVA_HOME)
GetEnv (PATH)
GetEnv (LD_LIBRARY_PATH)
GetEnv (LIBPATH)
TARGETDB LIBFILE libggjava.so SET property=dirprm/javaue.properties
sourceDefs /oradata/ggsmq191/dirdef/defgennewmq.def override
MAP TEST.LCCONT, TARGET TEST.LCCONT,FILTER(@STREQ("CONTTYPE",'1') > 0);
javaue.properties
### javaue.properties (GoldenGate Java Extract properties file)
gg.handlerlist=advjms,advjmslp
java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
java.naming.provider.url=failover:(tcp://100.100.12.193:61616,tcp://100.100.12.194:61616)
gg.handler.advjms.type=jms
gg.handler.advjms.destination=dynamicQueues/oggjmsQueue
gg.handler.advjms.connectionFactory=ConnectionFactory
gg.handler.advjms.format=xml
gg.handler.advjms.excludeTables=TEST.DDCLAIMUSER,TEST.DDREGISTER
gg.handler.advjmslp.type=jms
gg.handler.advjmslp.destination=dynamicQueues/oggjmsQueuelp
gg.handler.advjmslp.connectionFactory=ConnectionFactory
gg.handler.advjmslp.format=xml
### native library config ###
goldengate.userexit.nocheckpt=TRUE
goldengate.userexit.timestamp=utc
goldengate.log.logname=cuserexit
goldengate.log.level=INFO
goldengate.log.tofile=true
#goldengate.userexit.writers=javawriter
#javawriter.stats.time=3600
#javawriter.stats.numrecs=10000
#javawriter.stats.full=TRUE
#javawriter.stats.display=TRUE
jvm.bootoptions=-Xmx10240m -Xms10240m -Djava.class.path=ggjava/ggjava.jar:dirprm:/oradata/ActiveMQ/jar/activemq-all-5.14.5.jar:/oradata/ActiveMQ/jar/log4j-1.2.17.jar:/oradata/ActiveMQ/jar/slf4j-log4j12-1.7.13.jar -Dlog4j.configuration=log4j.properties
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12798004/viewspace-3177049/ ,如需转载,请注明出处,否则将追究法律责任。