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 
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文件中,如果参数中配置了。

 
标签: OGG
posted @ 2021-11-19 15:22  耀阳居士  阅读(324)  评论(0编辑  收藏  举报