Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4478135
  • 博文数量: 109
  • 博客积分: 10011
  • 博客等级: 上将
  • 技术积分: 2457
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-18 19:04
文章分类

全部博文(109)

文章存档

2011年(1)

2010年(10)

2009年(36)

2008年(62)

我的朋友

分类: Oracle

2009-08-27 00:43:05

下面运用Performing Synchronous Publishing的方式实现Change Data Capture。
为了实现同步捕获改变数据,publisher必须用预定义的change source, SYNC_SOURCE。publisher可以自行定义新的change sets ,也可以用预定义的change sets,SYNC_SET。如果使用预定于的change sets,可以直接跳到STEP3;
Step 1:设置初始化参数。
java_pool_size = 50000000
如果要问为什么设定这个参数,请查看

里面介绍了使用各种模式配置Change Data Capture需要设定的初始化参数。
SQL> show parameter java
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
java_max_sessionspace_size           integer     0
java_pool_size                       big integer 48M
java_soft_sessionspace_limit         integer     0

Step2:创建表空间
SQL> create tablespace ts_cdcpub datafile 'D:\oracle\product\10.2.0\oradata\ocp10g\cdcpubdata.dbf' s
ize 100m;
表空间已创建。
 
Step3:建立PUBLISHER用户cdcpub,并授权。
CREATE USER cdcpub IDENTIFIED BY cdcpub DEFAULT TABLESPACE ts_cdcpub
QUOTA UNLIMITED ON SYSTEM
QUOTA UNLIMITED ON SYSAUX;
GRANT CREATE SESSION TO cdcpub;
GRANT CREATE TABLE TO cdcpub;
GRANT CREATE TABLESPACE TO cdcpub;
GRANT UNLIMITED TABLESPACE TO cdcpub;
GRANT SELECT_CATALOG_ROLE TO cdcpub;
GRANT EXECUTE_CATALOG_ROLE TO cdcpub;
GRANT ALL ON sh.sales TO cdcpub;
GRANT ALL ON sh.products TO cdcpub;
GRANT EXECUTE ON DBMS_CDC_PUBLISH TO cdcpub;
 
Step4:建立一个change set.名字叫CHICAGO_DAILY。
SQL>  BEGIN
  2      DBMS_CDC_PUBLISH.CREATE_CHANGE_SET(
  3      change_set_name    => 'CHICAGO_DAILY',
  4      description        => 'Change set for sales history info',
  5      change_source_name => 'SYNC_SOURCE');
  6  END;
  7  /
PL/SQL 过程已成功完成。
 
Step5:建立一个change table。名字叫products_ct;
SQL> BEGIN
  2     DBMS_CDC_PUBLISH.CREATE_CHANGE_TABLE(
  3  owner             => 'cdcpub',
  4     change_table_name => 'products_ct',
  5     change_set_name   => 'CHICAGO_DAILY',
  6     source_schema     => 'SH',
  7     source_table      => 'PRODUCTS',
  8     column_type_list  => 'PROD_ID NUMBER(6),
  9                           PROD_NAME VARCHAR2(50),
 10                           PROD_LIST_PRICE NUMBER(8,2)',
 11     capture_values    => 'both',
 12     rs_id             => 'y',
 13     row_id            => 'n',
 14     user_id           => 'n',
 15     timestamp         => 'n',
 16     object_id         => 'n',
 17     source_colmap     => 'y',
 18     target_colmap     => 'y',
 19     options_string    => 'TABLESPACE ts_cdcpub');
 20  END;
 21   /
PL/SQL 过程已成功完成。
 
Step6:授权subscriber用户可以访问这个change table;
GRANT SELECT ON cdcpub.products_ct TO subscriber1;
 
 
这样建立一个同步的Publishing就完成了。我们可以做一个试验:
我们可以用cdcpub用户登陆。
SQL> desc products_ct
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 OPERATION$                                         CHAR(2)
 CSCN$                                              NUMBER
 COMMIT_TIMESTAMP$                                  DATE
 RSID$                                              NUMBER
 SOURCE_COLMAP$                                     RAW(128)
 TARGET_COLMAP$                                     RAW(128)
 PROD_ID                                            NUMBER(6)
 PROD_NAME                                          VARCHAR2(50)
 PROD_LIST_PRICE                                    NUMBER(8,2)
SQL> select * from products_ct;
未选定行
然后我用SH用户登陆
SQL> conn sh/sh;
已连接。
SQL> update products set prod_name ='Laptop carrying case chirs_test' where prod_id=19;
已更新 1 行。
然后我再用cdcpub登陆,并查看products_ct表。
SQL> conn cdcpub/cdcpub;
已连接。
SQL> select t.prod_id ,t.prod_name from products_ct t;
   PROD_ID PROD_NAME
---------- --------------------------------------------------
        19 Laptop carrying case
        19 Laptop carrying case chirs_test
发现已经得到了发生改变的数据。这个表还有其他的字段,大家可以试验一下。
当我们做任何DML语句的时候,这个表里都会记录相应的改变的数据。
 
 
 
阅读(1063) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~