当前位置导航:炫浪网>>网络学院>>编程开发>>Oracle教程

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

  通常如果需要对主表进行修改的话,如增加字段,修改字段数据类型;这要求我们将快照/复制停掉,甚至删除快照。这样给数据同步带来麻烦。特别是主表数据很多的话,通常采用的方法是将数据导出,再建立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   也有例子。

相关内容
赞助商链接