【问题标题】:Filter Data in Oracle Goldengate Replicat Side在 Oracle Goldengate Replicat 端过滤数据
【发布时间】:2020-02-19 06:07:56
【问题描述】:

我需要使用 Goldengate 将 CDC 从 Source(Oracle) 设置到 Target(BigQuery)。 我只能选择根据特定列名过滤复制端的数据。 根据以下链接: https://docs.oracle.com/en/cloud/paas/goldengate-cloud/gwuad/using-oracle-goldengate-parameter-files.html#GUID-7F405A81-B2D1-4072-B254-DC2B0EC56FBA

我已经像下面这样设置了副本

REPLICAT RPOC
TARGETDB LIBFILE libggjava.so SET property=dirprm/bqpoc.props
SOURCEDEFS /app/oracle/ogg_bigdata/dirdef/poc.def
REPORTCOUNT EVERY 1 MINUTES, RATE
GROUPTRANSOPS 500

MAP ARADMINPI.TPOC, TARGET PRD.TPOCFL,KEYCOLS(ID),WHERE (NAME= ?SOUVIKPOC);

====================================

导出 SOUVIKPOC='Smith'

但我遇到了错误

2020-02-19 05:47:37  ERROR   OGG-01157  Error in WHERE clause for ARADMINPI.TPOC.

==============================

我在这里做错了什么吗?

【问题讨论】:

    标签: oracle-golden-gate


    【解决方案1】:

    要使参数替换起作用,您需要将 ?SOUVIKPOC 括在引号中,如下所示:

    MAP ARADMINPI.TPOC, TARGET PRD.TPOCFL,KEYCOLS(ID),WHERE (NAME= '?SOUVIKPOC');
    

    报告文件中还应该有关于失败的其他信息。

    另一个使用@GETENV的例子

    另一种选择是使用@GETENV 函数而不是参数替换。这里,MAP 语句使用FILTER 子句而不是WHERE 子句:

    MAP ARADMINPI.TPOC, TARGET PRD.TPOCFL,KEYCOLS(ID),
        FILTER (@STREQ(NAME, @GETENV('OSVARIABLE', 'SOUVIKPOC')));
    

    除非您在运行GGSCI(并执行START MGR)之前设置SOUVIKPOC 环境变量,否则您需要在参数文件中添加SETENV 语句:

    SETENV (SOUVIKPOC = 'Smith')
    

    把它们放在一起:

    REPLICAT RPOC
    TARGETDB LIBFILE libggjava.so SET property=dirprm/bqpoc.props
    SOURCEDEFS /app/oracle/ogg_bigdata/dirdef/poc.def
    REPORTCOUNT EVERY 1 MINUTES, RATE
    GROUPTRANSOPS 500
    
    SETENV (SOUVIKPOC = 'Smith')
    MAP ARADMINPI.TPOC, TARGET PRD.TPOCFL,KEYCOLS(ID),
        FILTER (@STREQ(NAME, @GETENV('OSVARIABLE', 'SOUVIKPOC')));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-16
      • 2017-09-07
      • 1970-01-01
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多