首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Oracle Goldengate副本端筛选数据

在Oracle Goldengate副本端筛选数据
EN

Stack Overflow用户
提问于 2020-02-19 14:07:56
回答 1查看 493关注 0票数 1

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

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

代码语言:javascript
复制
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‘

但是我的错误不是很明显

代码语言:javascript
复制
2020-02-19 05:47:37  ERROR   OGG-01157  Error in WHERE clause for ARADMINPI.TPOC.

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

我有什么地方做错了吗?

EN

回答 1

Stack Overflow用户

发布于 2020-02-21 08:14:34

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

代码语言:javascript
复制
MAP ARADMINPI.TPOC, TARGET PRD.TPOCFL,KEYCOLS(ID),WHERE (NAME= '?SOUVIKPOC');

在报告文件的前面部分中还应该包含有关故障的其他信息。

使用@GETENV的另一个示例

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

代码语言:javascript
复制
MAP ARADMINPI.TPOC, TARGET PRD.TPOCFL,KEYCOLS(ID),
    FILTER (@STREQ(NAME, @GETENV('OSVARIABLE', 'SOUVIKPOC')));

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

代码语言:javascript
复制
SETENV (SOUVIKPOC = 'Smith')

把所有这些放在一起:

代码语言:javascript
复制
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')));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60294048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档