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/