Oracle
GoldenGate不仅可以在线实时同步数据(包括增量和存量),也内置有一套事件触发流程,允许用户根据某张表某条记录的某个特殊字段值,触发相应的自定义执行流程,比如接收到某个银行账号的大笔转账金额之后,触发一条报警信息,或者根据某条记录,自动停止目标端的投递进程。

基于变更记录触发事件的设置,如果是源端抽取进程,则在Table语句的Filter或Where中定义,如果是目标端投递进程,则可以在Replicat进程的MAP语句中定义。当然,也可以在一个SQLEXEC执行一条SQL语句或存储过程中定义。

在Extract或参数文件中,通过使用 EVENTACTIONS
来定义自定义处理过程。EVENTACTIONS
可以带上多个关键字,比如
: IGNORE, DISCARD, ABORT, STOP, SHELL, TRACE, LOG
,每个关键字代表不同的处理功能,可参考官方文档查看。一旦有符合条件的记录,则触发对应的功能。

本示例中,通过执行shell演示如下功能:当目标端接收完源端的所有数据之后,触发一个导出操作,即将目标库的数据导出为一个DMP文件。

首先需要在源端创建一张作业状态表,当数据处理完成之后,插入一条标志源端执行完成的操作记录,当目标端replicat接收到此记录之后,则触发数据泵的导出操作。

下面是源端的抽取进程参数

EXTRACT ext1

USERID idit_prd, PASSWORD idit_prd

RMTHOST insodb02, MGRPORT 7809

RMTTRAIL ./dirdat/cc

TABLE idit_prd.myobjects ;

TABLE idit_prd.ops_job_status ;

目标端投递进程参数

REPLICAT rep1

SETENV
(NLS_LANG="AMERICAN_AMERICA.WE8ISO8859P1")

SETENV (ORACLE_SID=GGDB2)

ASSUMETARGETDEFS

USERID idit_prd,PASSWORD idit_prd

MAP idit_prd.myobjects, TARGET
idit_prd.myobjects;

MAP idit_prd.ops_job_status, TARGET
idit_prd.ops_job_status , FILTER (@STREQ (STATUS, "PROCESSING COMPLETE" )),
EVENTACTIONS ( IGNORE TRANS , STOP, SHELL "/home/oracle/exp.sh
"
);

本示例中的状态表为OPS_JOB_STATUS.

目标端进程中在Filter中进行记录判断,比较在status字段中是否收到了“PROCESSING
COMPLETE”的值,如果是,则触发后面EVENTACTIONS中指定的操作:

·  Ignore:忽略后续的操作事务,不再往OPS_JOB_STATUS表写入记录。

·  Stop:停止目标端投递进程

·  Shell: 执行指定的exp.sh脚本。

以下是exp.sh的内容

#!/bin/ksh

/opt/oracle/product/server/10.2.0.4.5/bin/expdp
idit_prd/idit_prd parfile=/home/oracle/exp.par

parfile
exp.par中定义的导出内容如下:

tables=MYOBJECTS

directory=dumpdir

logfile=dumpdir:exp.log

dumpfile=myobjects.dmp

运行起来之后,可以看到目标端rep1进程还是运行状态:

GGSCI (insodb02) 12>  !

info replicat rep1

REPLICAT   REP1      Last Started 2011-04-01 13:28  Status RUNNING

Checkpoint Lag       00:00:00
(updated 00:00:08 ago)

Log Read Checkpoint  File ./dirdat/cc000019

2011-04-01 13:06:05.059982  RBA 931

当确认源端处理完了某部分数据,比如某个月或某年的记录之后,我们在源端的状态表中插入一条停止状态的记录:

SQL> insert into ops_job_status values

(sysdate,'PROCESSING COMPLETE');

1 row created.

SQL> commit;

Commit complete.

现在查看目标端进程的状态,可以看到投递进程rep1已经stopped,预期的data
pump任务也已触发。可以在文件系统上查看导出的DMP文件(对应的data
pump 导出目录)。

投递进程状态:

GGSCI (insodb02) 13> !

info replicat rep1

REPLICAT   REP1      Last Started 2011-04-01 13:28  Status STOPPED

Checkpoint Lag       00:00:08
(updated 00:00:04 ago)

Log Read Checkpoint  File ./dirdat/cc000019

2011-04-01 13:38:15.017514  RBA 1107

导出的dmp文件

oracle@insodb02:/u01/oracle> ls -lrt

-rw-r--r--   1 oracle     dba           1051 Apr  1 13:38
exp.log

