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 
Name: POSPNEW.PUBJNLDEF 
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 
After  Image:                                             Partition 4   G  s   
 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.
 
Copyright (C) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
 
 
 
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
 
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
 
MANAGER     RUNNING                                           
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
 
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
 
MANAGER     RUNNING                                           
EXTRACT     RUNNING     DP_GL       00:00:00      00:00:00    
EXTRACT     RUNNING     DP_LJ1      00:00:00      00:00:02    
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文件中,如果參數中配置了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM