问题描述:

已知: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同步数据库表无主键表且目标表包含隐藏字段的更多相关文章

  1. sqlserver 批量修改数据库表主键名称为PK_表名

    1.我们在创建sqlserver得数据表的主键的时候,有时会出现,后面加一串随机字符串的情况,如图所示: 2.如果你有强迫症的话,可以使用以下sql脚本进行修改,将主键的名称修改为PK_表名. --将 ...

  2. 一个7重嵌套表EF添加语句,注意子表赋值过程中只需写子表主键赋值,不需要写子表外键=父表主键。EF创建时会自动将子表外键设为与父表主键相等

    AIRPORT_HELIPORT tt = new AIRPORT_HELIPORT()            {                AIRPORT_HELIPORT_UUID = Gui ...

  3. 利用rowid删除数据库中无主键的相同记录

    数据库中表没有添加主键,误插入了两条数据,现在需要删除其中一条记录. 利用rowid号,因为表中的每一行数据都有一个rowid,这个rowid 号是不同的,用select可以查询出来. select ...

  4. Postgres——pgadmin复制无主键单表至本地数据库

    数据库中存在无主键单表gongan_address_all ,需要将余杭区数据导出成另外一张表,因为数据量太大,sql语句效率太差. 通过sql语句查询出余杭区数据,并导出成csv,sql等格式,再导 ...

  5. SQLSERVER清空(Truncate)被外键引用的数据表

    前言:我们知道SQLSERVER清空数据表有两种方式Delete和Truncate,当然两者的不同大家也都知道(不清楚的可以MSDN).不过这个错误“Cannot truncate table  be ...

  6. 使用GUID作为数据表主键的好处(转)

    http://blog.itpub.net/3875/viewspace-789520/ 分类: 数据库开发技术 使用GUID作为数据表主键的好处 [@more@] 使用GUID作为数据表主键的好处 ...

  7. mysql之字段的修改,添加、删除,多表关系(外键),单表详细操作(增删改)

    字段的修改.添加和删除 create table tf1( id int primary key auto_increment, x int, y int ); #修改 alter table tf1 ...

  8. django中有外键关系两张表的相互查找方法

    两张通过外键联系的表,如何在一张表上根据另一张表上的属性查找满足条件的对象集? 1  平常查找表中数据的条件是python中已有的数据类型,通过名字可以直接查找.如果条件是表中外键列所对应表的某一列, ...

  9. SSIS 系列 - 在 SSIS 中使用 Multicast Task 将数据源数据同时写入多个目标表,备份数据表,以及写入Audit 信息

    转自http://www.cnblogs.com/biwork/p/3328838.html 在 SSIS Data Flow 中有一个 Multicast 组件,它的作用和 Merge, Merge ...

随机推荐

  1. PostgreSQL分区表实现——pg_pathman分区表管理

    该博文用于自己学习记录,内容节选自: https://github.com/digoal/blog/blob/master/201610/20161024_01.md pg_pathman 创建分区表 ...

  2. 关于 " i=i++"是否等价于"i=i+1"的问题探讨 -Java版/C版

    如题 (总结要点) 假设i=1 ,那么 i=i++ 的结果也就是2, 对吗? 不对,是1. -总结如下: 测试过程如下: 1.java版 public class Test { public stat ...

  3. Bean property ‘mapperHelper’ is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?

    spring boot 报错: Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property ...

  4. C语言入门hello world

    1.安装软件 c语言开发工具众多,初学者推荐使用Dev-Cpp 5.6.3 TDM-GCC x64 4.8.1 Setup.exe:安装过程全部默认安装即可. 2.使用Dev-Cpp编写第一个入门实例 ...

  5. 运行 npm run lint -- --fix,提示:error Use the global form of 'use strict'

    运行 npm run lint -- --fix,提示:error Use the global form of 'use strict',使用说明网址:https://eslint.org/docs ...

  6. jmeter,badboy,jar包文件 常数吞吐量计时器?

    badboy录制脚本 1.按f2 红色开始录制 URL输入:https://www.so.com/ 2.搜索框输入zxw 回车键搜索 3.选中关键字(刮例如zxw软件——>tools——> ...

  7. MapReduce的初识

    MapReduce是什么 HDFS:分布式存储系统 MapReduce:分布式计算系统 YARN:hadoop 的资源调度系统 Common:以上三大组件的底层支撑组件,主要提供基础工具包和 RPC ...

  8. SpringBoot中实现Spring容器中注入类型相同但名不同Bean

    @Bean(autowire = Autowire.BY_NAME,value = "kaptchaProducer") public Producer kaptchaProduc ...

  9. windows cmd命令查看端口占用进程

    netstat –ano|findstr [指定端口号] 通过任务管理器杀死相关的进程 方法一:使用任务管理器杀死进程打开任务管理器->查看->选择列->然后勾选PID选项,回到任务 ...

  10. python 当前时间多加一天、一小时、一分钟(转载)

    首先看下,datetime的使用 import datetime >>> print datetime.datetime.now() 2017-07-15 15:01:24.6190 ...