Oracle CDC实验备忘

来源:互联网 发布:清朗网络手抄报 编辑:程序博客网 时间:2024/04/28 11:34

Oracle CDC实验备忘

1.实验环境

windows2003, Oracle 10.2.0.1.0

2.实现原理理解

整个过程分为 发布 与 订阅两部分

发布部分的原理为:建立统一的变更集Change Set,在变更集,针对需要发布的表,建立变更表Change Table,再定制需要发布的列信息,Oracle CDC内部机制(应该是触发器)会将需要捕获的表的变动记录到Change Table

订阅部分原理为:订阅者首先建立订阅,然后提交需要订阅的表名与列信息(前提是发布者已发布这些表与列),订阅活动会自动创建一个接收变更的视图,在激活订阅活动后,订阅者需要定时调用extend_window以获取最新的变动到视图中,以获取订阅信息。

3.实验过程中,使用内建的sys做测试,一直失败,建立网友发布的资料中的所有环境后,按照资料照搬所有实验语句,运行成功,还没找到原因,现把测试语句摘抄如下:

发布模块--------

查看Oracle版本号

select * from v$version;

创建发布者用户名

create user cdcpub identified by cdcpub;

分别赋予不同的权限

grant execute_catalog_role to cdcpub;

grant select_catalog_role to cdcpub;

grant create table to cdcpub;

grant create session to cdcpub;

grant execute on dbms_cdc_publish to cdcpub;

设置系统java_pool_size参数

alter system set java_pool_size=48M;

给用户cdcpub授予需要发布表的所有权限

grant all on ning.sales to cdcpub;

创建变更集

begin
  dbms_cdc_publish.create_change_set(
  change_set_name =>'ning_sales',
  description =>'change set for ning.sales',
  change_source_name =>'SYNC_SOURCE');
end;

将表创建到users表空间

alter user cdcpub quota unlimited on users;

创建变更表Change Table

begin
  dbms_cdc_publish.create_change_table(
  owner =>'cdcpub',
  change_table_name=>'sales_ct',
  change_set_name=>'ning_sales',
  source_schema=>'ning',
  source_table=>'sales',
  column_type_list=>'id int,productid int,price number(10,2),quantity int',
  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 users');
end;

创建订阅者

create user cdcsub identified by cdcsub;

并赋予相应权限

grant create session to cdcsub;
grant create table to cdcsub;
grant select on cdcpub.sales_ct to cdcsub;

 

订阅部分--------

查看可以订阅的表

select * from all_source_tables;

查看可以订阅的Change Set 和 Column

select distinct change_set_name,column_name,pub_id
  from all_published_columns
  where source_schema_name='NING' and source_table_name='SALES';

创建订阅

begin
  dbms_cdc_subscribe.create_subscription(
  change_set_name=>'ning_sales',
  description=>'change data for sales',
  subscription_name=>'sales_sub');
end;

订阅具体的表和列

begin
  dbms_cdc_subscribe.subscribe(
  subscription_name=>'sales_sub',
  source_schema=>'NING',
  source_table=>'SALES',
  column_list=>'id,productid,price,quantity',
  subscriber_view=>'sales_view');
end;

激活订阅

begin
  dbms_cdc_subscribe.activate_subscription(
  subscription_name=>'SALES_SUB');
end;

在源表中对数据进行添加删除修改等DML语言操作,并Commit

扩展订阅查询

begin
  dbms_cdc_subscribe.extend_window(
 subscription_name=>'SALES_SUB');
end;

查询捕获到的数据DML事件

select id,productid,price,quantity from sales_view;

在每次新的DML操作后,必须重新进行扩展订阅,方能查询到变更

清除订阅到的变化的数据,清除后,下次扩展查询后不会再次出现被清除的DML记录

begin
  dbms_cdc_subscribe.purge_window(
  subscription_name=>'SALES_SUB');
end;

停止订阅

begin
  dbms_cdc_subscribe.drop_subscription(
  subscription_name=>'SALES_SUB');
end;

 

原创粉丝点击