-rw-r-----   1 oracle     dba        5009408 Apr  1 13:38
myobjects.dmp

由此,我们可以看到,通过OGG,不仅可以在异构平台之后复制数据,也可以基于表里的变化数据,触发相应的脚本,从而实现我们期望的预警或监控运维。

使用GoldenGate EVENTACTIONS执行数据的实时触发和定制化的更多相关文章

  1. 通过rsync+inotify实现数据的实时备份

    我讲到过利用rsync实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足 与传统的cp.tar备份方式相比,r ...

  2. rsync+inotify实现数据的实时备份

    一.rsync概述 1.1.rsync的优点与不足 rsync与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需 ...

  3. 通过rsync+inotify实现数据的实时备份(多台备份机)

    在前面的博文中,我讲到过利用rsync实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足  与传统的cp.ta ...

  4. rsync+inotify实现数据的实时同步更新

    rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样 ...

  5. 通过rsync+inotify实现数据的实时备份 【转载】

       在前面的博文中,我讲到过利用rsync实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足  与传统的cp ...

  6. rsync+sersync实现数据文件实时同步

    一.简介 sersync是基于Inotify开发的,类似于Inotify-tools的工具: sersync可以记录下被监听目录中发生变化的(包括增加.删除.修改)具体某一个文件或某一个目录的名字: ...

  7. ODI利用goldengate实现增量数据捕获

    ODI利用goldengate实现增量数据捕获 上个月,Oracle发布了ODI的最新版本10.1.3.6_02,其中增加了针对采用goldengate获取源数据库增量变化的知识模块,这样当系统需要实 ...

  8. kityminder-editor + MongoDB 思维导图数据自动实时保存方案

    最近开始做自己的第一个开源项目:一个基于思维导图的测试用例管理系统MinderCase,在做了一周的技术调研后,决定采用kityminder-editor作为思维导图编辑器,为了支持实时存储,当思维导 ...

  9. 利用Flume将MySQL表数据准实时抽取到HDFS

    转自:http://blog.csdn.net/wzy0623/article/details/73650053 一.为什么要用到Flume 在以前搭建HAWQ数据仓库实验环境时,我使用Sqoop抽取 ...

随机推荐

  1. Java课后作业之石家庄地铁系统PSP表格20190403

    PSP2.1 Personal Software Process Stages Time Planning 计划 36 hours · Estimate · 估计这个任务需要多少时间 36 hours ...

  2. HDU 6321 Dynamic Graph Matching

    HDU 6321 Dynamic Graph Matching (状压DP) Problem C. Dynamic Graph Matching Time Limit: 8000/4000 MS (J ...

  3. 快速体验 Laravel 自带的注册、登录功能

    快速体验 Laravel 自带的注册.登录功能 注册.登录经常是一件很伤脑筋的是,Laravel 提供了解决方案,可以直接使用它.试过之后,感觉真爽! 前提:本地已安装好了 PHP 运行环境.mysq ...

  4. 使用C#.NET列举组合数前N项和

    列举如下列所示的组合数前N项和,代码如下(递归方法里注意去重): static void Main(string[] args) { List<).ToList(); File.AppendAl ...

  5. 如何组织AxTOCControl里面的数据

    如何组织AxTOCControl里面的数据,实际上是组织AXMapControl的数据,将添加的数据进行整理.代码在最后面. 思路参考自: https://blog.csdn.net/u0124887 ...

  6. flask基础一

    一:flask认知 flask 短小精悍,可扩展强 flask 所有扩展的网址,flask.pocoo.org/externsions 有别于其他的web框架的地方:flask做了一个上下文管理机制 ...

  7. How to disable transparent hugepages (THP) on Red Hat Enterprise Linux 7

    How to disable transparent hugepages (THP) on Red Hat Enterprise Linux 7 $ Solution 已验证 - 已更新2017年六月 ...

  8. Fiddler_菜单栏介绍_02

    Fiddler界面 [Statistics]请求的性能数据分析 [Inspectors]查看数据内容 Inspectors是用于查看会话的内容,上半部分是请求的内容,下半部分是响应的内容: [Auto ...

  9. SCRIPT438: 对象不支持“indexOf”属性或方法

    SCRIPT438: 对象不支持“indexOf”属性或方法 indexOf()的用法:返回字符中indexof(string)中字串string在父串中首次出现的位置,从0开始!没有返回-1:方便判 ...

  10. Mybatis动态排序问题

    参考https://blog.csdn.net/LitongZero/article/details/83753813 注意事项:使用这样连续拼接两个注入参数时,只能用${},不能用#{}.