天天看點

skip a transaction in goldengate(跳過一個事務OGG)

skip a transaction in goldengate(跳過一個事務OGG)

報錯如下

 2015-08-14 17:01:58  WARNING OGG-01004  Aborted grouped transaction on 'POSPNEW.PUBJNLDEF', Database error 1400 (OCI Error

 ORA-01400: cannot insert NULL into ("POSPNEW"."PUBJNLDEF"."BRNO") (status = 1400), SQL <INSERT INTO "POSPNEW"."PUBJNLDEF"

 ("BRNO","BUSTYP","CRPCOD","ONLTBL","BATTBL","ONLCHK","BATCHK") VALUES (:a0,:a1,:a2,:a3,:a4,:a5,:a6)>).

2015-08-14 17:01:58  WARNING OGG-01003  Repositioning to rba 10291 in seqno 6.

2015-08-14 17:01:58  WARNING OGG-01154  SQL error 1400 mapping POSPNEW.PUBJNLDEF to POSPNEW.PUBJNLDEF OCI Error ORA-01400:

 cannot insert NULL into ("POSPNEW"."PUBJNLDEF"."BRNO") (status = 1400), SQL <INSERT INTO "POSPNEW"."PUBJNLDEF" ("BRNO","B

USTYP","CRPCOD","ONLTBL","BATTBL","ONLCHK","BATCHK") VALUES (:a0,:a1,:a2,:a3,:a4,:a5,:a6)>.

跳過這個事務

通過上面的資訊我們知道了replicat程序rp_gl group 下在應用到了./dirdat/gl000006的RBA 10291,我們想跳過這個事務應用下一條記錄就可以,但是可不是簡單的在目前的RBA上加1,RBA必須是有OGG格式過的,如果輸入的是無效位址啟動後EXCEPTION會記錄到ggserr.log中,我們可以用OGG安裝目錄下的logdump工具來定位下一條記錄的“真正”位置

[oracle@pospjzcxdb goledengate]$ ./logdump 

Oracle GoldenGate Log File Dump Utility for Oracle

Version 12.1.2.1.0 OGGCORE_12.1.2.1.0_PLATFORMS_140727.2135.1

Copyright (C) 1995, 2014, Oracle and/or its affiliates. All rights reserved.

Logdump 5 >open   ./dirdat/gl000006

Current LogTrail is /home/oracle/goledengate/dirdat/gl000006 

Logdump 6 >pos  10291

Reading forward from RBA 10291 

Logdump 7 >n

2015/08/14 10:30:03.015.709 GGSPKUpdate          Len   168 RBA 10291 

Name: POSPNEW.PUBJNLDEF 

After  Image:                                             Partition 4   G  s   

 0028 0000 0008 ffff 0000 0000 0000 0001 0008 0000 | .(..................  

 3030 3030 3020 0002 000c 0000 3030 3030 3030 3030 | 00000 ......00000000  

 3030 0000 0008 ffff 0000 0000 0000 0001 0008 0000 | 00..................  

 3131 3131 3120 0002 000c 0000 3131 3131 3131 3131 | 11111 ......11111111  

 3131 0003 0020 0000 3131 3131 3131 2020 2020 2020 | 11... ..111111        

 2020 2020 2020 2020 2020 2020 2020 2020 2020 0004 |                   ..  

 0020 0000 2020 2020 2020 2020 2020 2020 2020 2020 | . ..                  

Logdump 8 >n

2015/08/14 10:31:05.040.594 Delete               Len    40 RBA 10583 

Before Image:                                             Partition 4   G  s   

 0000 0008 0000 3838 3838 3838 0001 0008 0000 3131 | ......888888......11  

 3131 3120 0002 000c 0000 3131 3131 3131 3131 3131 | 111 ......1111111111  

Logdump 9 >n

2015/08/14 16:19:23.013.239 Insert               Len    75 RBA 10742 

Name: POSPADM.ATMPOSPRV 

 0000 000c 0000 0008 3939 3939 3939 3939 0001 0013 | ........99999999....  

 0000 000f 3939 3939 3939 3939 3939 3939 3939 3900 | ....999999999999999.  

 0200 0700 0000 0330 3030 0003 000c 0000 0008 3030 | .......000........00  

 3030 3030 3030 0004 0005 0000 0001 20             | 000000........   

Logdump 10 >exit

pos是position的縮寫,意思是定位到replicat啟始的位置,n是next的縮寫,第一個n定位顯示出目前應用的記錄,可以看出是update 還有表的名字,還有image的值,我們要跳過這個事務當然要再輸一個n,可以看到下一個記錄的rba是 10583絕不是前面RBA簡單的加1.這樣我們就可以修改replicat程序啟動時的rba指定為10583 

[oracle@pospjzcxdb goledengate]$ ./ggsci 

Oracle GoldenGate Command Interpreter for Oracle

Version 12.1.2.1.0 OGGCORE_12.1.2.1.0_PLATFORMS_140727.2135.1_FBO

Linux, x64, 64bit (optimized), Oracle 11g on Aug  7 2014 09:14:25

Operating system character set identified as UTF-8.

GGSCI (pospjzcxdb) 1> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                           

EXTRACT     RUNNING     DP_GL       00:00:00      00:00:09    

EXTRACT     RUNNING     DP_LJ1      00:00:00      00:00:02    

EXTRACT     RUNNING     DP_LJ2      00:00:00      00:00:08    

EXTRACT     RUNNING     ET_ZXREP    00:00:00      00:00:00    

EXTRACT     RUNNING     EX_LC       00:00:00      00:00:07    

REPLICAT    ABENDED     RP_GL       06:31:55      00:03:59    

REPLICAT    RUNNING     RP_LJ1      00:00:00      00:00:03    

REPLICAT    RUNNING     RP_LJ2      00:00:00      00:00:00    

GGSCI (pospjzcxdb) 2>  alter rep rp_gl, extseqno 000006, extrba 10583

REPLICAT altered.

GGSCI (pospjzcxdb) 3> info all

EXTRACT     RUNNING     DP_GL       00:00:00      00:00:05    

EXTRACT     RUNNING     DP_LJ1      00:00:00      00:00:08    

EXTRACT     RUNNING     DP_LJ2      00:00:00      00:00:04    

EXTRACT     RUNNING     ET_ZXREP    00:00:00      00:00:06    

EXTRACT     RUNNING     EX_LC       00:00:00      00:00:03    

REPLICAT    STOPPED     RP_GL       00:00:00      00:00:02    

REPLICAT    RUNNING     RP_LJ1      00:00:00      00:00:09    

REPLICAT    RUNNING     RP_LJ2      00:00:00      00:00:06    

GGSCI (pospjzcxdb) 4> start rp_gl

Sending START request to MANAGER ...

REPLICAT RP_GL starting

GGSCI (pospjzcxdb) 5> info all

EXTRACT     RUNNING     DP_GL       00:00:00      00:00:00    

EXTRACT     RUNNING     DP_LJ2      00:00:00      00:00:09    

EXTRACT     RUNNING     ET_ZXREP    00:00:00      00:00:01    

EXTRACT     RUNNING     EX_LC       00:00:00      00:00:08    

REPLICAT    RUNNING     RP_GL       00:40:08      00:00:01    

REPLICAT    RUNNING     RP_LJ1      00:00:00      00:00:04    

REPLICAT    RUNNING     RP_LJ2      00:00:00      00:00:01     

當然如果還有失敗的事務還可以繼續next用上面的方法,不過如果有幾個連續的事務需要skip,那就可以用另外一個方法

start rep rp_gl  skiptransaction

不過跳過的事務數是未知的,同樣也會記錄到discard檔案中,如果參數中配置了。

标簽: OGG

OGG