共计 4049 个字符,预计需要花费 11 分钟才能阅读完成。
如何进行 OGG 中的审计,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
源表:
create table TB11(id number primary key,name varchar(10));
目标表:
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 进程中使用 TOKEN 在 trail 文件头部用户 TOKEN 部分定义了一个变量:
TKN-USERNAME,这个变量的值是通过 @GETENV 来获得当前 Goldengate 运行环境中和数据库事务相关源端数据库提交事务的用户信息
目标端 replicat 进程(用于加时间戳):
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
说明:此时目标有 2 个 replicat 进程,这两个进程读的 trail 文件是同一份,这里是第一个进程:ggs_rep1,这个进程负责正常的数据复制,
即从源端的 TB11 表复制到目标的 TB11 表,只不过在目标的 TB11 表上多了一个字段 SRC_TIME(记录源端事务提交的时间),因为多了一个字
段,这里就要调用 COLMAP 来做映射了,在 COLMAP 字句中使用 @GETENV 函数,该函数配置的参数是 GGHEADER 类别下的 COMMITTIMESTAMP 这个属
性,而这个属性就是用来获取时间戳,即记录事务提交的时间,格式为 YYY-MM-DD HH:MI:SS.FFFFFF。
目标 replicat 进程(用于审计):
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 返回当前的日期和时间
add replicat ggs_rep2,exttrail /u01/app/oggd/dirdat/sd,checkpointtable ogg.ckpt
说明:这是目标第二个 replicat 进程,这个进程负责审计表的复制,即从源端的 TB11 表复制到目标审计表 TB11_AUDIT,前面也看到需求中的内容了,
审计表多了 4 个字段,分别用于记录源端每个事务操作的时间、目标端提交的时间、源端的操作类型、源端数据库用户名。该进程参数文件中使用了
一个非常重要的参数:INSERTALLRECORDS,这个参数会让复制进程插入对于目标端一条记录所有的变化修改,即能起到审计的作用。同时在这个进
程中,使用 @GETENV 函数来获取 goldengate 运行环境中的 GGHEADER 下的 COMMITTIMESTAMP(源端时间)和 OPTYPE(操作类型);使用 @DATENOW () 来获
取目标端提交时间;使用 @TOKEN 函数来获取源端定义在 trail 文件头部定义的用户令牌部分的变量 TKN-USERNAME 的值,即源端的数据库用户信息。
源端执行了以下 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
从目标表查询的结果如下:
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
说明:目标端 TB11 表中的数据和源端保持一致,只是多了一列表示最后事务提交的时间;目标表 TB11_AUDIT 负责将源表所有的操作审计下来,其中最后两行 name 字段没有填充值进来,
是因为 TB11 表上有主键,对于删除操作和键值更新的操作时,在日志中只有键值列相关的信息,如果需要显示其他字段信息,就需要把这些字段都加入附加日志中去。同时 OP_TYPE 这
列中和 update 操作相关的有两个值“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 | .
关于如何进行 OGG 中的审计问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注丸趣 TV 行业资讯频道了解更多相关知识。