Oracle GoldenGate有众多解决方案,其中有一个可用来实现数据同步增量跟踪.比如有的业务系统需要实时的记录某些数据的各种变化,通过OGG可以轻松的实现。
应用场景:现需要实现对源端库中空间数据表,数据变化进行监控。
源端点空间数据表结构:
create table SDE_POINT
(
OID INTEGER not null,
GEOMETRY MDSYS.SDO_GEOMETRY not null,
NAME VARCHAR2(50)
)
alter table SDE_POINT add primary key (OID);
//目标增量变化信息表
-- Create table
create table CHJ_DATA_CHANGE_HIS
(
ID VARCHAR2(50),
TABLE_NAME VARCHAR2(1000),
BEFORE_AFTER VARCHAR2(32),
DEAL_DATE TIMESTAMP(6),
OP_FLAG VARCHAR2(32)
)
tablespace TBS_SGS_TEST
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64
next 8
minextents 1
maxextents unlimited
);
Goldengate 配置
在源端上,配置一个Extract : sgs_jtt, 参数如下,其中粗体部分是必须的参数。
EXTRACT SGS_JTT
SETENV (NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")
USERID goldengate, PASSWORD goldengate
RMTHOST 126.33.8.96, MGRPORT 8200
RMTTRAIL ./dirdat/jt
GETUPDATEBEFORES
TABLE sgs_jtt.SDE_LINE;
TABLE sgs_jtt.SDE_POINT;
TABLE sgs_jtt.SDE_SURFACE;
再在目标端配置一个Replicat his_chj 参数配置如下:
replicat his_chj
SETENV (NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")
USERID goldengate@orcl, PASSWORD goldengate
ASSUMETARGETDEFS
INSERTALLRECORDS
MAP sgs_jtt.*, TARGET SGS_CHJ.CHJ_DATA_CHANGE_HIS,
COLMAP ( id = id ,
TABLE_NAME=@getenv("GGHEADER", "TABLENAME"),
BEFORE_AFTER=@getenv("GGHEADER", "BEFOREAFTERINDICATOR"),
DEAL_DATE=@getenv ("GGHEADER", "COMMITTIMESTAMP"),
OP_FLAG=@getenv ("GGHEADER", "OPTYPE")
);
此处 id = id 是我随机写的,并没有依据,但还是能获取到源端改动的主键OID的值,不知道从哪映射过来的