如何進(jìn)行OGG中的審計,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的楚雄州網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
源表:
create table TB11(id number primary key,name varchar(10));
目標(biāo)表:
create table TB11(id number primary key,name varchar(10), src_time date);
create table TB11_audit(id number,name varchar(10),src_time date, trg_time date,op_type varchar2(20),src_user varchar2(10));
源端:
GGSCI (pc6) 20> edit params ext_s1
extract ext_s1
setenv (NLS_LANG='AMERICAN_AMERICA.AL32UTF8')
setenv (ORACLE_SID='hyyk')
userid ogg,password oracle
gettruncates
exttrail /u01/app/oggs/dirdat/ss
table sender.tb11, TOKENS (TKN-USERNAME=@getenv('TRANSACTION','CSN'));
--說明:在源端extract進(jìn)程中使用TOKEN在trail文件頭部用戶TOKEN部分定義了一個變量:
TKN-USERNAME,這個變量的值是通過@GETENV來獲得當(dāng)前Goldengate運行環(huán)境中和數(shù)據(jù)庫事務(wù)相關(guān)源端數(shù)據(jù)庫提交事務(wù)的用戶信息
目標(biāo)端replicat進(jìn)程 (用于加時間戳):
GGSCI (ogg-80 as ogg@ogg) 144> view params rep_s1
replicat rep_s1
setenv(NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
setenv(ORACLE_SID='ogg')
userid ogg,password oracle
--handlecollisions
ASSUMETARGETDEFS
--SOURCEDEFS /u01/app/oggd/dirdef/test.def
DISCARDFILE ./dirrpt/rorabb.dsc,PURGE
userid ogg,password oracle
map sender.tb11,target receiver.tb11,
COLMAP (USEDEFAULTS,
SRC_TIME = @GETENV('GGHEADER','COMMITTIMESTAMP'));
說明:此時目標(biāo)有2個replicat進(jìn)程,這兩個進(jìn)程讀的trail文件是同一份,這里是第一個進(jìn)程:ggs_rep1,這個進(jìn)程負(fù)責(zé)正常的數(shù)據(jù)復(fù)制,
即從源端的TB11表復(fù)制到目標(biāo)的TB11表,只不過在目標(biāo)的TB11表上多了一個字段SRC_TIME(記錄源端事務(wù)提交的時間),因為多了一個字
段,這里就要調(diào)用COLMAP來做映射了,在COLMAP字句中使用@GETENV函數(shù),該函數(shù)配置的參數(shù)是GGHEADER類別下的COMMITTIMESTAMP這個屬
性,而這個屬性就是用來獲取時間戳,即記錄事務(wù)提交的時間,格式為YYY-MM-DD HH:MI:SS.FFFFFF。
目標(biāo)replicat進(jìn)程(用于審計):
REPLICAT ggs_rep2
USERID ogg, PASSWORD oracle
ASSUMETARGETDEFS
INSERTALLRECORDS
DISCARDFILE ./dirrpt/ggs_rep2.dsc, APPEND, MEGABYTES 1024
WILDCARDRESOLVE DYNAMIC
DYNAMICRESOLUTION
MAP SENDER.TB11, TARGET RECEVIER.TB11_AUDIT,
COLMAP (USEDEFAULTS,
SRC_TIME = @GETENV('GGHEADER','COMMITTIMESTAMP'),
TRG_TIME = @DATENOW (),
OP_TYPE = @GETENV('GGHEADER', 'OPTYPE'),
SRC_USER = @TOKEN ('TKN-USERNAME'));
TRG_TIME = @DATENOW () --DATENOW 返回當(dāng)前的日期和時間
add replicat ggs_rep2,exttrail /u01/app/oggd/dirdat/sd,checkpointtable ogg.ckpt
說明:這是目標(biāo)第二個replicat進(jìn)程,這個進(jìn)程負(fù)責(zé)審計表的復(fù)制,即從源端的TB11表復(fù)制到目標(biāo)審計表TB11_AUDIT,前面也看到需求中的內(nèi)容了,
審計表多了4個字段,分別用于記錄源端每個事務(wù)操作的時間、目標(biāo)端提交的時間、源端的操作類型、源端數(shù)據(jù)庫用戶名。該進(jìn)程參數(shù)文件中使用了
一個非常重要的參數(shù):INSERTALLRECORDS ,這個參數(shù)會讓復(fù)制進(jìn)程插入對于目標(biāo)端一條記錄所有的變化修改,即能起到審計的作用。同時在這個進(jìn)
程中,使用@GETENV函數(shù)來獲取goldengate運行環(huán)境中的GGHEADER下的COMMITTIMESTAMP(源端時間)和OPTYPE(操作類型);使用@DATENOW ()來獲
取目標(biāo)端提交時間;使用@TOKEN函數(shù)來獲取源端定義在trail文件頭部定義的用戶令牌部分的變量TKN-USERNAME的值,即源端的數(shù)據(jù)庫用戶信息。
源端執(zhí)行了以下sql:
SQL> insert into TB11 values(1,'a');
SQL> commit;
SQL> insert into TB11 values(2,'a');
SQL> commit;
SQL> update TB11 set name='c' where id=2;
SQL> commit;
SQL> delete from TB11 where id=2;
SQL> commit;
SQL> update TB11 set id=2 where id=1;
SQL> commit;
完成后,源端表查詢記錄如下:
SENDER@hyyk> select * from tb11;
ID NAME
---------- ----------
2 a
從目標(biāo)表查詢的結(jié)果如下:
RECEIVER@ogg> select * from tb11;
ID NAME SRC_TIME
---------- ---------- -------------------
2 a 2018-03-16 11:41:34
SQL> set linesize 200
RECEIVER@ogg> select * from TB11_AUDIT;
ID NAME SRC_TIME TRG_TIME OP_TYPE SRC_USER
---------- ---------- ------------------- ------------------- -------------------- ----------
1 a 2018-03-16 11:05:07 2018-03-16 11:27:51 INSERT 1849360
2 a 2018-03-16 11:31:00 2018-03-16 11:31:06 INSERT 1850347
c 2018-03-16 11:39:46 2018-03-16 11:39:52 SQL COMPUPDATE 1850679
2 c 2018-03-16 11:41:11 2018-03-16 11:41:19 DELETE 1850749
2 2018-03-16 11:41:34 2018-03-16 11:41:43 PK UPDATE 1850766
說明:目標(biāo)端TB11表中的數(shù)據(jù)和源端保持一致,只是多了一列表示最后事務(wù)提交的時間;目標(biāo)表TB11_AUDIT負(fù)責(zé)將源表所有的操作審計下來,其中最后兩行name字段沒有填充值進(jìn)來,
是因為TB11表上有主鍵,對于刪除操作和鍵值更新的操作時,在日志中只有鍵值列相關(guān)的信息,如果需要顯示其他字段信息,就需要把這些字段都加入附加日志中去。同時OP_TYPE這
列中和update操作相關(guān)的有兩個值“SQL COMPUPDATE”和“PK UPDATE”,分別表示了非鍵值列的更新和鍵值列的更新。
這里將審計表的列與logdump出來的tiail對比
ID NAME SRC_TIME TRG_TIME OP_TYPE SRC_USER
---------- ---------- ------------------- ------------------- -------------------- ----------
1 a 2018-03-16 11:05:07 2018-03-16 11:27:51 INSERT 1849360
2018/03/16 11:05:07.932.429 Insert Len 18 RBA 1972
Name: SENDER.TB11 (TDR Index: 1)
After Image: Partition 12 GU s
0000 0005 0000 0001 3100 0100 0500 0000 0161 | ........1........a
Column 0 (x0000), Len 5 (x0005)
0000 0001 31 | ....1
Column 1 (x0001), Len 5 (x0005)
0000 0001 61 | ....a
User tokens: 21 bytes
544b 4e2d 5553 4552 4e41 4d45 0031 3834 3933 3630 | TKN-USERNAME.1849360
00 | .
關(guān)于如何進(jìn)行OGG中的審計問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。