需求
实现在目标端插入某行时,记录下当前时间,其他DML(update)操作不记录。
配置方法
1,参考的文章
参考文章:http://www.anbob.com/archives/2000.html
还有控制insert ,update,delete时对某列赋值的操作
- 表结构不同时需要defgen生成定义文件效率相对于ASSUMETARGETDEFS 要慢一些。
- 本测试修改完配置文件后都有重启进程使修改生效
- 使用colmap 可以对表结构做映射关系
- 使用token function可以从源端附加变量值
- 使用get/IGNORE[DML]可以做基于事务的filter
DYNAMICRESOLUTION为了提高性能在控制表名解析时只读取一次,这样在mapexclude时会存在整个map table没有按顺序而是全部排除.
goldengate的函数很多,可参考 OGG官方联机手册
GGSCI (ggsdb) 1> view params ricme
map icme.test_s, target icme.test_t,
COLMAP(usedefaults,
create_date =@IF(@STREQ(@GETENV("GGHEADER","OPTYPE"),"INSERT"),@DATENOW(),@COLSTAT(MISSING)),
last_update_date=@datenow()
2,配置示例一
REPLICAT RP5setenv (NLS_LANG=American_america.zhs16gbk)
USERID gg, PASSWORD *******
reperror (12841, ignore)
HANDLECOLLISIONS
ASSUMETARGETDEFS
DISCARDFILE ./dirrpt/RP5.DSC, PURGE
MAP uc.YY, TARGET XX.YY,keycols(id),
SQLEXEC (ID lookup, QUERY " select sysdate now from dual "),
colmap(USEDEFAULTS,ROWCREATETIME = @if(@streq(@getenv("GGHEADER","OPTYPE"),"INSERT"),@GETVAL (lookup. now),@colstat(MISSING)));
解释:只有insert的时候,对该列赋值当前时间。
这种配置在ogg11.2.0的版本中有一个bug.
错误描述:OGG-00665 OCI Error executing alter session disable parallel dml
*******************************************************************************************************************
***2014--6-12碰到OGG的bug
***Bug 13977090 : 11.2.1 REPLICAT ABENDS: OCI ERROR EXECUTING ALTER SESSION DISABLE PARALLEL DML
改用如下配置解决问题。注意观察和上面配置不一样的地方是去掉了sqlexec
*******************************************************************************************************************;
3,配置示例二
REPLICAT RP5setenv (NLS_LANG=American_america.zhs16gbk)
USERID gg, PASSWORD *******
reperror (12841, ignore)
HANDLECOLLISIONS
ASSUMETARGETDEFS
DISCARDFILE ./dirrpt/RP5.DSC, PURGE
MAP uc.YY, TARGET XX.YY,keycols(id),
colmap(USEDEFAULTS,ROWCREATETIME = @if(@streq(@getenv("GGHEADER","OPTYPE"),"INSERT"),@DATENOW(),@colstat(MISSING)));
相对于上一个简单多了