OGG-如何只同步最近某个时间范围的数据
一、需求,某客户希望使用OGG只同步时间大于2021-02-01日期之后的数据变换
需求如标题所示,如何使用OGG进行配置?
客户环境需要同步的表有几百G,表数据太大了;如果同步所有数据,目标库空间存储方面消耗太大;
并且表太大之后,索引数据量也会成倍增长;
如果使用OGG只迁移数据+实时同步半年的数据,那么表的数据量将减少为原来的1/10;
二、环境测试
2.1 参考资料
How to Filter Records by Date in Oracle GoldenGate Extract and Replicat (Doc ID 1458966.1)
GOAL
How to filter based on this Date column
CREATION_TIME >='2012-01-01'
SOLUTION
Replicat:
MAP {source table}, TARGET {target table},
FILTER (@COMPUTE (@DATE("JUL", "YYYY-MM-DD", creation_time) >=
@DATE("JUL", "YYYY-MM-DD", "2012-01-01")) > 0);
Extract:
TABLE {source table},
FILTER (@COMPUTE (@DATE("JUL", "YYYY-MM-DD", creation_time) >=
@DATE("JUL", "YYYY-MM-DD", "2012-01-01")) > 0);
-- 错误 OGG-01157 使用带有日期的 Where 子句和带有 @NULL 子句的 OGG-00375 和用于 Teradata 的 GoldenGate(文档 ID 1564687.1)
Bug 27278457 - @DATE Not Working As Expected in OGG 12.3
Error OGG-01157 Using Where Clause With Dates and OGG-00375 with @NULL Clause With GoldenGate for Teradata (Doc ID 1564687.1)
2.2 测试环境配置
create table c1(id int ,create_time date);
create table c2(id int ,create_time date);
create table c3(id int ,create_time date);
GGSCI (t1) 4> dblogin USERID goldengate, PASSWORD goldengate
add trandata yz.c1
add trandata yz.c2
add trandata yz.c3 使用语法是@DATE ('output format', 'input format', 'source column')。 > edit param ext_t1
TABLE YZ.c1;
TABLE YZ.c2,FILTER(@COMPUTE(@DATEDIFF ('DD',create_time,'2021-06-01') ) <=0 );
TABLE YZ.c3; --failed 如下配置均失败!
--TABLE YZ.c2,FILTER(@COMPUTE(@DATE('CCCDATA','YYYY-MM-DD HH24:MI:SS',create_time)>= @DATE('CCCDATA','YYYY-MM-DD HH24:MI:SS',
'2012-06-01 00:00:00')));
--TABLE YZ.c2,FILTER(@DATE('YYYY-MM-DD HH24:MI:SS',create_time)>=@DATE('YYYY-MM-DD HH24:MI:SS','2012-06-01 00:00:00'));
--TABLE YZ.c2,FILTER(@DATE('CCCDATA','YYYY-MM-DD HH24:MI:SS',create_time)>=@DATE('CCCDATA','YYYY-MM-DD HH24:MI:SS','2012-06-01 00:00:00'));
--TABLE YZ.c2,WHERE (create_time>TO_DATE('2021-06-01','YYYY-MM-DD'));
--TABLE YZ.c2,FILTER(@COMPUTE(@DATE('CDATA','YYYY-MM-DD HH24:MI:SS',create_time)- @DATE('CDATA','YYYY-MM-DD HH24:MI:SS','2012-06-01 00:00:00'))>0);
--TABLE YZ.c2,FILTER(@COMPUTE(@DATE('YYYY-MM-DD HH24:MI:SS',create_time)>=@DATE('YYYY-MM-DD HH24:MI:SS','2012-06-01 00:00:00'))>0);
--TABLE YZ.c2,FILTER (create_time>TO_DATE('2021-06-01','YYYY-MM-DD'));
2.3 正确的配置
> edit param dp_t1
TABLE YZ.c1;
TABLE YZ.c2;
TABLE YZ.c3; --tag
create table c1(id int ,create_time date);
create table c2(id int ,create_time date);
create table c3(id int ,create_time date); > edit param rep_gbk
map yz.c1 ,target yz.c1;
map yz.c2 ,target yz.c2;
map yz.c3 ,target yz.c3,FILTER(@COMPUTE(@DATEDIFF ('DD',create_time,'2021-06-01') ) <=0 ); --channel 2
--source
--test
insert into c2 values(1,to_date('20210101','yyyymmdd'));
insert into c2 values(2,to_date('20210701','yyyymmdd'));
insert into c2 values(1,to_date('20210101 00:00:00','YYYY-MM-DD HH24:MI:SS'));
insert into c2 values(2,to_date('20210701 00:00:00','YYYY-MM-DD HH24:MI:SS'));
insert into c2 values(11,to_date('20210601 00:00:00','YYYY-MM-DD HH24:MI:SS'));
insert into c2 values(12,to_date('20210601 00:00:01','YYYY-MM-DD HH24:MI:SS'));
insert into c2 values(13,to_date('20210530 23:00:00','YYYY-MM-DD HH24:MI:SS'));
commit;
--target
SQL> select id,to_char(create_time,'yyyy-mm-dd hh24:mi:ss') from c2;
ID TO_CHAR(CREATE_TIME
---------- -------------------
2 2021-07-01 00:00:00
2 2021-07-01 00:00:00
11 2021-06-01 00:00:00
12 2021-06-01 00:00:01 --channel 3
--source
--test
insert into c3 values(1,to_date('20210101','yyyymmdd'));
insert into c3 values(2,to_date('20210701','yyyymmdd'));
insert into c3 values(3,to_date('20210101 00:00:00','YYYY-MM-DD HH24:MI:SS'));
insert into c3 values(4,to_date('20210701 00:00:00','YYYY-MM-DD HH24:MI:SS'));
insert into c3 values(11,to_date('20210601 00:00:00','YYYY-MM-DD HH24:MI:SS'));
insert into c3 values(12,to_date('20210601 00:00:01','YYYY-MM-DD HH24:MI:SS'));
insert into c3 values(13,to_date('20210530 23:00:00','YYYY-MM-DD HH24:MI:SS'));
commit;
--target
SQL> select id,to_char(create_time,'yyyy-mm-dd hh24:mi:ss') from c3;
ID TO_CHAR(CREATE_TIME
---------- -------------------
2 2021-07-01 00:00:00
4 2021-07-01 00:00:00
11 2021-06-01 00:00:00
12 2021-06-01 00:00:01
小结:这种语法基本上也是抄袭MOS的,但是MOS举例无法直接使用,OGG 19.1版本 for 11g db对这种date类型的转换无法正常获取,但是使用函数转换为数值在进行对比就可以了。
OGG-如何只同步最近某个时间范围的数据的更多相关文章
- 修复ogg source端意外宕机造成的数据不同步
修复ogg source端意外宕机造成的数据不同步 分类: Oracle2016-04-28 11:50:40原文地址:修复ogg source端意外宕机造成的数据不同步 作者:十字螺丝钉 ogg s ...
- mysql主从只同步部分库或表
同步部分数据有两个思路,1.master只发送需要的:2.slave只接收想要的. master端: binlog-do-db 二进制日志记录的数据库(多数据库用逗号,隔开)binlog-i ...
- 捕获mssqlservice 修改表后的数据,统一存储到特定的表中,之后通过代码同步两个库的数据
根据之前的一些想法,如果有A,B 两个数据库, 如果把A 用户通过界面产生的更新或者插入修改,操作的数据同步更新到B 库中,如果允许延时2分钟以内 想法一: 通过创建触发器 把变更的数据和对应的表名称 ...
- Elasticsearch的快速使用——Spring Boot使用Elastcisearch, 并且使用Logstash同步mysql和Elasticsearch的数据
我主要是给出一些方向,很多地方没有详细说明.当时我学习的时候一直不知道怎么着手,花时间找入口点上比较多,你们可以直接顺着方向去找资源学习. 如果不是Spring Boot项目,那么根据Elastics ...
- 关于跨DB增量(增、改)同步两张表的数据小技巧
有些场景下,需要隔离不同的DB,彼此DB之间不能互相访问,但实际的业务场景又需要从A DB访问B DB的情形,这时怎么办?我认为有如下常规的三种方案: 1.双方提供RESET API,需要访问不同DB ...
- fiddler启用过滤规则只显示想要的接口数据
fiddler启用过滤规则只显示想要的接口数据 比如只显示192.168.11.80站点数据 点击应用规则就可以只显示192.168.11.80了
- mysql之workbench如何只导出(insert语句)数据
https://www.jianshu.com/p/a5cd14bc5499 1. 说明: 出发点: 由于特殊原因,我们只想导出数据库中的数据(insert into语句格式的),但是在网上找到的资源 ...
- rsync 只同步指定类型的文件
需求: 同步某个目录下所有的图片(*.jpg),该目录下有很多其他的文件,但只想同步*.jpg的文件. rsync 有一个--exclude 可以排除指定文件,还有个--include选项的作用正好和 ...
- 电商网站垮IDC数据备份,MySql主从同步,图片及其它数据文件的同步
原文网址:http://www.bzfshop.net/article/180.html 对一个电子商务网站而言,最宝贵的资源就是数据.服务器是很廉价的东西,即使烧了好几个也问题不大,但是用户数据如果 ...
随机推荐
- mybaits源码分析--自定义插件(七)
一.MyBatis插件 插件是一种常见的扩展方式,大多数开源框架也都支持用户通过添加自定义插件的方式来扩展或者改变原有的功能,MyBatis中也提供的有插件,虽然叫插件,但是实际上是通过拦截器(Int ...
- 如何获取 Android CPU 核心数 (Java/C++)
1 前言 最近学习Power HAL方面相关知识,透过Power HAL 去配置CPU的Freq需要先确定 CPU 核数.便先了解如何获取 Android CPU 核数. 2 Java层获取方式 // ...
- Java基础(二)——内部类
一.内部类 内部类(Inner Class)就是定义在一个类里面的类.与之对应,包含内部类的类被称为外部类.内部类可以用private修饰. 1.为什么要定义内部类?或者内部类的作用是什么? 内部类提 ...
- FastAPI(1)- 简单介绍
前言 为啥要学它呢,因为学 Flask 的时候发现有人更推荐它代替 Flask,看了下介绍,感觉很强,而且也能拿来做平台,当然学起来!卷起来! 为什么要使用 FastAPI ? 日渐没落的是后端 HT ...
- TCL、华星光电和中环股份,如何在一条生态链上领跑?
聚众智.汇众力.采众长. "我们决心用五年时间,将TCL科技和TCL实业做到真正的世界500强,将智能终端.半导体显示.半导体光伏三大核心产业力争做到全球领先,将半导体材料等其他产业做到中国 ...
- etcd学习(10)-etcd对比Consul和zooKeeper如何选型
etcd选型对比 前言 基本架构和原理 etcd Consul ZooKeeper 选型对比 总结 参考 etcd选型对比 前言 对比 Consul, ZooKeeper.选型etcd有那些好处呢? ...
- 【第四篇】- Maven 构建生命周期之Spring Cloud直播商城 b2b2c电子商务技术总结
Maven 构建生命周期 Maven 构建生命周期定义了一个项目构建跟发布的过程. 一个典型的 Maven 构建(build)生命周期是由以下几个阶段的序列组成的: 阶段 处理 描述 验证 ...
- activemq启动错误UnsupportedClassVers rg/apache/activemq/console/Main:Unsupported major.minor version52.0
ActiveMQ与java的JDK是有版本对应匹配的. 下面提供一个匹配图: MQ版本号 Build-Jdk 依赖JDKapache-activemq-5.0.0 1.5.0_12 1.5+apach ...
- Sentry 监控 - Discover 事件大数据查询分析引擎
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- 迷你商城后端管理系统 ———— stage2 项目的核心代码实现
应用程序主函数接口 @SpringBootApplication(scanBasePackages = {"org.linlinjava.litemall.db", "o ...