不重建快照的情況下可以修改主表(如添加字段)
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 也有例子。