不重建快照的情况下可以修改主表(如添加字段)

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

通常如果需要对主表进行修改的话,如增加字段,修改字段数据类型;这要求我们将快照/复制停掉,甚至删除快照。这样给数据同步带来麻烦。特别是主表数据很多的话,通常采用的方法是将数据导出,再建立on prebuilt table,再导入数据,建立刷新环境。这需要很多时间和回滚段等资源,还容易出错。

我们采用prebuilt table创建的快照和物化视图可以避免这样的情况。

master table 是scott.trade 已经建立了mlog

snapshot on prebuit table是zhangbin.trade;快照建立在prebuilt table是本方法的前提。

SQL>show user

SYS

在主表上添加字段,且之前作了刷新――保证主表和快照数据一致

SQL> alter table scott.trade add zb varchar2(20) default 'ab';

Table altered.

删除快照,但on prebult table还在

SQL> drop snapshot zhangbin.trade;

Materialized view dropped.

SQL> select count(*) from slog$;

COUNT(*)

----------

0

在prebult table上添加字段,执行同样的ddl

SQL> alter table zhangbin.trade add zb varchar2(20) default 'ab';

Table altered.

SQL> connect zhangbin/zhangbin

Connected.

重新创建快照

SQL> create snapshot trade on prebuilt table as select * from scott.trade;

Materialized view created.

快速刷新成功。

SQL> execute dbms_snapshot.refresh('trade','fast');

PL/SQL procedure successfully completed.

SQL> show user

USER is "ZHANGBIN"

SQL> update scott.trade set zb='ddd';

13 rows updated.

SQL> commit;

Commit complete.

SQL> execute dbms_snapshot.refresh('trade','fast');

PL/SQL procedure successfully completed.

可以参考itpub讨论 http://www.itpub.net/showthread.php?s=&threadid=330470

http://www.dbazine.com/nanda2.html 也有例子。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航