使用ORACLE的FAG和CDC实现数据监控时遇到SCN不一致的问题

[复制链接]
查看11 | 回复4 | 2011-11-1 16:25:51 | 显示全部楼层 |阅读模式
本帖最后由 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 不一样?
是否还有别的方法来实现数据监控?
感谢回复!



回复

使用道具 举报

千问 | 2011-11-1 16:25:51 | 显示全部楼层
还以为是ibm的CDC
回复

使用道具 举报

千问 | 2011-11-1 16:25:51 | 显示全部楼层
〇〇 发表于 2012-2-2 18:40
还以为是ibm的CDC

5年前做数据仓库开发是,搞过5款 CDC 产品的 POC (项目选择阶段概念验证)
现在,都忘光光了
回复

使用道具 举报

千问 | 2011-11-1 16:25:51 | 显示全部楼层
solomon_007 发表于 2012-2-2 19:16
5年前做数据仓库开发是,搞过5款 CDC 产品的 POC (项目选择阶段概念验证)
现在,都忘光光了

gg也是cdc吧?
回复

使用道具 举报

千问 | 2011-11-1 16:25:51 | 显示全部楼层
〇〇 发表于 2012-2-2 20:15
gg也是cdc吧?

是的, 07年的时候, goldengate好像还是一家独立的公司...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行