不重建快照的情况下可以修改主表(如添加字段)
2024-07-21 02:34:14
供稿:网友
通常假如需要对主表进行修改的话,如增加字段,修改字段数据类型;这要求我们将快照/复制停掉,甚至删除快照。这样给数据同步带来麻烦。非凡是主表数据很多的话,通常采用的方法是将数据导出,再建立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 也有例子。