天天看點

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程序