在高级复制环境中的对于需要复制的对象作任何DDL操作,都应该使用高级复制程序包来实现,下面是在一个复制表上添加两个列的DDL操作的处理流程。
[@more@]首先说明一下测试环境:oracle9204,单主体站点,只读物化视图
在非复制环境中简单的添加列的语句:
ALTER TABLE DEMO ADD (D2 NUMBER,D3 NUMBER);
一、在主体站点上执行的步骤
1、挂起复制组
DBMS_REPCAT.SUSPEND_MASTER_ACTIVITY(GNAME =>'REP_GROUP');
2、通过高级复制包中的过程来执行DDL
DBMS_REPCAT.ALTER_MASTER_REPOBJECT (SNAME =>'SCOTT',ONAME =>'DEMO',TYPE =>'TABLE',DDL_TEXT => 'ALTER TABLE SCOTT.DEMO ADD (D2 NUMBER,D3 NUMBER)');
3、生成复制支持
DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT(SNAME => 'SCOTT',ONAME => 'DEMO',TYPE => 'TABLE',MIN_COMMUNICATION => TRUE);
4、恢复复制组
DBMS_REPCAT.RESUME_MASTER_ACTIVITY(GNAME => 'REP_GROUP');
COMMIT;
二、在物化视图站点上执行的步骤
1、将物化视图从物化视图组中删除
DBMS_REPCAT.DROP_MVIEW_REPOBJECT(SNAME => 'SCOTT',ONAME => 'DEMO', TYPE => 'SNAPSHOT', DROP_OBJECTS => TRUE);
2、删除物化视图
如果上一步中参数DROP_OBJECTS没有设置或者为FALSE,则要执行此步:
DROP MATERIALIZED VIEW DEMO;
3、重新建立物化视图
CREATE MATERIALIZED VIEW SCOTT.DEMO REFRESH FAST ON DEMAND
AS
SELECT D1,D2,D3 FROM DEMO@MASTER_SITE;
4、将物化视图和索引添加到物化视图组
DBMS_REPCAT.CREATE_MVIEW_REPOBJECT(GNAME=>'REP_GROUP',SNAME=>'SCOTT',ONAME=>'DEMO',TYPE=>'SNAPSHOT',MIN_COMMUNICATION=>TRUE);
5、将物化视图添加到刷新组
DBMS_REFRESH.ADD(NAME => 'SCOTT.REP_REFRESH', LIST => 'SCOTT.DEMO', LAX => TRUE);
6、其它工作:将删除前的物化视图的授权再重新授予其它用户
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/3898/viewspace-828557/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/3898/viewspace-828557/