ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 高级复制实施手记(6)

高级复制实施手记(6)

原创 Linux操作系统 作者:husthxd 时间:2006-06-12 00:00:00 0 删除 编辑

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/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 3:1
请登录后发表评论 登录
全部评论
ITPUB数据库版块资深版主,对Oracle、PostgreSQL有深入研究。现就职于广州云图数据技术有限公司,系统架构师。

注册时间:2007-12-28

  • 博文量
    1394
  • 访问量
    3841056