oracle CDC 源表指定字段变化 才在变化表里生成变化记录 该怎么配置?

q03043123 2014-05-15 02:42:11
CDC 同步:
(1)创建一个用户,作为发布者:
SYS-->SQL: create user cdc_pub identified by cdc_pub default tablespace MDW_CDC;
(2)授予相应权限
SYS->SQL:
grant execute_catalog_role to cdc_pub;
grant select_catalog_role to cdc_pub;
grant create table to cdc_pub;
grant create session to cdc_pub;
grant execute on dbms_cdc_publish to cdc_pub;
grant unlimited tablespace to cdc_pub;

(2)创建变更集
SYS-->SQL:
begin
dbms_cdc_publish.create_change_set(
change_set_name =>'CDC_SET', /*变化集名称*/
description =>'change set for qgh.person ',
change_source_name =>'SYNC_SOURCE');
end;
/*注:同步CDC的chang source必须是SYNC_SOURCE。*/

(3)创建变化表(有多少源表创建多少变化表)
SYS-->SQL:
begin
dbms_cdc_publish.create_change_table(
owner =>'cdc_pub',
change_table_name=>'CHANGE_TABLE_PERSON', /*变化表名*/
change_set_name=>'CDC_SET', /*变化表存在的变化集名*/
source_schema=>'qgh', /*源表所在的用户名*/
source_table=>' person', /*源表名*/
column_type_list=>'ID number,NAME VARCHAR2(10),sex varchar2(2)', /*捕获的列*/
capture_values=>'BOTH', /*更新操作的捕获值,取值为OLD、NEW、BOTH*/
rs_id=>'y', /* rsid$控制列,取值为Y,N */
row_id=>'y', /* row_id$控制列,取值为Y,N */
user_id=>'n', /* USERNAME$控制列,取值为Y,N*/
timestamp=>'n', /* USERNAME$控制列,取值为Y,N */
object_id=>'n', /* SYS_NC_OID$控制列,取值为Y,N */
source_colmap=>'n', /* SOURCE_COLMAP$控制列,取值为Y,N */
target_colmap=>'n', /* TARGET_COLMAP$控制列,取值为Y,N*/
options_string=>'tablespace MDW_CDC '); /*所在表空间*/
end;

结果 只要表person 数据变化 变化表里就有一条对应记录。
我现在想 只有 person的 Name 字段变化 才在变化表里生成记录,其他字段变化 不在变化表里有记录 该怎么配置?
...全文
247 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
q03043123 2014-06-05
  • 打赏
  • 举报
回复
引用 1 楼 wqkjj 的回复:
(1)建一个DML handler,判断只有name发生变化时,才执行应用改变 (2) 为表指定该处理器 begin dbms_apply_adm.set_dml_handler ( object_name => 'qgh.person', object_type => 'TABLE ', operation_name => 'UPDATE', error_handler => false, user_procedure => '你建的DML Handler存储过程' ); end; / (3)对于insert和delete操作,直接牵涉到name的变化,因此是需要插入记录的。
怎样建一个DML handler?
wqkjj 2014-05-16
  • 打赏
  • 举报
回复
(1)建一个DML handler,判断只有name发生变化时,才执行应用改变 (2) 为表指定该处理器 begin dbms_apply_adm.set_dml_handler ( object_name => 'qgh.person', object_type => 'TABLE ', operation_name => 'UPDATE', error_handler => false, user_procedure => '你建的DML Handler存储过程' ); end; / (3)对于insert和delete操作,直接牵涉到name的变化,因此是需要插入记录的。

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