配置GoldenGate捕获Replicat端数据应用异常

  考虑到GoldenGate对数据的逻辑处理方式,保不齐目标端可能由于什么原因,没能正确复制源端抽取到的数据,那么,默认情况下,Replicat任务会中止并抛出异常信息。这里,我们可以通过自定义的方式,定制错误的处理机制。

  异常捕获操作均在目标端进行,源端不需要做什么修改。

  首先创建一张日志表,用来记录异常信息,这个表的列可以根据实际情况进行定制,并没有强制性的标准:

create table jss.j1_data_change_log

(

  REP_NAME     VARCHAR2(30),

  OID          NUMBER,

  TABLE_NAME   VARCHAR2(30),

  OPTYPE        VARCHAR2(30),

  COMMIT_DATE  TIMESTAMP,

  DBERRNUM     NUMBER,

  DBERRMSG     VARCHAR2(4000),

  LOGRBA       NUMBER,

  LOGPOSITION  NUMBER

);

  该表必须拥有唯一索引(当然建个主键也可以的),这里考虑通过时间和日志在文件中的相对位置做唯一键:

  • create unique index uni_j1_data_clog on j1_data_change_log (logrba,logposition,commit_date);

  GoldenGate中有一个REPERROR选项,专用于replicat进程,可以用来控制replicat进程处理错误错误的方式。

  用户可以定义多个REPERROR语句,其中一个REPERROR语句设置默认情况下错误处理方式,其它的REPERROR再来分别对不同的错误指定处理逻辑。这里我们就通过REPERROR来捕获异常信息。

  在GoldenGate中修改replicat的配置,具体配置信息如下:

REPLICAT rep2

ASSUMETARGETDEFS

USERID ggate@target, PASSWORD ggate

DISCARDFILE ./dirrpt/rep2_gg2.dsc, PURGE

REPERROR (DEFAULT, EXCEPTION)

REPERROR (DEFAULT2,ABEND)

MAP jss.*, TARGET jss.*;

MAP jss.j1, target jss.j1_data_change_log,

EXCEPTIONSONLY,

INSERTALLRECORDS,

COLMAP ( rep_name = "rep2"

,oid = id

,table_name = @GETENV("GGHEADER","TABLENAME")

,optype = @GETENV ("GGHEADER", "OPTYPE")

,commit_date = @GETENV ("GGHEADER", "COMMITTIMESTAMP")

,dberrnum = @GETENV ("LASTERR", "DBERRNUM")

,dberrmsg = @GETENV ("LASTERR", "DBERRMSG")

,logrba = @GETENV ("GGHEADER", "LOGRBA")

,logposition = @GETENV ("GGHEADER", "LOGPOSITION"));

  主要意图就是通过GETENV取到想要的环境变量信息,并存入前面创建的日志表。

提示:注意MAP/COLMAP等关键字间,",/("等符号前必须要有空格,否则会遇到OGG-00212  Invalid option for MAP的错误信息。

注意2,源端对象必须执行add trandata schema.table启用表级附加日志,否则在源端执行update操作时,目前端会抛出ORA-01403错误,提示记录找不到

  当再执行同步时,目标端REPLICAT组的REPORT文件中会记录类似这样的信息:

