zoukankan      html  css  js  c++  java
  • X GoldenGate 使用 reperror、ddlerror 、Discardfile 进行错误处理


    对于Replicat进程处理DML操作过程中报错时,GoldenGate提供了一个参数用来控制如何处理Replicat进程的报错。这就是本节内容要介绍的reperror参数。这个参数能控制大部分的GoldenGate错误处理的手段。 如某案例的Replicat进程参数如图1所示。
    图1
    
    
    
    1、reperror处理类型与含义
    
    Reperror在GoldenGate11版本中共提供了7类处理错误方式,分别如下。
    
    (1)abend:Replicat遇到不能处理的记录时,回滚事务,然后停止处理,Replicat进程状态转为abend。
    
    (2)discard:将不能处理记录的错误信息放到discard文件而Replicat进程继续处理下面的记录。
    
    (3)exception:将错误按照预先定义好的方式处理。
    
    (4)ignore:将不能处理的记录忽略掉,然后继续处理下面的记录。
    
    (5)retryop [maxretries <n>]:遇到不能处理的记录时,重试n次。
    
    (6)transabort [,maxretries <n>][, delay[c]sesc<n>];终止事务处理,将rba号指到该事务的开头,也可以指定重试几次。
    
    (7)reset:清除掉所有的reperror规则,然后将reperror的规则默认为abend。
    
    在Replicat进程的参数中,可以将任意一个处理类型设置为默认,如reperror、default、abend。
    
    通常,为了保证数据的一致性,都将reperror的默认规则设置为abend。
    
    
    
    
    2、复制进程常见数据库错误类型与处理方法
    
    在实际的GoldenGate系统中,很大一部分Replicat错误信息都类似于ORA开头的数据库错误(这里以Oracle数据库为例)。
    虽然,通常对于ORA错误,需要手动查找数据库的原因,但可以用reperror处理一些预知的错误类型,然后再在数据库层面找到错误的原因,手动排除,而不至于导致该进程处理其他正常的表而abend掉。 例如:可以忽略掉重复数据的插入而其他类型的报错则abend。 示例11: Reperror (
    default, abend) Reperror (-1, ignore) 当然,也可以只针对某张表的忽略掉重复数据的插入而abend掉其他类型的报错。 示例12: REPERROR (-1, IGNORE) MAP sales.product, TARGET sales.product; REPERROR RESET MAP sales.account, TARGET sales.account; 最常见的错误为ORA-1403。 1403错误是指记录无法投递到目标库,纯属数据错误,要通过查看错误信息和discard文件,到两端库寻找相应记录,结合logdump分析队列中的实际数据,再分析出问题的原因。可能存在的原因有:两端表结构不一致;附加日志错误;初始化方法错误导致不一致;目标端级联删除、trigger没有被禁止;目标端存在Oracle的job或者操作系统任务修改数据。 处理方法: 重新初始化该表。 手工修复该条数据。 修改reperror参数为discard或ignore模式,忽略掉错误(在使用这个参数之前用户应该非常清楚自己在做什么,因为它会导致两端数据不一致)。
    3、Ddlerror处理DDL复制错误
    
    当GoldenGate打开了DDL复制时,当DDL复制报错时,则需要用到此处的ddlerror参数预处理一些常见的报错信息。Ddlerror对于抽取、复制进程均有效,默认为abend。
    
    Ddlerror参数的语法为:
    
    示例13:
    
    DDLERROR
    
    {<error> | DEFAULT} {<response>}
    
    [RETRYOP MAXRETRIES <n> [RETRYDELAY <delay>]]
    
    {INCLUDE <inclusion clause> | EXCLUDE <exclusion clause>}
    
    [IGNOREMISSINGTABLES | ABENDONMISSINGTABLES]
    
    如当DDL复制报ORA-1430错误,传递了重复的alter语句导致,则可以用ddlerror (1430, discard)将错误信息扔到discard文件里。
    
    其他的错误处理与reperror类似。
    4、Discardfile 记录进程错误信息
    
    用discardfile 这个参数来生成一个discard文件,将GoldenGate不能处理的信息记录到这个文件。这样对GoldenGate的troubleshooting非常的有帮助。
    
    如源端表结构有变化,默认传递过来的数据应用时Replicat进程则报错,此时则可以通过discard文件看到报错信息位哪个表做了怎样的alter操作,再在目标端也将表结构改变一些,错误即可排除。
    Discard文件默认在GoldenGate安装目录的dirrpt子文件夹,如图2所示。
    图2
    
    
    
    Discard文件记录的报错信息如图3所示。
    
    
    
    图3
  • 相关阅读:
    Spark机器学习基础三
    Spark机器学习基础二
    如何在Windows上的Jupyter Notebook中安装和运行PySpark
    Spark机器学习基础一
    基于卷积神经网络CNN的电影推荐系统
    相似度计算方法
    调参贝叶斯优化(BayesianOptimization)
    isStatic:检测数据是不是除了symbol外的原始数据
    获取当前页面url指定参数值
    Vue.js 运行环境搭建详解(基于windows的手把手安装教学)
  • 原文地址:https://www.cnblogs.com/chendian0/p/14917724.html
Copyright © 2011-2022 走看看