利用Oracle GoldenGate记录源系统所有表的操作

时间:2024-04-18 11:05:49

通过goldengate,可以实现目标表和源表不同结构之间的实时复制,包括记录源系统所有表的变更操作,供ETL或其它审计系统使用。

记录信息包括表名、操作时间、操作SCN,事务标记,操作类型到一个流水表。用于后续ETL处理过程中的按序处理。

创建日志记录表

create table odi.odi_trans (

id int primary key,
tb_name varchar(100),
commit_tm timestamp,
op_type varchar(50),                               
tran_ind varchar(100),
tran_csn varchar(100),
insert_tm timestamp,
flag smallint default 0,
proc_tm timestamp
);

创建序列

CREATE SEQUENCE odi.seq_odi_tran
     INCREMENT BY 1  -- 每次加几个 
     START WITH 1    -- 从1开始计数 
     NOMAXVALUE      -- 不设置最大值 
     NOCYCLE         -- 一直累加,不循环 
     CACHE 10;

创建OGG的投递进程,此进程与其它投递进程无关;即正常表的复制可以使用另外的进程处理。

投递进程参数配置

REPLICAT reall
userid goldengate, password goldengate
ASSUMETARGETDEFS
DISCARDFILE ./dirrpt/REPall.DSC, append

eofdelay 5

insertAllRecords
map dts.*, target odi.odi_trans,
   sqlexec(id odiseq, query "select odi.seq_odi_tran.nextval val from dual"),
   colmap(id=odiseq.val,
   tb_name=@Getenv('ggheader','tablename'),
   commit_tm=@getenv('GGHEADER','committimestamp'),
   op_type=@getenv('GGHEADER','optype'),
   insert_tm=@datenow(),
   tran_ind=@getenv('GGHEADER','TRANSACTIONINDICATOR'),
   tran_csn=@getenv('TRANSACTION','CSN')), keycols(tb_name,tran_csn)

GGSCI>add rep reall, exttrail ./dirdat/ea

以下是捕获之后的示例数据:

利用Oracle GoldenGate记录源系统所有表的操作