本帖最后由 legend_xuls 于 2012-2-2 17:39 编辑
我在实现oracle数据监控的时候,看到有两个oracle提供给的机制,FGA(Fine-Grained Audit)细粒度审计 和 CDC(change data capture)变化数据抓取。 我的想法是 首先获取到对指定配置表有增删改操作时,触发一个告警,并在产生告警的同时能够得到增删改操作的新旧数据。
通过 FGA(Fine-Grained Audit)细粒度审计时,能够获取到具体的操作系统用户名称、主机名称,以及实际操作的sql语句,还有一个 SCN(system change number)系统变更号;
--创建审计策略
begin
dbms_fga.add_policy(object_schema => 'crm01_gwtst',--schema名(默认当前操作用户)
object_name => 'HHXULS', --被操作object对象
policy_name => 'AUDIT_HHXULS', --policy名(唯一)
audit_condition => NULL,
audit_column => NULL,--'tno,type,modifydate', --监视的字段(默认为全部)
handler_schema => NULL,
handler_module => NULL,
enable => TRUE,
statement_types => 'insert,update,delete', --受影响的操作
audit_trail => dbms_fga.DB_EXTENDED, --默认值
audit_column_opts => dbms_fga.ANY_COLUMNS);--默认值
end;
--所有policy的列表
select * from dba_audit_policies
--查看审计结果
select * from dba_fga_audit_trail
order by TIMESTAMP desc
通过 CDC(change data capture)变化数据抓取时,能够获得变更操作的新旧数据,以及一个SCN(system change number)系统变更号;
--1 创建改变集
BEGIN
DBMS_CDC_PUBLISH.CREATE_CHANGE_SET(
change_set_name => 'hhxuls_change_set',--改变集
description => 'Change set for hhxuls info',
change_source_name => 'SYNC_SOURCE');
END;
--2 创建改变表
BEGIN
DBMS_CDC_PUBLISH.CREATE_CHANGE_TABLE(
owner => 'cdc_publisher',
change_table_name => 'hhxuls_ct',
change_set_name => 'hhxuls_change_set',
source_schema => 'crm01_gwtst',
source_table => 'hhxuls',
column_type_list => 'NAME VARCHAR2(100),SQLMSG VARCHAR2(2048),REMARK VARCHAR2(256)',
capture_values => 'both',
rs_id => 'y',
row_id => 'n',
user_id => 'n',
timestamp => 'n',
object_id => 'n',
source_colmap => 'y',
target_colmap => 'y',
options_string => 'TABLESPACE ts_cdcpub');
END;
--3 创建订阅
BEGIN
DBMS_CDC_SUBSCRIBE.CREATE_SUBSCRIPTION(
change_set_name => 'hhxuls_change_set',
description => 'Change data for hhxuls',
subscription_name => 'HHXULS_SUB');
END;
--4 订阅表
BEGIN
DBMS_CDC_SUBSCRIBE.SUBSCRIBE(
subscription_name => 'HHXULS_SUB',
source_schema => 'crm01_gwtst',
source_table => 'HHXULS',
column_list => 'NAME,SQLMSG,REMARK',
subscriber_view => 'HHXULS_VIEW');
END;
--5 激活订阅
Begin
DBMS_CDC_SUBSCRIBE.activate_subscription(subscription_name => 'HHXULS_SUB');
END;
-- 6 扩展窗口的应用
BEGIN
DBMS_CDC_SUBSCRIBE.EXTEND_WINDOW(
subscription_name => 'HHXULS_SUB');
END;
--7 查看
在创建的视图 HHXULS_VIEW 中可以查看记录变更新旧数据
现在遇到一个问题:两个子集中(FGA的信息集合和CDC的信息集合)的SCN不同,因此不能将两个获取的信息集合关联起来。
不明白为什么两个 SCN 不一样?
是否还有别的方法来实现数据监控?
感谢回复!
|