MAP resolved (entry JSS.J1):

  MAP JSS.J1, target jss.j1_data_change_log, EXCEPTIONSONLY, INSERTALLRECORDS, COLMAP ( rep_name = "rep2" ,oid =  id ,table_name = @GETENV("GGHEADER","TABLENAME") ,optype = @GETENV ("GGHEADER", "OPTYPE") ,co

mmit_date = @GETENV ("GGHEADER", "COMMITTIMESTAMP") ,dberrnum = @GETENV ("LASTERR", "DBERRNUM") ,dberrmsg = @GETENV ("LASTERR", "DBERRMSG") ,logrba = @GETENV ("GGHEADER", "LOGRBA") ,logposition = @GETENV ("G

GHEADER", "LOGPOSITION"));

Using the following key columns for target table JSS.J1_DATA_CHANGE_LOG: LOGRBA, LOGPOSITION, COMMIT_DATE.

  如果遇到错误,可以直接通过查询jss.j1_data_change_log表,来确定出错的记录和具体原因,方面进一步调试。

时间: 2024-11-03 05:21:25

配置GoldenGate捕获Replicat端数据应用异常的相关文章

ActiveMQ消息传送机制以及ACK机制详解 AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的

ActiveMQ消息传送机制以及ACK机制详解     AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的.   一. ActiveMQ消息传送机制     Producer客户端使用来发送消息的, Consumer客户端用来消费消息:它们的协同中心就是ActiveMQ broker,broker也是让producer和consumer调用过程解耦的工具,最终实现了异步RPC

TROUBLESHOOTING: 行数据不一致异常[RowInconsistentException]

关键字:oracle.jbo.RowInconsistentException  JBO-25014  其他用户已更改具有主键 XXX 的行 异常现象: 在ADF中新建或者更新数据的时候,进行连续的Commit操作,第一次成功,接着会出现JBO-25014异常. 异常原因: 在比较EO Cached Entity与数据库中的值的时候,出现不一致.也就是在ADF的Commit操作后,数据库中的数据被其他操作修改了,这种情况会出现在数据库端使用了Trigger的时候:另一种情况是,EO中的Attri

myeclipse配置了weblogic,启动服务报异常

问题描述 myeclipse配置了weblogic,启动服务报异常 1C 解决方案 认证没有通过,估计是myeclipse配置weblogic,忘了设置 解决方案二: weblogic用户名密码不对~

java-myeclipse10配置jrebel6因为改动电脑日期报异常

问题描述 myeclipse10配置jrebel6因为改动电脑日期报异常 运行环境:myeclipse10配置jrebel6 问题原因:在myeclise10的tomcat7的jdk下Optional java VM arguments配置上jrebel后加入,在电脑日期是今天2015.10.21下启动tomcat,能正常启动,但是假如电脑日期把今天改为2015.10.06启动tomcat就会抛出一个异常: if (!fromStart && !toEnd) { if (m.compare

C#中捕获了两个同类异常

问题描述 C#中捕获了两个同类异常 我在用C#连接数据库时,有两个异常可以捕获,两个异常是不同的异常但是同属sqlException,这时我该怎么去分别捕获这两个异常? 求助 解决方案 两个小异常c#的异常捕获c#中的捕获派生类异常 解决方案二: SqlException 有一个 Number property 你可以根据这个判断. 比如duplicate error的number值是2601. catch (SqlException e) { switch (e.Number) { case

java-Java Socket 读取TCP服务端数据包不完整

问题描述 Java Socket 读取TCP服务端数据包不完整 Java Socket 读取TCP服务端数据包不完整:除了利用数据包大小循环读取输入流的得到完整的数据外,还有其他什么方法? 数据包在网络传输的过程中,数据传递到客户端基本处于"无序"态.除了开辟一块内存按数据包的顺序存放外,还有其他更好的方案么? 解决方案 TCP 因为是长连接的,肯定是有序的.数据接收不完整,这种现象在通讯中很常见的,是必须代码处理. 解决方案二: TCP是有序的吧?UDP才是无序的. 解决方案三: T

使用richface4,如何捕获后台抛出的异常?

问题描述 我最近想做一个项目,用的是richface4+jsf2我不知道如何捕获后台抛出的异常,并且展示在页面上比如使用a4j:jsfunction调用action中的test();方法这个test()方法throw一个exception做测试页面如何用js捕获并且alert出来?我查了有一个A4J.AJAX.OnErrer,但是一直报A4J未定义,求解答~

mysql-Mysql做了主从配置之后,启动项目就出现异常了。提示Hibernate什么的,不知道这么回事

问题描述 Mysql做了主从配置之后,启动项目就出现异常了.提示Hibernate什么的,不知道这么回事 2016-02-25 13:38:51353 [localhost-startStop-1] [test.ResourceBuilder] [INFO] - Hibernate operation: could not insert: [accessResources.BtnAndMenu]; uncategorized SQLException for SQL [insert into b

xml-装载XML数据方法异常:LoadXML()

问题描述 装载XML数据方法异常:LoadXML() 我找遍了所有人,都没人能解决,只有来这求论坛的大大们救命了 是这样的,我是在电脑上班的,回家有时要登一下单位系统,但是老出现,电脑系统我也重安了,NET4.0我也重安了,按照网上找的把msxml3.dll和msxml4.dll重新弄了一下,但是msxml4.dll不行,起先是那就在网上重新下了一个,运行吧出现 这样都不行那我就找360啊,QQ管家,金山之类的专家求助,也没人能帮到我,真的, msxml6是可以 用的 解决方案 重新下载修复ms