利用Oracle GoldenGate記錄源系統所有表的操作

margiex發表於2018-01-20

通過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

以下是捕獲之後的示例資料:

image

相關文章