使用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抽取 ...
随机推荐
- javascript的数组之push()
push()方法讲一个元素或多个元素添加到数组的末尾,并返回新数组的长度length,修改数组自身. var numbers = [1, 2, 3]; numbers.push(4); console ...
- Linux技术栈整理一:系统体系结构
Linux操作系统必备的硬件构造: CPU 主板 显卡 硬盘 网卡 外设(键鼠-输入设备 / 显示器-输出设备) 内核管理调度: 内核体系结构: 来源于:极客专栏
- HttpServlet
HttpServlet的原理 HttpServlet抽象类中的(部分)方法 HttpServlet extends GenericServlet{ void service(ServletReques ...
- iconfont在线链接使用方法(转)
原文:https://blog.csdn.net/jinkingliao/article/details/51353937 基础流程就不多赘述,直接到http://www.iconfont.cn/官网 ...
- war 包tomcat部署和maven的tomcat插件部署的不同
不用插件 1在linux服务器上下载号tomcat 或者上传tomcat 2上传war包,最好创建一个目录房war包,和tomcat 3解压war包,jar -xvf war 或者unzip wa ...
- 《图解HTTP》读书笔记(三:无状态协议/cookie管理状态)
HTTP是一种不保存状态,即无状态(stateless)协议.HTTP协议自身不对请求和响应之间的通信状态进行保存. ——HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能,于是引入了Co ...
- WIN7远程桌面连接--“发生身份验证错误。要求的函数不受支持”
故障现象:WIN7发现远程桌面无法连接了,报“发生身份验证错误.要求的函数不受支持”的错误: 解决办法:开始菜单->运行gpedit.msc 打开配置项:计算机配置>管理模板>系统& ...
- Flask的Windows部署:mod_wsgi + Apache
参考1:https://blog.csdn.net/mist99/article/details/80771289 参考2:https://blog.csdn.net/firefox1/article ...
- mysql5安装
一.MYSQL的安装 1.打开下载的mysql安装文件mysql-5.0.27-win32.zip,双击解压缩,运行“setup.exe”. 2.选择安装类型,有“Typical(默认)”.“Comp ...
- struts 2.5配置
1.jar包的变动 必需jar包,旧版本: 必需jar包,新版本: 在struts-2.5.16版本的lib目录下没有xwork-core的jar包,原因是被合并到struts-core这个jar里了 ...