阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

GoldenGate中使用FILTER,COMPUTE 和SQLEXEC命令

109次阅读
没有评论

共计 2151 个字符,预计需要花费 6 分钟才能阅读完成。

本文主要介绍 OGG 中一些过滤或计算函数的用法,以及 sqlexec 的基本用法

SQLPREDICATE

在使用 OGG 初始化时,可以添加此参数到 extract 中,用于选择符合条件的记录,下面是 OGG 官方文档中的描述:

“在用 OGG 初始化数据时,使用 SQLPredicate 是比 where 或 filter 更好的一个选项。使用此语句比其它参数初始化更快,因为它直接作用于 SQL 语句,告诉 OGG 不应该取所有数据之后再过滤(这正是其它参数的运行方式),而是应该只取需要的部分。”

如下

TABLE ggs_owner.emp_details, SQLPREDICATE“where ename=’Gavin’”;

针对目标端的数据过滤,仍然可以在 replicat 上使用 where 条件进行数据过滤,即只取 extract 出来的部分数据进行投递,如下:

MAP ggs_owner.emp_details, TARGET ggs_owner.emp_details, WHERE (ename=”Gavin”);

FILTER

Filter 的功能远比 where 强大,你可以在任何有字段转换的地方使用它进行数据过滤,而 where 只能使用基本的操作符。比如,我们可以在 OGG 的这些函数(@COMPUTE, @DATE, @STRFIND, @STRNUM 等)中使用数值运算符:

‘+’,’-’,’/’,’*’或比较操作符‘>’,’<‘, ‘=’。

下面的配置示例中我们在 extract 中使用 STRFIND 函数,捕获 ename 字段中只符合相应条件的记录,配置如下:

TABLE ggs_owner.emp_details,FILTER (@STRFIND (ename,“Gavin”) > 0);

COMPUTE

接下来的示例讲解如何使用 @COMPUTE 函数,本示例中基于某原始字段值,计算同一张表中其它字段的值。

在本示例中的目标表 EMP 与源表结构不同,目标表上有多出来的一个字段 COMM。COMM 字段的值由源字段 SAL*1.1 计算得到。由于两边表结构不同,因此,我们需要先用 defgen 程序创建一个定义文件。

首先,我们在目标端上基于 EMP 表创建 defgen 参数文件:

edit params defgen

DEFSFILE /home/Oracle/goldengate/dirsql/emp.sql
USERID ggs_owner, PASSWORD ggs_owner
TABLE ggs_owner.emp;

然后在 OGG 安装目录下执行:

[oracle@linux02 goldengate]$ ./defgen paramfile ./dirprm/defgen.prm

目标端的 replicat 参数文件定义如下,里面用到了 colmap 和 compute。colmap 中的 useDefaults 告诉 OGG,源和目标表的字段按名称自动匹配,而目标表的 comm 字段,则由源端的 sal 字段运算得到。

REPLICAT rep1
USERID ggs_owner, PASSWORD *********
SOURCEDEFS /home/oracle/goldengate/dirsql/emp.sql
MAP ggs_owner.emp_details, TARGET ggs_owner.emp_details,
COLMAP (usedefaults,
comm= @compute(sal +sal *.10));

基于上面的配置进行数据同步测试,可以看到目标表中 comm 的字段值是 sal 字段值的 1.1 倍,如下:

SQL> select * from emp;

    EMPNO ENAME                    DEPTNO        SAL      COMM

———- ——————– ———- ———- ———-

      1001 Gavin                        10      1000      1100

      1002 Mark                        20      2000      2200

      1003 John                        30      3000      3300

SQLEXEC

SQLEXEC 可以在 extract 或 replicat 中用于执行 SQL 语句、存储过程或 SQL 函数。比如,针对大批量的数据加载,我们可以先将表的索引删除,待数据加载完成之后,再重建索引,从而提高数据同步的性能。在下面 replicat 示例中,可以看到类似的配置示例:

REPLICAT rep1
USERID ggs_owner, PASSWORD ggs_owner
ASSUMETARGETDEFS
sqlexec“drop index loc_ind”;
MAP ggs_owner.emp_details, TARGET ggs_owner.emp_details, WHERE (location=”Sydney”);
sqlexec“create index loc_ind on emp_details(location)”;

更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-07/133611.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计2151字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中