ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 高级复制主站点主表添加字段操作

高级复制主站点主表添加字段操作

原创 Linux操作系统 作者:wenhual43 时间:2012-12-30 20:54:41 0 删除 编辑
我测试的环境:一个主站点,一个物化视图站点,需要在复制组的一个表添加字段,对应物化视图的基表也需要添加。
心得主要有2点:一个是必须执行DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT包,新加的字段不会自动添加到复制支持的列表里去(查询select * from dba_repcolumn;可以观察到)
第二点是在物化视图站点,之前的物化视图需要删掉重建,重建的时候主表新加的字段物化视图识别不了,需要重启物化视图的数据库实例,这点不知道我操作有问题还是oracle的bug。我试了2次都需要重启数据库。
操作过程主要分三块,首先是主站点,然后是物化视图站点,最后回到主站点。
下面是具体的操作过程:
对于主站点,须执行下面步骤
--暂停复制
BEGIN 
    DBMS_REPCAT.suspend_master_activity ( gname => 'rep_group'); 
END; 
--删除更新策略
begin
dbms_repcat.drop_update_resolution(sname => 'js',
oname => 'JS_CHANGE_CODE',
column_group => 'JS_CHANGE_CODE_cg',
sequence_no => 1) ;
end;
/
--删除列组
BEGIN
DBMS_REPCAT.drop_column_group (
sname => 'js',
oname => 'JS_CHANGE_CODE',
column_group => 'JS_CHANGE_CODE_cg'
);
END;
/
--添加字段
BEGIN
 DBMS_REPCAT.ALTER_MASTER_REPOBJECT (
 sname => 'js',
 oname => 'JS_CHANGE_CODE',
 type => 'TABLE',
 ddl_text => 'alter table js.JS_CHANGE_CODE add ftest VARCHAR2(8)');
 END;
 /
 --创建列组
 BEGIN
DBMS_REPCAT.MAKE_COLUMN_GROUP (
sname => 'js',
oname => 'JS_CHANGE_CODE',
column_group => 'JS_CHANGE_CODE_cg',
list_of_column_names => '*');
END;
--添加更新策略
BEGIN
DBMS_REPCAT.ADD_UPDATE_RESOLUTION (
sname => 'js',
oname => 'JS_CHANGE_CODE',
column_group => 'JS_CHANGE_CODE_cg',
sequence_no => 1,
method => 'overwrite',
parameter_column_name => '*');
END;
/
--重新生成复制支持
begin
     DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT ( sname => 'js', 
                                              name => 'JS_CHANGE_CODE', 
                                              type => 'TABLE', 
                                              min_communication => TRUE); 
END; 
/ 

物化视图站点操作步骤
--从刷新组移除物化视图刷新
BEGIN 
     DBMS_REFRESH.subtract ( name => 'mvadmin.CDCTEST_REFRESH', 
     list => 'js.JS_CHANGE_CODE_bs', lax => TRUE); 
END; 
/ 
commit;
--从复制组移除复制对象
BEGIN 
       DBMS_REPCAT.drop_MVIEW_REPOBJECT ( 
                                          sname => 'js', 
                                          name => 'JS_CHANGE_CODE_BS', 
                                          type => 'SNAPSHOT'
                                           ); 

END; 
/
--删除物化视图
drop materialized view JS_CHANGE_CODE_BS;
--添加字段
alter table js.JS_CHANGE_CODE_bs add ftest VARCHAR2(8)
--重启了物化视图站点实例,重建物化视图,
--这一步有点奇怪,主站点新增加的字段死活没有添加到物化视图定义里,如果在select里指定那个字段,会说字段不能识别
--这一步我重启了物化视图站点实例,新建的物化视图才能有新加的字段
CREATE  MATERIALIZED VIEW JS_CHANGE_CODE_BS
ON PREBUILT TABLE
REFRESH FAST ON DEMAND
FOR UPDATE
AS
SELECT * FROM JS.JS_CHANGE_CODE@CDCTEST ;
--添加到刷新组
BEGIN 
     DBMS_REFRESH.ADD ( name => 'mvadmin.cdctest_refresh', 
     list => 'js.JS_CHANGE_CODE_BS', lax => TRUE); 
END; 
/  
commit;
--添加到复制组
BEGIN 
       DBMS_REPCAT.CREATE_MVIEW_REPOBJECT ( gname => 'rep_group', 
                                          sname => 'JS', 
                                          name => 'JS_CHANGE_CODE_BS', 
                                          type => 'SNAPSHOT',
                                           min_communication => TRUE); 

END; 

回到主站点,恢复复制支持
BEGIN 
    DBMS_REPCAT.resume_master_activity ( gname => 'rep_group'); 
END; 

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

请登录后发表评论 登录
全部评论

注册时间:2011-08-03

  • 博文量
    32
  • 访问量
    130411