• 验证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));

    clip_image001

    目标端创建A表结构:

    SQL>create table oggt.A(id number,name varchar2(12),time timestamp(6) invisible);

    clip_image002

    注: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或在同步开始之前在数据库中为需要同步的表设定主键。

  • 相关阅读:
    Java高级项目实战02:客户关系管理系统CRM系统模块分析与介绍
    Java高级项目实战之CRM系统01:CRM系统概念和分类、企业项目开发流程
    Java字符串编码
    Java线程有哪些不太为人所知的技巧与用法?
    捕获异常之使用SLF4J和Logback
    捕获异常之使用Log4j
    Idea 热部署插件JRebel 安装与环境配置-上海尚学堂Java培训
    Java变量常量声明和定义
    LeetCode239 滑动窗口最大值
    LeetCode347. 前 K 个高频元素
  • 原文地址:https://www.cnblogs.com/margiex/p/11557347.html
Copyright © 2020-2023  润新知