关闭

创建Goldengate例外句丙记录跟踪Oracle错误

标签: oracleexceptiontable
1887人阅读 评论(0) 收藏 举报
分类:

Goldengate没有例外处理机制,如果复制进程出错,就会Abend,并Rollbak事务到上一个Checkpoint.这在生产环境中是不理想的做法.
HANDLECOLLISIONS 和 NOHANDLECOLLISIONS 这两个参数用来控制复制进程是否尝试解决重复记录和丢失记录的错误.但是,这类错误仅仅是忽略是不行的.
需要有一个记录,记下有错误发生,哪个复制进程出错,是由什么数据引起的,这可以通过创建例外句柄来记录下这些信息,但不影响复制进程继续进行.
步骤
1.创建例外表:
create table ggs_admin.exceptions
( rep_name varchar2(8)
, table_name varchar2(61)
, errno number
, dberrmsg varchar2(4000)
, optype varchar2(20)
, errtype varchar2(20)
, logrba number
, logposition number
, committimestamp timestamp
);

ALTER TABLE ggs_admin.exceptions ADD ( 
  CONSTRAINT PK_CTS 
 PRIMARY KEY 
 (logrba, logposition, committimestamp) USING INDEX PCTFREE 0 TABLESPACE MY_INDEXES);

表要创建在Goldengate的管理用户下,并且能记下所有复制进程的例外数据.

2.编写复制进程的采纳书文件,增加例外处理的宏代码
[oracle@linuxserver1 ggs]$ ggsci

GGSCI (linuxserver1) 1> edit params RTARGET1

-- This starts the macro
MACRO #exception_handler
BEGIN
, TARGET ggs_admin.exceptions
, COLMAP ( rep_name = "RTARGET1"
, table_name = @GETENV ("GGHEADER", "TABLENAME")
, errno = @GETENV ("LASTERR", "DBERRNUM")
, dberrmsg = @GETENV ("LASTERR", "DBERRMSG")
, optype = @GETENV ("LASTERR", "OPTYPE")
, errtype = @GETENV ("LASTERR", "ERRTYPE")
, logrba = @GETENV ("GGHEADER", "LOGRBA")
, logposition = @GETENV ("GGHEADER", "LOGPOSITION")
, committimestamp = @GETENV ("GGHEADER", "COMMITTIMESTAMP"))
, INSERTALLRECORDS
, EXCEPTIONSONLY;
END;
-- This ends the macro
3.在复制进程的参数文件中增家MAP部分,对于每个表增加#exception_handler(),用REPERROR (-1, EXCEPTION)参数说明需要记录Oracle Error.

REPERROR (DEFAULT, EXCEPTION)
REPERROR (DEFAULT2, ABEND)
REPERROR (-1, EXCEPTION)
MAP SRC.ORDERS, TARGET TGT.ORDERS;
MAP SRC.ORDERS #exception_handler()
MAP SRC.ORDER_ITEMS, TARGET TGT.ORDER_ITEMS;
MAP SRC.ORDER_ITEMS #exception_handler()
MAP SRC.PRODUCTS, TARGET TGT.PRODUCTS;
MAP SRC.PRODUCTS #exception_handler()
REPERROR:控制复制进程在执行MAP语句时如何处理错误
DEFAULT:参数设置处理指定的错误以外,对错误的全局响应
Default2:参数指定要捕获可能会发生的所有的未想到的Error,并使进程Abend

4.停止并重启复制进程
GGSCI (linuxserver1) 3> stop REPLICAT RTARGET1
GGSCI (linuxserver1) 4> start replicat RTARGET1

info all

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

跟踪oracle中sql语句执行过程及相关知识拓展

select * from v$sqlarea;         可以跟踪sql语句的执行过程,如果想跟踪某个时间点前后的语句,可以通过first_load_time时间进行控制。 select * ...
  • xunzaosiyecao
  • xunzaosiyecao
  • 2014-09-02 09:39
  • 1679

Oracle OCP笔记(10)警报日志与跟踪文件

Oracle OCP笔记(10)警报日志与跟踪文件 一.关于警报日志和跟踪文件     警报日志中记录关键操作包括:     ·所有启动和关闭命令,包括中间命令,如alter datab...
  • gyming
  • gyming
  • 2015-01-24 16:52
  • 1578

利用Oracle DDL触发器实现DDL监控

前言创建此触发器的主要目的是为了控制数据库的版本,虽然会将DDL语句保留但难免会出现遗漏,所以创建DDl触发器记录DDL操作,主要是用来核对数据库变更的SQL语句创建用户并授权
  • jaune161
  • jaune161
  • 2015-08-05 17:31
  • 3244

Oracle ADF 100个例外 Business Components Error Messages(错误提示!)

Oracle ADF Business Components Error Messages The prefix "JBO-" signifies that the following message...
  • u012280953
  • u012280953
  • 2014-10-24 14:04
  • 1180

Oracle GoldenGate 监控工具:ggserr.log 错误日志不可忽视

Oracle 原厂最近在生产环境的主数据库安装了 OEM 12C 的监控插件后,主数据库对外十几个库同步同步的 Oracle GoldenGate 实例出现异常,疯狂地往 GoldenGate 根目...
  • xiangsir
  • xiangsir
  • 2013-03-05 23:42
  • 4758

Oracle GoldenGate 系列:使用 Oracle ASM API DBLOGREADER 时遇 ora-01031 错误

今天在自己新搭建的 Oracle ACFS 文件系统上测试 GoldenGate ,启动 extract 进程报如下错误: 2013-08-27 14:58:39  ERROR   OGG-004...
  • xiangsir
  • xiangsir
  • 2013-08-27 15:20
  • 3144

Oracle Goldengate实现插入记录的当前时间

需求 实现在目标端插入某行时,jilu
  • cloud952788
  • cloud952788
  • 2014-07-28 18:30
  • 539

32位和64位ORACLE下操作GOLDENGATE过程记录

最近接了一个数据库同步的项目,其实开始考虑的是别的免费同步工具,不过我们老大说免费的太钓丝,不如收费的高大上,客户有钱,不需要为对方节省,况且免费的有各种限制,功能不够全面。言归正传,我选择了ORAC...
  • u011386109
  • u011386109
  • 2015-07-17 11:27
  • 642

OGG11g同构(GoldenGate-ORACLE)、异构(GoldenGate-MYSQL)同步配置及错误解析

  • 2016-05-03 14:31
  • 57KB
  • 下载

【oracle学习】7.plsql光标和例外

前言 我们以下的所有操作均在PL/Sql Developer工具上完成: 我们以下的表操作可能会基于以下两张表: 我们创建一个员工表和部门表: 员工信息表 create table EMP( ...
  • u013517797
  • u013517797
  • 2016-09-02 14:08
  • 925
    个人资料
    • 访问:2343462次
    • 积分:21571
    • 等级:
    • 排名:第397名
    • 原创:158篇
    • 转载:639篇
    • 译文:1篇
    • 评论:49条
    最新评论