暂无图片
OGG实时同步当源端字段值为1时,目标端该字段改为0 ,当源端字段为0或空值时,目标端该字段改为1,这个好通过OGG参数去实现吗?
我来答
分享
悠悠鱼梦
2021-03-19
OGG实时同步当源端字段值为1时,目标端该字段改为0 ,当源端字段为0或空值时,目标端该字段改为1,这个好通过OGG参数去实现吗?

OGG实时同步当源端字段值为1时,目标端该字段改为0 ,当源端字段为0或空值时,目标端该字段改为1,这个好通过OGG参数去实现吗?
或者是通过触发器去实现?但是数据库主机资源紧张,用触发器会占用资源。

我来答
添加附件
收藏
分享
问题补充
5条回答
默认
最新
杨卓

上一个回复使用char字段,发现null无法进行转换,如下测试表字段类型转换为varchar2,使用上面大佬说的两种参数,可以参照如下。
使用EVAL
SQL> desc test1
Name Null? Type


ID NUMBER(38)
NAME VARCHAR2(10)
SQL> insert into test1(id) values(7);
SQL> insert into test1 values(8,null);
SQL> insert into test1 values(9,1);
SQL> insert into test1 values(10,‘1’);
SQL> insert into test1 values(11,‘0’);

map test2.test1, target test2.test1,COLMAP(usedefaults,NAME=@EVAL(NAME=‘1’,‘0’,NAME=‘0’,‘1’,‘1’));
ID NAME


     7 1
     8 1
     9 0
    10 0
    11 1
复制

map test2.test1, target test2.test1,COLMAP(usedefaults,NAME=@case(NAME,‘1’,‘0’,‘0’,‘1’,‘1’));
SQL> insert into test1(id) values(12);
SQL> insert into test1 values(13,null);
SQL> insert into test1 values(14,‘1’);
SQL> insert into test1 values(15,‘0’);
12 1
13 1
14 0
15 1

暂无图片 评论
暂无图片 有用 0
打赏 0
暂无图片
weizhao.zhang (anbob)

可以的,
colmap @Case, @Eval,@ If

暂无图片 评论
暂无图片 有用 1
打赏 1
悠悠鱼梦

能再详细点吗,@Eval,@ If这两个参数怎么用?
当源端字段值为1时,目标端该字段改为0,replicate配置:COLMAP (“CUSTOMER_ID”=“ORG_CUSTOMER_ID”, USEDEFAULTS, “CUST_NAME”=“CUST_NAME”, “ORG_ID”=“ORG_ID”, USEDEFAULTS,ENABLED=@CASE(SELF_IS_QCH,“1”,“0”));
另外一种情况,当源端字段为0或空值时,目标端该字段改为1,这个如何配置?

暂无图片 评论
暂无图片 有用 0
打赏 0
悠悠鱼梦

试着这样配置:
COLMAP (“CUSTOMER_ID”=“ORG_CUSTOMER_ID”, USEDEFAULTS, “CUST_NAME”=“CUST_NAME”, “ORG_ID”=“ORG_ID”, USEDEFAULTS,ENABLED = @EVAL (“SELF_IS_QCH”=1,“0”,“SELF_IS_QCH”=0,“1”,“SELF_IS_QCH”=NULL,“1”));

结果报错:
2021-03-22 10:33:06 INFO OGG-01298 Oracle GoldenGate Delivery for MySQL, rep1.prm: Column function diagnostic message: could not find column “0”.
2021-03-22 10:33:06 ERROR OGG-00919 Oracle GoldenGate Delivery for MySQL, rep1.prm: Error in COLMAP clause.

暂无图片 评论
暂无图片 有用 0
打赏 0
杨卓

map test2.test1, target test2.test1,COLMAP(usedefaults,CC=@case(CC,‘1’,‘0’,‘0’,‘1’,‘1’));

Source
SQL> insert into test1 values(1,1);
1 row created.
SQL> commit;
Target
select * from test1;
ID CC


     1 0
复制

Source
SQL> insert into test1 values(2,0);
SQL> insert into test1(id) values(3);
SQL> insert into test1 values(4,null);

Target
ID CC


     1 0
     2 1
     3
     4
复制

参考
https://docs.oracle.com/en/middleware/goldengate/core/19.1/reference/case.html#GUID-6517C335-E905-4FF1-83A8-72D785AFB536

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
Oracle中单个索引通常不建议超过几个字段
回答 2
已采纳
单个索引通常建议不超过3个字段。
oracle19c 哪里存放着用户的加密密码?
回答 1
select name,spare4from sys.user$;spare4 存放用户的加密密码
关库到后面的时候报ORA-03113: end-of-file on communication channel,启库的时候正常启,这是什么原因呢?
回答 1
1、检查下,对应时间点数据库例程告警日志(AlertSID.log)记录到的信息;2、初步判断与RedoLog有关;
有promethus做好的oracle监控模板可以给参考吗?
回答 1
已采纳
模板官方应该有吧。至少zabbix就有,而且随着版本升级,模板功能也在增加。不管是promethus还是zabbix这种KV类型的监控模板都是最基础的。有些其实不见得好用,即使你知道了这个时间段CPU
有没有办法不改源码。修改mysql版本号的?
回答 2
数据库端,不改代码肯定不能实现如果你在应用端展现就好说了啊。你想显示啥就显示啥。
单节点ADG环境v$managed_standby中thread#=0和thread#=1的区别及用途是什么?
回答 7
升级问题到:一般问题
使用OGG迁移oracle数据到mysql的时候怎么初始化保证不停机迁移
回答 2
已采纳
这个是可以做到生产端oracle不停机的,步骤如下:1,配置并启动oracle端的抽取进程2,根据scn导出oracle端的数据3,将导出的数据导入到一个oracle的临时库4,将临时库的数据初始化到
以下关于缓存的服务器配置参数描述,正确的是?
回答 1
已采纳
关于缓存的服务器配置参数描述,正确的是ABCDFG
执行oradim shutdown 出现ora-01017 用户名密码不正确的问题
回答 2
已采纳
oradim关闭服务和例程:SHUTDOWNSIDsid[USRPWD口令][SHUTTYPEsrvc|inst|srvc,inst][SHUTMODEa|i|n]你这个报错就是密码不正确嘛,需要跟上
MySQL如何实现插入时如果不存在则插入、存在则更新的操作?
回答 1
已采纳
在Oracle中有mergeinto来实现记录不存在就插入存在就更新的操作,MySQL没有mergeinto语法,但有replaceinto的语法,同样实现记录不存在就插入存在就更新的操作。