Oracle 物化視圖

以下內容只作個人筆記 ! 

 物化視圖(定時刷新)

1:在源庫上創建物化視圖日誌 

     create materialized view log on 源庫表 with primary key(注意:源庫表一定要有主鍵) 

2:在中間庫上創建物化視圖 

    CREATE MATERIALIZED VIEW MV_WHST_SJ

    REFRESH FAST ON DEMAND   

    AS

    SELECT * FROM 源庫表@DBLK_CZRK

3:在中間庫上創建日誌表

   create table RZ_WUST

    (

       PK_NAME      NUMBER(22),   --主鍵字段

       REFRESH_DATE DATE,

       REFRESH_TYPE NUMBER

    ); 

4:給中間庫上日誌導入數據

    insert into RZ_WHST(pk_name, refresh_date, refresh_type)

(select pk_name, sysdate, 0 from MV_WHST_SJ); 

5:給中間庫上的日誌表創建索引

--日誌表加索引

create index IDX_RZ_WHST_PK on RZ_WHST(PK_NAME);

-- PK_NAME在日誌表中不是主鍵,是一個外鍵,可能會重複,因此只要創建索引

create index IDX_RZ_WHST_DATE on RZ_WHST(REFRESH_DATE); 

6:給物化視圖創建觸發器

create or replace trigger trigger_MV_WHST_SJ

after insert or update or delete on MV_WHST_SJ

for each row

declare 

begin

    if inserting then

            insert into RZ_WHST

            (pk_name, refresh_date, refresh_type)

        values

            (:new.編號, sysdate, 0);

        elsif updating then

            update RZ_WHST

             set refresh_date = sysdate,

                     refresh_type = 1

         where pk_name = :new.編號;

        elsif deleting then

            update RZ_WHST

             set refresh_date = sysdate,

                     refresh_type = 2

         where pk_name = :new.編號;

        end if;

end trigger_MV_WHST_SJ; 

7:創建刷新物化視圖的存儲過程

create or replace procedure P_HZ_SJ_CZRK_REFRESH as

begin

     dbms_mview.refresh('MV_WHST_SJ');   --物化視圖名字

end; 

8: 創建JOB定時刷新物化視圖(同步數據)

variable job number;

  begin

     sys.dbms_job.submit(job => :job,
                      what => 'P_HZ_SJ_CZRK_REFRESH;',
                      next_date => to_date('24-12-2009 10:12:00', 'dd-mm-yyyy hh24:mi:ss'),
                      interval => 'trunc(sysdate+1/24/6/10,''mi'')');

--刷新頻率1分鐘太頻繁,建議改爲每天或每隔數小時。
      commit;
end

9: 創建外部接口視圖

      create view V_HZ_SJ_CZRK as

      select a.*, b.refresh_date, b.refresh_type

           from MV_WHST_SJ a, RZ_WHST b

                where a.編號 = b.pk_name;

發佈了19 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章