she ofen:CDC Synchronous Publishing 实例演示(原)

来源:百度文库 编辑:偶看新闻 时间:2024/03/29 16:22:22
CDC Synchronous Publishing 实例演示(原) (2009-08-27 00:43) 分类: ORACLE BI

下面运用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
如果要问为什么设定这个参数,请查看
http://blog.chinaunix.net/link.php?url=http://download.oracle.com%2Fdocs%2Fcd%2FB19306_01%2Fserver.102%2Fb14223%2Fcdc.htm%23i1025456
里面介绍了使用各种模式配置Change Data Capture需要设定的初始化参数。
SQL> show parameter javaNAME                                 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语句的时候,这个表里都会记录相应的改变的数据。