• OGG应用进程abend报错无法insert虚拟列


    环境11.2.0.4 linux6.9 RAC2节点,ogg版本Version 12.2.0.1.160823 OGGCORE_OGGADP.12.2.0.1.0_PLATFORMS_161019.1437

    应用进程abend 观察报错信息,insert 虚拟列报错。

    总结方法:

    1.源端抽取进程,对表的列进行明确定义,抽取哪些列

    2.目标端也对列进行明确定义

    3.目标端应用需要应用源端定义列后的变更记录,因此可以说会丢失一部分的变更数据,或者重新初始化同步。

    或者另外一种方法是源端删除虚拟列.但是目标端也会抛弃一部分数据类似。

    目标端,应用进程修改
    [oracle]$ ./ggsci Oracle GoldenGate Command Interpreter for Oracle Version 12.2.0.1.1 OGGCORE_12.2.0.1.0_PLATFORMS_151211.1401_FBO Operating system character set identified as UTF-8.

    应用进程报错信息如下: view report rp02
    2020-05-20 16:57:57  INFO    OGG-06510  Using the following key columns for target table hr.a: D_ID.
    Exception in thread "main" oracle.goldengate.util.GGException: Unable to commit transaction, STATUS=ABEND, java.sql.SQLException: ORA-54013: 不允许对虚拟列执行 INSERT 操作

    如下是应用进程参数信息 GGSCI (dsapdb26) 2> edit param rp02 REPLICAT rp02 getEnv (LD_LIBRARY_PATH) TARGETDB LIBFILE libggjava.so SET property=dirprm/java.proes GROUPTRANSOPS 10 MAXTRANSOPS 10 GETUPDATEBEFORES MAP scott.a,TARGET hr.a; MAP scott.b,TARGET hr.b,filter (@GETENV ('transaction', 'csn') > 498252132);


    如下是源端抽取进程参数信息
    GGSCI> view param exta
    extract exta
    tranlogoptions dblogreader
    EXTTRAIL /ogg/ext/dirdat/ea
    USERID ogg,PASSWORD xx_scott_passwd
    TABLE scott.a ,keycols(R_ID);
    
    SQL> desc scott.a
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     R_ID                                   NOT NULL VARCHAR2(128)
     P_ID                                              VARCHAR2(128)
    ······  省略若干字段
     SQL> desc hr.a
    ERROR:
    ORA-04043: object hr.a does not exist
    GGSCI (dsapdb26) 3> info exta showch
      Current Checkpoint (position of last record read in the data source):
    Thread #: 1
    Sequence #: 3886
    RBA: 93687312
    Timestamp: 2020-05-20 16:43:37.000000
    SCN: 1.775085393 (5070052689)
    Redo File: Not Available
    

    对报错的a表进行修改参数

    思路:源端抽取参数添加表列的信息;

              目标端应用参数添加表列对照信息;

    源端抽取进程修改
    GGSCI> edit param exta TABLE scott.a,keycols(R_ID),cols(R_ID,P_ID······); GGSCI> stop exta GGSCI> start exta

    目标端进程修改
    GGSCI> edit param rp02
    MAP scott.a(R_ID,P_ID,······) ,TARGET hr.a ,keycols(R_ID),COLMAP(R_ID=R_ID,P_ID=P_ID,······),filter (@GETENV ('transaction', 'csn') > 5070052689);

    重启之后,发现a表无异常,但是应用进程的b表报错了,报错一致,也是无法对虚拟列进行insert操作!

    对报错的b表进行修改参数

    思路:源端抽取参数添加表列的信息;

              目标端应用参数添加表列对照信息;

    源端对抽取的列进行cols参数配置
    GGSCI> edit param exta TABLE scott.b,cols(D_ID,D_TYPE,LOG_xx······); GGSCI> info exta showch --找最小的 Current Checkpoint (position of last record read in the data source): Thread #: 1 Sequence #: 3886 RBA: 408493188 Timestamp: 2020-05-20 17:08:14.000000 SCN: 1.775699573 (5070666869) Redo File: Not Available Current Checkpoint (position of last record read in the data source): Thread #: 2 Sequence #: 3028 RBA: 53161628 Timestamp: 2020-05-20 17:08:14.000000 SCN: 1.775699561 (5070666857) Redo File: Not Available --目标端修改,修改前 MAP scott.b,TARGET hr.b (@GETENV ('transaction', 'csn') > 4899407917); 修改后 MAP scott.b(D_ID,D_TYPE,LOG_······) ,TARGET hr.b,COLMAP(D_ID=D_ID,D_TYPE=D_TYPE,LOG_······),filter (@GETENV ('transaction', 'csn') > 5070666857);
    重启EXT抽取进程后,重启应用REP进程
  • 相关阅读:
    android高级页面效果集锦
    2018年Android的保活方案效果统计
    程序员如何预估自己的项目开发时间?
    Google开发者大会:你不得不知的Tensorflow小技巧
    练就Java24章真经—你所不知道的工厂方法
    一个完整Java Web项目背后的密码
    怎么捕获和记录SQL Server中发生的死锁
    使用跟踪标志位分析死锁
    通过SQL Server Profiler来监视分析死锁
    SQL Server中的死锁
  • 原文地址:https://www.cnblogs.com/lvcha001/p/12928811.html
Copyright © 2020-2023  润新知