验证ogg同步数据库表无主键表且目标表包含隐藏字段
问题描述:
已知:OGG在同步无主键的表时,OGG会自动设置表的全字段为主键,若目标表字段多于源表,同步过程中replicat进程可以读取insert操作但无法进行update/delete操作,从而导致replicat进程abend。
探究:Oracle12c引入了一个新特性——隐藏字段,若将目标表多的字段隐藏,ogg是否能进行正常同步。
环境准备:
在同一数据库中不同用户下进行ogg同步,源端用户oggs,目标端用户oggt。
源端创建A表结构:
SQL>create table oggs.A(id number,name varchar2(12));
目标端创建A表结构:
SQL>create table oggt.A(id number,name varchar2(12),time timestamp(6) invisible);
注:seletc * from…不会出现隐藏字段,必须显示select隐藏字段 才能显示。
OGG进程配置:
extract进程配置
extract ex
dynamicresolution
userid oggs,password oggs
exttrail ./dirdat/as
table oggs.A;
pump进程配置
extract pu
RMTHOST 127.0.0.1, MGRPORT 7909
RMTTRAIL ./dirdat/at
table oggs.A;
replicat进程配置
REPLICAT re
DBOPTIONS INTEGRATEDPARAMS(parallelism 6)
USERID oggt, PASSWORD oggt
MAP oggs.A, target oggt.A, colmap(useDefaults, oggtime=@datenow());
启动测试:
1启动源端ex、pu进程,目标端re进程;
在启动ex过程中OGG报错: ERROR OGG-02022 Logmining server does not exist on this Oracle database.
***解决方案:GGSCI>register extract ex database
2源端A表插入数据:
SQL> insert into oggs.A values(1,'a');
1 row inserted
SQL> commit;
Commit complete
SQL> select * from oggs.A;
ID NAME
---------- ------------
1 a
3目标端查询数据是否插入:
SQL> select id,name,time from oggt.A;
ID NAME TIME
---------- ------------ --------------------------------------------------------------------------------
1 a 20-9月 -19 02.06.22.000000 下午
4源端update数据:
SQL> update oggs.A set name='b' where id=1;
1 row updated
SQL> commit;
Commit complete
SQL> select * from oggs.A;
ID NAME
--------- ------------
1 b
5目标端查询数据是否更新:
SQL> select id,name,time from oggt.A;
ID NAME TIME
--------- ------------- --------------------------------------------------------------------------------
1 a 20-9月 -19 02.06.22.000000 下午
6查看目标端OGG replicat进程报告:
GGSCI>view report re
2019-09-20 14:15:28 ERROR OGG-01296 Error mapping from OGGS.A to OGGT.A.
2019-09-20 14:15:34 ERROR OGG-01668 PROCESS ABENDING.
Report at 2019-09-20 14:15:34 (activity since 2019-09-20 14:06:22)
From Table OGGS.A to OGGT.A:
# inserts: 1
# updates: 0
# deletes: 0
# discards: 1
显示插入一个数据,丢弃一个数据。
结果:同步失败。
*若给re进程重新配置,添加指定keycols(id,name)
REPLICAT re
DBOPTIONS INTEGRATEDPARAMS(parallelism 6)
USERID oggt, PASSWORD oggt
MAP oggs.A, target oggt.A, keycols(id,name),colmap(useDefaults, time=@datenow());
*重启re进程,目标端查询数据:
SQL> select id,name,time from oggt.A;
ID NAME TIME
---------- ------------ --------------------------------------------------------------------------------
1 b 20-9月 -19 02.29.07.000000 下午
GGSCI>view report re
Report at 2019-09-20 14:36:31 (activity since 2019-09-20 14:29:07)
From Table OGGS.A to OGGT.A:
# inserts: 1
# updates: 1
# deletes: 0
# discards: 0
显示插入一个数据,更新一个数据。
结果:同步正常进行
结论:在同步无主键的表时,即使将目标表的多出的字段隐藏,若不指定keycols,同样会导致OGG 同步update、delete失败。
因此,在同步没有主键的表时,且目标字段与源字段数量不同,此时需在进程中配置keycols或在同步开始之前在数据库中为需要同步的表设定主键。
验证ogg同步数据库表无主键表且目标表包含隐藏字段的更多相关文章
- sqlserver 批量修改数据库表主键名称为PK_表名
1.我们在创建sqlserver得数据表的主键的时候,有时会出现,后面加一串随机字符串的情况,如图所示: 2.如果你有强迫症的话,可以使用以下sql脚本进行修改,将主键的名称修改为PK_表名. --将 ...
- 一个7重嵌套表EF添加语句,注意子表赋值过程中只需写子表主键赋值,不需要写子表外键=父表主键。EF创建时会自动将子表外键设为与父表主键相等
AIRPORT_HELIPORT tt = new AIRPORT_HELIPORT() { AIRPORT_HELIPORT_UUID = Gui ...
- 利用rowid删除数据库中无主键的相同记录
数据库中表没有添加主键,误插入了两条数据,现在需要删除其中一条记录. 利用rowid号,因为表中的每一行数据都有一个rowid,这个rowid 号是不同的,用select可以查询出来. select ...
- Postgres——pgadmin复制无主键单表至本地数据库
数据库中存在无主键单表gongan_address_all ,需要将余杭区数据导出成另外一张表,因为数据量太大,sql语句效率太差. 通过sql语句查询出余杭区数据,并导出成csv,sql等格式,再导 ...
- SQLSERVER清空(Truncate)被外键引用的数据表
前言:我们知道SQLSERVER清空数据表有两种方式Delete和Truncate,当然两者的不同大家也都知道(不清楚的可以MSDN).不过这个错误“Cannot truncate table be ...
- 使用GUID作为数据表主键的好处(转)
http://blog.itpub.net/3875/viewspace-789520/ 分类: 数据库开发技术 使用GUID作为数据表主键的好处 [@more@] 使用GUID作为数据表主键的好处 ...
- mysql之字段的修改,添加、删除,多表关系(外键),单表详细操作(增删改)
字段的修改.添加和删除 create table tf1( id int primary key auto_increment, x int, y int ); #修改 alter table tf1 ...
- django中有外键关系两张表的相互查找方法
两张通过外键联系的表,如何在一张表上根据另一张表上的属性查找满足条件的对象集? 1 平常查找表中数据的条件是python中已有的数据类型,通过名字可以直接查找.如果条件是表中外键列所对应表的某一列, ...
- SSIS 系列 - 在 SSIS 中使用 Multicast Task 将数据源数据同时写入多个目标表,备份数据表,以及写入Audit 信息
转自http://www.cnblogs.com/biwork/p/3328838.html 在 SSIS Data Flow 中有一个 Multicast 组件,它的作用和 Merge, Merge ...
随机推荐
- maven:读取程序版本号的三种方案
方案1在应用项目中,如果应用程序需要获取当前程序的版本号,可以读取”/META-INF/maven/${groupId}/${artifactId}/pom.properties“,获取maven生成 ...
- MySQL中Count函数的参数该传入什么样的值?
MySQL中Count函数的参数该传入什么样的值? 查询用户表中总记录 用户表中信息如下: 1.SELECT COUNT(*) FROM USER 结果为:3条 2. SELECT COUNT(us ...
- 74HC595 8位移位寄存器的使用小结
请查看我的博客园文章,比较详细. https://www.cnblogs.com/CodeWorkerLiMing/p/11964258.html
- (转)虚拟文件系统(VFS)浅析
http://www.cnblogs.com/zsw-1993/p/5048144.html 在我看来, "虚拟"二字主要有两层含义: 1, 在同一个目录结构中, 可以挂载着若干种 ...
- Euclid`s Game
题目 给定两个整数 a 和 b,Stan和Ollie轮流从较大的数字中减去较小的数的倍数.这里的倍数是指1倍.2倍这样的整数倍,并且相减后的结果不能小于0.Stan先手,在自己的回合将其中一个数变成零 ...
- Codeforces 1038 D. Slime
[传送门] 其实就是这些数字前面能加正负号,在满足正负号均出现的情况下价值最大.那么就可以无脑DP$f[i][j][k]$表示到了第$i$位,正号是否出现($j$.$k$为$0$或$1$)能得到的最大 ...
- [GXOI/GZOI2019]旅行者 (最短路)
题意 给定一个有向图,其中一些顶点为关键点.求这些关键点两两之间最小距离. 题解 考试时没怎么想写了50分暴力走了.以为是什么强连通分量的解法,结果就是个最短路.直接从关键点跑一次最短路dis[0], ...
- 简单双向链表的实现&新约瑟夫问题
题目描述: 给定m个人,从s开始报数,数字顺加,报到n的人出列,然后数字顺减报到k的人出列,求出列顺序 样例输入: 8 1 3 2 样例输出: 3 6 1 5 2 8 4 7 分析: 约瑟夫问题主要就 ...
- 洛谷 P2577 [ZJOI2005]午餐 题解
每日一题 day56 打卡 Analysis 算法:贪心+dp 容易想到贪心:吃饭慢的先打饭节约时间, 所以先将人按吃饭时间从大到小排序. 然后就是dp了: 首先,应该想到f[i][j][k]:前i个 ...
- [转载]sql server死锁
SQL Server Deadlocks by Examplehttps://www.red-gate.com/simple-talk/sql/performance/sql-server-deadl ...