使用GoldenGate EVENTACTIONS执行数据的实时触发和定制化
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执行数据的实时触发和定制化的更多相关文章
- 通过rsync+inotify实现数据的实时备份
我讲到过利用rsync实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足 与传统的cp.tar备份方式相比,r ...
- rsync+inotify实现数据的实时备份
一.rsync概述 1.1.rsync的优点与不足 rsync与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需 ...
- 通过rsync+inotify实现数据的实时备份(多台备份机)
在前面的博文中,我讲到过利用rsync实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足 与传统的cp.ta ...
- rsync+inotify实现数据的实时同步更新
rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样 ...
- 通过rsync+inotify实现数据的实时备份 【转载】
在前面的博文中,我讲到过利用rsync实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足 与传统的cp ...
- rsync+sersync实现数据文件实时同步
一.简介 sersync是基于Inotify开发的,类似于Inotify-tools的工具: sersync可以记录下被监听目录中发生变化的(包括增加.删除.修改)具体某一个文件或某一个目录的名字: ...
- ODI利用goldengate实现增量数据捕获
ODI利用goldengate实现增量数据捕获 上个月,Oracle发布了ODI的最新版本10.1.3.6_02,其中增加了针对采用goldengate获取源数据库增量变化的知识模块,这样当系统需要实 ...
- kityminder-editor + MongoDB 思维导图数据自动实时保存方案
最近开始做自己的第一个开源项目:一个基于思维导图的测试用例管理系统MinderCase,在做了一周的技术调研后,决定采用kityminder-editor作为思维导图编辑器,为了支持实时存储,当思维导 ...
- 利用Flume将MySQL表数据准实时抽取到HDFS
转自:http://blog.csdn.net/wzy0623/article/details/73650053 一.为什么要用到Flume 在以前搭建HAWQ数据仓库实验环境时,我使用Sqoop抽取 ...
随机推荐
- 听说尤雨溪在开发vue4.0?是谁煽动了前端圈的焦虑情绪
导火索因P图而起 今天前端圈里被一张P图搞得好热闹,最初只是QQ群里一个冒名尤雨溪的前端网友发了一句调侃的话,原话截图如下: 看完觉得好搞笑,说尤雨溪在开发vue4.0,有谁学不动了,就给他发10块钱 ...
- day 22 二十二、面向对象导入、名称空间、类与对象
一.面向对象导入 1.含义: ①面向过程: 重过程:解决问题,考虑的是解决问题的流程 解决问题的思路清晰,但拓展性不强 ②面向对象: 重对象:解决问题,找到解决问题的对象 解决问题的思路可能不止一条( ...
- 2. Scala变量
2.1 变量是程序的基本组成单位 举一个简单的例子 object boke_demo01 { def main(args: Array[String]): Unit = { var a: Int = ...
- [dev] 刷HHKP的一般流程及常见错误(多图慎点)
( 为什么打了个dev的tag?development不用键盘,难道用鼠标??) 嗯呐,我有个HHKP,你看: 好不好看? 脏不脏? 接下来讲一下,我是怎么刷它,要看完哝,不然拆坏了不要怪我. 本来我 ...
- C#即时释放内存
using System;using System.Diagnostics;using System.Runtime.InteropServices; [DllImport("kernel3 ...
- list的基本操作实现
有关list的相关实现,主函数没有写很多,每个部分目前没发现有问题: #include <iostream> #include <stdio.h> using namespac ...
- jquery和js 判断下拉框选项选中值
js <script> var selectId = document.getElementById("VariantType");//获取ID selectId.on ...
- Spring Boot 对请求的映射
在SpringBoot中对请求资源的映射有三种方式: 1.通过编写一个Controller请求,获得客户端发送过来的请求就转发出去 //通过这种方式可以来映射页面请求路径 @PostMapping(& ...
- fiddler 安装证书问题,和安装完后,浏览器无法访问问题
安装证书问题 https://blog.csdn.net/l1336037686/article/details/78322014 浏览器无法访问问题 https://blog.csdn.net/u0 ...
- mysql中的count()函数
1.count()函数是用来统计表中记录的一个函数,返回匹配条件的行数. 2.count()语法: (1)count(*)---包括所有列,返回表中的记录数,相当于统计表的行数,在统计结果的时候,不会 ...