29. Mapping the changes to a target table and storing the transaction history in a history table

简单说明:

OGG允许追踪一条记录的历史数据,并将其映射到另外一张表来记录事务历史,本篇博文主要测试该功能
依据《11. Setting up a simple GoldenGate replication confguration between two single node databases》
部署试验环境模拟本次实验,将该博文实验步骤全部执行完毕

实验步骤:

1° 目标库创建保存历史记录的表:

su - oracle
sqlplus scott/tiger
create table EMP_TXN_HISTORY
(
  empno        NUMBER(4) not null,
  ename        VARCHAR2(10),
  job          VARCHAR2(9),
  mgr          NUMBER(4),
  hiredate     DATE,
  sal          NUMBER(7,2),
  comm         NUMBER(7,2),
  deptno       NUMBER(2),
  TXN_DATE     DATE,
  OPERATION    VARCHAR2(255),
  BEFORE_AFTER VARCHAR2(255)
);

2° 源库打开EMP表的附加日志,记录所有列信息:

su - oracle
sqlplus scott/tiger
ALTER TABLE EMP ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
-- 需要重新设置附加日志,记录所有的列信息,而非仅仅是key信息
exit

3° 改写源端抽取和发送进程配置,重启进程:

su - oracle
cd /ggs/dirprm
cat>EGGTEST1.prm<<EOF
EXTRACT EGGTEST1
USERID ggs, PASSWORD ggs
EXTTRAIL /ggs/dirdat/st
GETUPDATEBEFORES
NOCOMPRESSDELETES
NOTCPSOURCETIMER
-- 默认是TCPSOURCETIMER
-- 如果网络传输存在延迟或者目标端应用较慢
-- 会造成时间戳不准确,建议使用NOTCPSOURCETIMER
TABLE SCOTT.*;
EOF
cat>PGGTEST1.prm<<EOF
EXTRACT PGGTEST1
USERID ggs, PASSWORD ggs
RMTHOST 192.168.77.11, MGRPORT 8809
RMTTRAIL /ggs/dirdat/rt
GETUPDATEBEFORES
NOTCPSOURCETIMER
TABLE SCOTT.*;
EOF
cd /ggs
./ggsci
stop *
start *
exit

4° 目标端创建另外一个应用进程,专门用于保存事务历史:

su - oracle
cd /ggs/dirprm
cat>RGGTEST2.prm<<EOF
REPLICAT RGGTEST2
USERID ggs, PASSWORD ggs
DISCARDFILE /ggs/dirrpt/RGGTEST2.dsc, append, MEGABYTES 500
ASSUMETARGETDEFS
INSERTALLRECORDS
MAP SCOTT.EMP, TARGET SCOTT.EMP_TXN_HISTORY, &
COLMAP (USEDEFAULTS, TXN_DATE     = @GETENV ("GGHEADER", "COMMITTIMESTAMP"), &
                     OPERATION    = @GETENV ("GGHEADER", "OPTYPE"), &
                     BEFORE_AFTER = @GETENV ("GGHEADER", "BEFOREAFTERINDICATOR"));
-- 列 BEFORE_AFTER 通过 @GETENV ("GGHEADER", "BEFOREAFTERINDICATOR") 
-- 获得信息是BEFORE还是AFTER,如果是INSERT操作,信息就是AFTER,即插入之后的信息,BEFORE是没有信息的
-- 如果是UPDATE,则记录BEFORE和AFTER两条信息,因为UPDATE可以看作INSERT和DELETE的操作集合
EOF
cd /ggs
./ggsci
DBLOGIN, USERID ggs PASSWORD ggs
ADD CHECKPOINTTABLE ggs.rggtest2_ckpt
ADD REPLICAT RGGTEST2, EXTTRAIL /ggs/dirdat/rt, CHECKPOINTTABLE ggs.rggtest2_ckpt
START RGGTEST2

5° 原应用进程不做修改,正常启动状态

6° 测试验证:

# 源端操作
su - oracle
sqlplus scott/tiger
insert into emp values(9999,'vincent','vincent',7788,sysdate,100,100,10);
commit;
exit

# 目标端验证
sqlplus scott/tiger
select * from EMP_TXN_HISTORY;
exit
# 实验成功

实验总结:

参数简介:
GETUPDATEBEFORES
该参数是用来抽取update操作之前的数据的参数
如果没有该参数,update操作之前的数据状态不会抽取到trail文件中

NOCOMPRESSDELETES
对于DELETE操作,OGG默认只记录主键信息
使用该参数让OGG记录DELETE之前的数据到trail文件中

INSERTALLRECORDS
读取trail文件中的操作并转换成相应的INSERT操作信息
也就是该参数会将非INSERT操作转化成INSERT操作
下方使用的MAP参数所映射的就是这些转换出来的INSERT信息进行复制的

[TOC]

猜你喜欢

转载自blog.csdn.net/zwjzqqb/article/details/81103443