高级复制实施手记(6)

6. 双向复制中的冲突处理


本文可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明.

http://husthxd.itpub.net/post/11/113452


以update冲突处理方法为例说明。
1) 连接主体复制定义站点的复制管理员用户
CONNECT repadmin/repadmin@simis
2) 挂起复制操作
BEGIN
DBMS_REPCAT.SUSPEND_MASTER_ACTIVITY (
gname => 'web_repg');
END;
/
3) 加入用于解决冲突的时间列(如果已定义列的话,这步可以省略)
下面的脚本在web用户的表employees下加入CHANGEDATE列。
BEGIN
DBMS_REPCAT.ALTER_MASTER_REPOBJECT (
sname => 'web',
oname => 'employees',
type => 'TABLE',
ddl_text => 'ALTER TABLE hr.employees ADD (CHANGEDATE DATE)');
END;
/
加入列后需要重新生成复制支持。
BEGIN
DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT (
sname => 'web',
oname => 'employees',
type => 'TABLE',
min_communication => TRUE);
END;
/
4) 生成触发器复制主体对象
以用户web的表EMPLOYEES为例:
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPOBJECT (
gname => 'web_repg',
type => 'TRIGGER',
oname => 'TR_AM_CHANGE_INSERT_TIME',
sname => 'web',
ddl_text => 'CREATE TRIGGER web.TR_EMPLOYEES_INSERT_TIME
BEFORE
INSERT OR UPDATE ON web. EMPLOYEES FOR EACH ROW
BEGIN
IF DBMS_REPUTIL.FROM_REMOTE = FALSE THEN
:NEW.CHANGEDATE := SYSDATE;
END IF;
END;');
END;
/
5) 生成列组
通过数据字典自动生成脚本
connect web/web@simis
set heading off
set pagesize 0
set linesize 800
spool create_web_columngroup.sql

select 'exec DBMS_REPCAT.MAKE_COLUMN_GROUP (sname => ''web'',oname => '||''''||table_name||''''||',column_group =>'||''''||table_name|| '_timestamp_cg'||''''||',list_of_column_names => 'status,changedate'');'
from user_tables
/

spool off
connect repadmin/repadmin@simis
spool create_web_columngroup.txt
@create_web_columngroup.sql
spool off

host del create_web_columngroup.sql
host rm create_web_columngroup.sql

6) 加入冲突解决方案
connect web/web@simis
spool create_conflict_solution.sql

select 'exec DBMS_REPCAT.ADD_UPDATE_RESOLUTION (sname => ''web'',oname => '||''''||table_name||''''||',column_group =>'||''''||table_name|| '_timestamp_cg'||''''||',sequence_no => 1,method => ''LATEST TIMESTAMP'',parameter_column_name => ''changedate'');'
from user_tables
/

spool off

connect repadmin/repadmin@simis
spool create_conflict_solution.txt
@create_conflict_solution.sql
spool off
host del create_conflict_solution.sql
host rm create_conflict_solution.sql

7) 重新生成复制支持
connect web/web@simis
spool add_web_rep_support.sql

select 'exec DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT (sname => ''siportal'',oname => '||''''||table_name||''''||',type => ''TABLE'',min_communication => TRUE);'
from user_tables
/

spool off
connect repadmin/repadmin@simis
@add_web_rep_support.sql
host del add_web_rep_support.sql
host rm add_web_rep_support.sql

8) 重起复制活动
BEGIN
DBMS_REPCAT.RESUME_MASTER_ACTIVITY (
gname => 'web_repg');
END;
/

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/6906/viewspace-22054/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/6906/viewspace-22054/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值