写在开始前

  从两周前我花了大量的业余时间阅读GoldenGate官方文档,并根据文档实践和进一步学习了解GoldenGate,以下便是根据官方文档理解总结的GoldenGate学习内容:
Oracle GoldenGate 一、介绍和安装
Oracle GoldenGate 二、配置和使用
Oracle GoldenGate 三、加密
在[美] 莫提默·J.艾德勒,[美] 查尔斯·范多伦著的【How to Read a Book】一书中,作者强调如果你每天所学的知识你不能用你自己的语言去描述或记忆它,那说明你未真正学习和了解所学的知识,So 那以后我改变了我的学习方式,把生搬硬套的学习方式改变为用自己的语言、用自己的了解去描述和记忆知识,描述难免有错,请谅解,也请指导,谢谢!

1 问题分析

  有如下的两张STB01、TTB01表,STB01表存放在源端中,TTB01表存放在目标端,表结构如下:
源端系统

字段名 说明
SID 用户ID
SNAME 用户名
SGENDER 性别,值为1表示男,2表示女
SBRIDATE 出生日期
ADETAIL 地址信息,存储格式:省份_城市,如:云南省_昆明市

表结构定义:

  create table OGG_OWNER.STB01(
SID NUMBER(10) PRIMARY KEY,
SNAME VARCHAR2(15) NOT NULL,
SGENDER CHAR(1) CHECK(SGENDER='1' OR SGENDER='2'),
SBRIDATE DATE,
ADETAIL varchar2(70)
) TABLESPACE TBS01
/

目标端系统

字段名 说明
TID 用户ID
TNAME 用户名
TGENDER 性别,值为1表示男,2表示女
TBRIDATE 出生日期
TPROVINCE 省份
TCITY 城市
TRANSFERDATE 交换日期

表结构定义:

  create table OGG_TRG.TTB01(
TID NUMBER(10) PRIMARY KEY,
TNAME VARCHAR2(15) NOT NULL,
TGENDER CHAR(1) CHECK(TGENDER='1' OR TGENDER='2'),
TBRIDATE DATE,
TPROVINCE VARCHAR2(70),
TCITY VARCHAR2(10),
TRANSFERDATE DATE
)TABLESPACE TBS01
/

1.1 业务需求

  同步源端系统表OGG_OWNER.STB01的数据到目标系统表OGG_TRG.TTB01;
要求:

  • 只同步性别为男的数据(SGENDER=1)
  • 源端的地址信息要分别拆分存储到目标端省份字段(TPROVINCE)和城市字段(TCITY)中

2 需求实现

根据需求,分析出大致的处理步骤:

  • 源端Extract进程配置抽取表对象
  • 源端Data Pump进程配置数据过滤
  • 在源端生成表定义文件
  • 目标端Replicat进程配置源端表定义信息和源端与目标端字段的对照映射
  • 目标端数据库实现省份和城市的数据分拆

2.1 源端Extract进程配置抽取表对象和数据过滤

在主抽取进程(Primary Extract)中配置抽取对象信息

GGSCI (sywu) 2> edit param esydb001

