天天看點

初試物化視圖

     通常我們使用EXP/IMP,EXPDP/IMPDP 進行資料庫的遷移,但是若對資料的一緻性要求比較嚴格,要求生産庫的停機時間最短,盡量的減少對應用業務的影響,因為使用邏輯遷移過程中應用會對資料庫持續寫入,在導出,再導入過程中源資料庫和目标資料庫會出現資料不一緻的現象,可以通過物化視圖也可以實作這一功能。

環境:windows 11g + linux 5  11g

oracl 為windows 環境的執行個體,rac1 為linux 的執行個體!

建立測試表。

yang@oracl>create table yangtab (id  number primary key ,name varchar2(15));

在測試表上建立物化日志。

yang@oracl>create materialized view log on yangtab;

實體化視圖日志已建立。

yang@oracl>insert into yangtab

  2  select rownum id,

  3         dbms_random.string('l',15) name

  4         from dual

  5         connect by level <= 1e6;

已建立1000000行。

yang@oracl>commit;

送出完成。

yang@oracl>host date

目前日期: 2011/03/19 周六

輸入新日期: (年月日)

yang@rac1>host time

目前時間: 12:49:45.67

輸入新時間:

yang@oracl>select count(1) from yangtab;

  COUNT(1)

----------

   1000000

在目标庫上建立基于源庫yangtab 的物化視圖,并設定每隔1分鐘進行重新整理一次。

yang@rac1>create materialized view yangtab_mv

  2  refresh fast start for update with sysdate next sysdate +1/1440

  3  with primary key as select * from yangtab@linkyang;

Materialized view created.

yang@rac1>select job,log_user,last_date,last_sec,next_date,next_sec,interval,what from user_jobs;

JOB  LOG_USER LAST_DATE              LAST_SEC   NEXT_DATE           NEXT_SEC INTERVAL         WHAT

---- -------- --------------------- ---------- ------------------------- ----------------    -------------

146 YANG      Mar 19 2011 11:27:01  11:27:01   Mar 19 2011 11:28:01 11:28:01 sysdate +1/1440 dbms_refresh.refresh('"YANG"."YANGTAB_MV"');

yang@rac1>select * from tab;

TNAME                  TABTYPE  CLUSTERID

---------------------- ------- ----------

V                            TABLE

YANGALL                 TABLE

YANGTAB_MV          TABLE

在源庫插入資料後,從目标庫上查詢基表的資料

yang@rac1>select count(1) from yangtab@linkyang;

此時查詢物化視圖還沒資料,重新整理物化視圖需要時間。

yang@rac1>select count(1) from yangtab_mv;

等待一段時間後,可以查詢到物化視圖中有資料了。

在生産環境中可能還有應用對yangtab 進行操作,在對基表進行最後一次重新整理前,将應用遷移到目标庫上對 建立的物化視圖進行通路(物化視圖必須是可更新的,否則在目标庫不可對mv 進行dml操作)。

在目标庫中手工執行重新整理物化視圖。

yang@rac1>EXEC DBMS_MVIEW.REFRESH('MV_YANGTAB');

PL/SQL 過程已成功完成。

此操作保證目标和源資料庫中的資料一緻。至此 從windows 環境下将資料遷移到linux環境的操作完成。