extract ESYDB001
SETENV(ORACLE_SID="sydb")
SETENV(NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
userid ogg_owner,password AADAAAAAAAAAAAJANJBHVDBAGCCBOIUCTJHJVIOCVGBFSGNJFFAAGIOHBJNBWAPANGWILCPFGIXBOIXB &
aes128,ENCRYPTKEY securekey1
ENCRYPTTRAIL aes128,KEYNAME securekey1
EXTTRAIL /u01/app/product/ogg_src/dirdat/es
table OGG_OWNER.STB01;

在Data Pump(Secondly Extract)进程中配置抽取对象和数据过滤

GGSCI (sywu as ogg_owner@sydb) 6> edit param PSYDB001

extract psydb001
SETENV(ORACLE_SID="sydb")
SETENV (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
OBEY /u01/app/product/ogg_src/dirdef/dbConnect.obey
ENCRYPTTRAIL aes128 KEYNAME securekey1
RMTTRAIL /u01/app/product/ogg_trg/dirdat/ps
table OGG_OWNER.STB01 @filter(SGENDER='1');

更多关于数据过滤请参考:GoldenGate Filter

2.2 在源端生成表定义文件

表定义文件记录了交换数据表在数据库中的结构信息,内容包括数据库类型、字符集、时区、数据对象以及数据对象结构的详细信息,对象结构包含的信息如下:

*  Field descriptions for each column entry:
*
* 1 Name
* 2 Data Type
* 3 External Length
* 4 Fetch Offset
* 5 Scale
* 6 Level
* 7 Null
* 8 Bump if Odd
* 9 Internal Length
* 10 Binary Length
* 11 Table Length
* 12 Most Significant DT
* 13 Least Significant DT
* 14 High Precision
* 15 Low Precision
* 16 Elementary Item
* 17 Occurs
* 18 Key Column
* 19 Sub Data Type
* 20 Native Data Type
* 21 Character Set
* 22 Character Length
* 23 LOB Type
* 24 Partial Type

这些信息将帮助GoldenGate实现数据类型转换、匹配以及数据处理,比如源端的数据类型长度可能比目标端长,交换时GoldenGate将根据定义文件截取或转换数据。

2.2.1 什么时候需要定义文件

  • 当源端和目标端的表结构不相同时
  • 当数据库类型不相同时

2.2.2 生成表定义文件

生成表定义文件需要先创建定义配置文件,配置文件中指定定义文件存储路径和文件名(DEFSFILE)、数据库连接信息、需要生成表定义信息的对象(table);最后再根据定义配置文件通过GoldenGate自带的defgen命令生成表定义文件。
创建定义配置文件

[oracle@sywu dirdef]$ vim /u01/app/product/ogg_src/dirdef/psydb001.prm

 DEFSFILE /u01/app/product/ogg_src/dirdef/psydb001.def, purge
OBEY /u01/app/product/ogg_src/dirdef/dbConnect.obey
table OGG_OWNER.STB01;

根据定义配置文件生成定义文件

[oracle@sywu ogg_src]$ ./defgen PARAMFILE /u01/app/product/ogg_src/dirdef/psydb001.prm 

***********************************************************************
Oracle GoldenGate Table Definition Generator for Oracle
Version 12.1.2.1.0 OGGCORE_12.1.2.1.0_PLATFORMS_140727.2135.1
Linux, x64, 64bit (optimized), Oracle 11g on Aug 7 2014 05:45:39 Copyright (C) 1995, 2014, Oracle and/or its affiliates. All rights reserved. Starting at 2015-09-01 21:49:48
*********************************************************************** Operating System Version:
Linux
Version #1 SMP Thu Jul 31 17:20:51 UTC 2014, Release 2.6.32-431.23.3.el6.x86_64
Node: sywu
Machine: x86_64
soft limit hard limit
Address Space Size : unlimited unlimited
Heap Size : unlimited unlimited
File Size : unlimited unlimited
CPU Time : unlimited unlimited Process id: 7099 ***********************************************************************
** Running with the following parameters **
***********************************************************************
DEFSFILE /u01/app/product/ogg_src/dirdef/psydb001.def, purge
userid ogg_owner,password ******************************************************************************** aes128 encryptkey securekey1
table OGG_OWNER.STB01;
Retrieving definition for OGG_OWNER.STB01. Definitions generated for 1 table in /u01/app/product/ogg_src/dirdef/psydb001.def.

2.3 目标端Replicat进程配置源端表定义信息和源端与目标端字段的对照映射

将源端生成的表定义文件发送到目标端,然后在Replicat进程中配置表定义信息;

GGSCI (sywu) 9> edit param RSYDB001

REPLICAT rsydb001
SETENV(ORACLE_SID="sydb")
SETENV (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
USERID ogg_trg,password AADAAAAAAAAAAAHABDQFVJMADCAFECACYEPIQEJCFGDGMDHBRJXCUBOBQJEGLBPEBDMCOAACDILGAJKA &
aes128,ENCRYPTKEY securekey1
DISCARDFILE /u01/app/product/ogg_trg/discrd/reptr.desc,append,megabytes 512
DECRYPTTRAIL AES128, KEYNAME securekey1
SOURCEDEFS /u01/app/product/ogg_trg/dirdef/psydb001.def
ALLOWNOOPUPDATES
ASSUMETARGETDEFS
MAP OGG_OWNER.TOGG,target OGG_TRG.TOGG;
MAP OGG_OWNER.STB01,target OGG_TRG.TTB01,
COLMAP(TID=SID,
TNAME=SNAME,
TGENDER=SGENDER,
TBRIDATE=SBRIDATE,
TPROVINCE=ADETAIL,
TRANSFERDATE=@DATENOW()
);

SOURCEDEFS 定义源端的表结构定义文件信息;
COLMAP 定义源端表和目标表的数据项对照映射;
常用的GoldenGate函数:

函数名 说明
@DATE 返回转换日期格式
@DATENOW 返回当前系统时间
@GETENV 返回GoldenGate环境变量值
@STRFIND 返回指定字符在字符串中的位置

更多的函数说明请参考:GoldenGate官方列转换函数文档

2.3 目标端数据库实现省份和城市的数据分拆

因为有些拆分工作涉及复杂的操作,所以拆分字符的工作可以放在数据库的触发器中完成。

 create or replace trigger OGG_trg.trg_tTB01
before insert or update on OGG_trg.tTB01
for each row
declare
v_temp varchar2(100);
begin
if(:new.TPROVINCE is not null)
then
v_temp:=:new.TPROVINCE;
:new.TCITY:=substr(v_temp,instr(v_temp,'_')+1);
:new.TPROVINCE:=substr(v_temp,0,instr(v_temp,'_')-1);
end if;
end;
/

3 业务测试

启动源端和目标端的进程后在源端插入测试数据

insert into OGG_OWNER.STB01(
SID ,
SNAME ,
SGENDER ,
SBRIDATE ,
ADETAIL )
select 1,'sywu','1',sysdate,'云南省_临沧' from dual
union all
select 2,'xiaohong','2',sysdate,'云南省_昆明' from dual
/
commit;

检验数据

SYS@sydb>column TPROVINCE format a30
SYS@sydb>select * from OGG_OWNER.STB01; SID SNAME S SBRIDATE ADETAIL
---------- --------------- - ------------------ ----------------------------------------------------------------------
1 sywu 1 08-SEP-15 云南省_临沧
2 xiaohong 2 08-SEP-15 云南省_昆明 Elapsed: 00:00:00.00
SYS@sydb>select * from OGG_trg.ttb01; TID TNAME T TBRIDATE TPROVINCE TCITY TRANSFERDATE
---------- --------------- - ------------------ ------------------------------ ---------- ------------------
1 sywu 1 08-SEP-15 云南省_临沧 08-SEP-15 Elapsed: 00:00:00.01

4 GoldenGate支持触发器

通过以上测试查询发现,源端的数据可以交换到目标端了,但是目标端并没有实现将地址字段数据分拆,为什么?

SYS@sydb>column OWNER format a10
SYS@sydb>column TRIGGER_NAME format a20
SYS@sydb>column TRIGGER_TYPE format a20
SYS@sydb>column TRIGGERING_EVENT format a20
SYS@sydb>column TABLE_NAME format a20
SYS@sydb>select OWNER,TRIGGER_NAME,TRIGGER_TYPE,TRIGGERING_EVENT,TABLE_NAME,STATUS from dba_triggers where trigger_name='TRG_TTB01'; OWNER TRIGGER_NAME TRIGGER_TYPE TRIGGERING_EVENT TABLE_NAME STATUS
---------- -------------------- -------------------- -------------------- -------------------- --------
OGG_TRG TRG_TTB01 BEFORE EACH ROW INSERT OR UPDATE TTB01 ENABLED Elapsed: 00:00:00.09

但查询触发器是可用的哦,于是在官方文档上发现这样一段描述:官方文档DBOPTIONS参数


SUPPRESSTRIGGERS | NOSUPPRESSTRIGGERS Valid for nonintegrated Replicat for Oracle. Controls whether or not triggers are fired during the Replicat session. Provides an alternative to manually disabling triggers. (Integrated Replicat does not require disabling of triggers on the target system.)

SUPPRESSTRIGGERS is the default and prevents triggers from firing on target objects that are configured for replication with Oracle GoldenGate. SUPPRESSTRIGGERS is valid for Oracle 11.2.0.2 and later 11gR2 versions. SUPPRESSTRIGGERS is not valid for 11gR1.

To allow a specific trigger to fire, you can use the following SQLEXEC statement in the Replicat parameter file, where trigger_owner is the owner of the trigger and trigger_name is the name of the trigger.

SQLEXEC 'dbms_ddl.set_trigger_firing_property(trigger_owner "trigger_name", FALSE);'

你应该注意到了fire是默认值,so 要启用触发器只要设置NOSUPPRESSTRIGGERS即可;

GGSCI (sywu) 16> edit param RSYDB001
REPLICAT rsydb001
SETENV(ORACLE_SID="sydb")
SETENV (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
USERID ogg_trg,password AADAAAAAAAAAAAHABDQFVJMADCAFECACYEPIQEJCFGDGMDHBRJXCUBOBQJEGLBPEBDMCOAACDILGAJKA &
aes128,ENCRYPTKEY securekey1
DISCARDFILE /u01/app/product/ogg_trg/discrd/reptr.desc,append,megabytes 512
DECRYPTTRAIL AES128, KEYNAME securekey1
SOURCEDEFS /u01/app/product/ogg_trg/dirdef/psydb001.def
ALLOWNOOPUPDATES
ASSUMETARGETDEFS
DBOPTIONS NOSUPPRESSTRIGGERS
MAP OGG_OWNER.TOGG,target OGG_TRG.TOGG;
MAP OGG_OWNER.STB01,target OGG_TRG.TTB01,
COLMAP(TID=SID,
TNAME=SNAME,
TGENDER=SGENDER,
TBRIDATE=SBRIDATE,
TPROVINCE=ADETAIL,
TRANSFERDATE=@DATENOW()
);

现在就可以了

truncate table OGG_OWNER.STB01;
truncate table OGG_trg.ttb01; insert into OGG_OWNER.STB01(
SID ,
SNAME ,
SGENDER ,
SBRIDATE ,
ADETAIL )
select 1,'sywu','1',sysdate,'云南省_临沧' from dual
union all
select 2,'xiaohong','2',sysdate,'云南省_昆明' from dual
/
commit;
SYS@sydb>select * from OGG_OWNER.STB01; SID SNAME S SBRIDATE ADETAIL
---------- --------------- - ------------------ ----------------------------------------------------------------------
1 sywu 1 08-SEP-15 云南省_临沧
2 xiaohong 2 08-SEP-15 云南省_昆明 Elapsed: 00:00:00.00
SYS@sydb>select * from OGG_trg.ttb01; TID TNAME T TBRIDATE TPROVINCE TCITY TRANSFERDATE
---------- --------------- - ------------------ ------------------------------ ---------- ------------------
1 sywu 1 08-SEP-15 云南省 临沧 08-SEP-15 Elapsed: 00:00:00.00

5 总结

  数据过滤和数据匹配是数据交换中经常会涉及到的工作,每个工作都会有不同的处理和实现方式,但总的需求是不变的,对于GoldenGate重要的时去了解它的工作原理和处理数据时与其它工具不同的微妙之处,比如去了解和思考它如何通过某些自带的参数实现交换数据时禁用触发器和在不同的数据类型、长度转换间它截取放大数据的方式。

--The end(2015-09-09)

Oracle GoldenGate 四、数据过滤和数据项匹配的更多相关文章

  1. Oracle GoldenGate 同步数据至Hbase

    该方法没试过,先记下再说 1.软件版本说明: Goldengate 12c 12.2.0.1 for Oracle(源端) Goldengate 12c 12.3.0.1 for Bigdata (目 ...

  2. 为Oracle GoldenGate准备数据库

    了解如何为Oracle GoldenGate准备数据库,包括如何配置连接和日志记录,如何在数据库中启用Oracle GoldenGate,如何设置闪回查询以及如何管理服务器资源. 为集成进程配置连接 ...

  3. Oracle GoldenGate理论

    1Oracle GoldenGate处理方法和支持的数据库Oracle GoldenGate在多样和异构的基础IT平台中,可以在事务级别上进行数据交换和数据操作.在保证交易完整性和最小的开销的条件下, ...

  4. Oracle GoldenGate 12c实时捕获SQL Server数据

    在Oracle GoldenGate 12c中,对一些最新的数据库提供了支持,比如SQL Server 2012/2014,当然12c也支持sql server 2008.主要新增特性有: 捕获进程可 ...

  5. Oracle GoldenGate (以下简称ogg)在异种移植os同一种db之间的数据同步。

    Oracle GoldenGate (以下简称ogg)在异种移植os同一种db之间的数据同步. ogg要实现的功能: 同步可以细化到单个表,满足特定的where条件rows同步,称号column同步. ...

  6. mysql必知必会(四、检索数据,五、排序检索数据,六、过滤数据,七、数据过滤)

    四.select语句 1.检索单个列 select prod_name from products; 2.检索多个列 select prod_name, prod_price from product ...

  7. MySQL必知必会 读书笔记四:数据过滤

    过滤数据 WHERE 只检索所需数据需要指定搜索条件( search criteria) ,搜索条件也称为过滤条件( filtercondition) . 在SELECT语句中,数据根据WHERE子句 ...

  8. Oracle GoldenGate 支持 从SAP HANA database抽取或者复制数据到SAP HANA database 吗?

    Oracle GoldenGate 支持 从SAP  HANA database抽取或者复制数据到SAP HANA database 吗? 来源于: Does Oracle GoldenGate Su ...

  9. Oracle Goldengate是如何保证数据有序和确保数据不丢失的?

    工作中一直在用Oracle 的中间件Oracle GondenGate 是如何保证消息的有序和不丢失呢? Oracle GoldenGate逻辑架构 首先,先看一下Oracle GoldenGate ...

随机推荐

  1. 常见OJ评判结果对照表

    Waiting:你的程序刚刚提交,正在等待OJ评测你的程序.   Compiling:OJ正在编译你的程序.   Accepted:OK!你的程序是正确的 ^_^.   Wrong Answer:你的 ...

  2. TCP拥塞控制机制

     研究TCP的拥塞机制,不仅仅是想了解TCP如何的精巧,更多的是领悟其设计思想,即在一般情况下,我们该怎样处理问题.   一.拥塞的发生与其不可避免    拥塞发生的主要原因:在于网络能够提供的资源不 ...

  3. USB相关的sysfs文件

    主要来自driver/usb/core/sysfs.c: 1.bConfigurationValue RW,W时调用了usb_set_configuration()实时设置配置.根据USB规范(例如第 ...

  4. streamsets origin 说明

    origin 是streamsets pipeline的soure 入口,只能应用一个origin 在pipeline中, 对于运行在不同执行模式的pipeline 可以应用不同的origin 独立模 ...

  5. cocos2dx字体描边

    LabelTTF::create(); 这样fontname那不填表示使用设备默认字体 std::string lvstr = FunctionUtil::getChinese("guank ...

  6. macOS -- Mac系统如何通过终端使用mysql

    打开终端,输入下面的命令 mysql -u root -p 如果提示输入密码,并且能直接进入,那就太棒了,下面的就不用看了,直接使用就好了 如果没有这么幸运,提示 command not found ...

  7. C++ Primer第五版答案

    Downloads Download the source files for GCC 4.7.0. Download the source code files for MS Visual Stud ...

  8. GCC 三

    前记: 经常浏览博客园的同学应该会觉得本文有标题党之嫌,这个标题的句式来自于MiloYip大牛的大作<C++强大背后>,在此,向Milo兄致意. GCC,全称GNU Compiler Co ...

  9. C语言的第一次实验报告

    一.实验题目,设计思路,实现方法 第四次 分支+循环 加强版 (4.2.7 装睡) 设计思路:由题意可知通过最初输入量判断循环次数,根据输出形式可知在每次循环中需重新定义输入量并判断其是否满足题中条件 ...

  10. Linux操作系统-基本命令(二)

    Linux操作系统基本命令 文件操作类命令 – ln命令 另外一种链接方式称为符号链接(软链接),是指一个文件指向另外一个文件的文件名.软链接类似于Windows系统中的快捷方式.软链接由ln -s命 ...