1. 程式人生 > >物化檢視詳解--介紹、建立方法、例子

物化檢視詳解--介紹、建立方法、例子

物化檢視是包括一個查詢結果的資料庫物件,它是遠端資料的的本地副本,或者用來生成基於資料表求和的彙總表。物化檢視儲存基於遠端表的資料,也可以稱為快照。對於複製,物化檢視允許你在本地維護遠端資料的副本,這些副本是隻讀的。如果你想修改本地副本,必須用高階複製的功能。當你想從一個表或檢視中抽取資料時,你可以用從物化檢視中抽取。 對於資料倉庫,建立的物化檢視通常情況下是聚合檢視,單一表聚合檢視和連線檢視。物化檢視可以查詢表,檢視和其它的物化檢視。

一、 關於物化檢視日誌:

查詢物化檢視日誌檔案格式:desc mlog$_lzwmvtest;

建立物化檢視時預設指定物化檢視中存在主鍵,如果不指定,那麼建立的物化檢視日誌檔案的基表必須存在主鍵,否則會報錯

Demo:對一個表test

建立日誌:create materialized view log on test;

那麼會報:'LZWMVTEST'

不包含主鍵約束條件

這種情況下,就必須指定日誌檔案結構

比如:create materialized view log on test with rowid(具體的針對日誌內容方面的在另外一個專題裡說明,這裡就簡述到此)

二、 關於生成資料和重新整理:

1>生成資料

兩大選項:build immediate build deferred

Build immediate:在建立物化檢視的同時根據主表生成資料

Bulid deferred:在建立物化檢視的同時,在物化檢視內不生成資料,如果此時沒有生成資料,以後可以採取:EXEC DBMS_MVIEW.Refresh(‘MV_name’,’C’)

,注意必須使用全量重新整理,預設是增量重新整理,所以這裡引數必須是C,因為之前都沒有生成資料,所以必須全量。

2>關於重新整理

² 重新整理方式:complete fast force

Complete :完全重新整理整個物化檢視,相當於重新生成物化檢視,此時即時增量重新整理可用也全量重新整理

Ø Fast:當有資料更新時依照相應的規則對物化檢視進行更新(此時必須建立物化檢視日誌(物化檢視日誌記錄了資料更新的日誌),關於日誌的說明,參照“物化檢視日誌檔案介紹”)

Ø Force:當增量重新整理可用則增量重新整理,當增量重新整理不可用,則全量重新整理(此項為預設選項)

不過從實際情況出發,應該儘量不使用預設選項,可以考慮使用增量重新整理,對大表特別有效,大表全量更新速度是非常慢的,特別是在存在索引的情況下(在建立物化檢視語句中,可能某些限制查詢的條件,導致了增量重新整理無法使用,這個是需要注意的,具體是哪類語句導致fast

重新整理不可用,有待總結…..

² 重新整理時間:on demand on commit start with/ next

On demand:在需要重新整理時進行重新整理(人工判斷)

On commit:在基表上有提交操作時,進行更新

Start with:指定首次重新整理的時間(一般指定的是當前時間,不過也可以在建立物化檢視時不生成資料,則可以考慮在指定的時間重新整理,從而生成資料)

Next:重新整理的週期時間

三、 基於主鍵的物化檢視和ROWID的物化檢視的說明

建立物化檢視日誌時,指定了記錄更新的原則即with 後面的primary 或者rowid 或者object id等等,後面,預設是以primary key為記錄更新,在物化檢視內也是以此為更新的原則。

例如:1、如果日誌內使用的是primary key 則在建立物化檢視時指定rowid來更新,則會報ORA-12032: 不能使用 "TEST" 上實體化檢視日誌中的 rowid

2、如過日誌內使用的是rowid 則在建立物化檢視時指定primary或者預設指定,則會報ORA-23415: "GIS"."LZWMV" 的實體化檢視日誌不記錄主鍵

四、 關於物化檢視存放的的表空間

直接在建立物化檢視時指定日誌存放的表空間和物化檢視的表空間。

例子:create materialized view MV_TEST tablespace test ----表空間名稱

五、 關於查詢重寫和更新

在建立查詢重寫時,基表中必須有主鍵約束,視圖裡是無法建立主鍵的,不過其繼承了基表的主鍵約束。(關於檢視的建立的一些技巧有待總結……)下面給個例子

Create materialized view MV_TEST

Refresh fast ----前提是必須建立基表日誌,可以忽略該項

Enable query rewrite ----前提是基表上必須存在主鍵約束

As

Select * from TEST; ----物化檢視資料生成

六、 關於建立物化檢視的例子:

1、 使用增量重新整理的物化檢視的寫法

建立物化檢視日誌,必須建立日誌

Create materialized view log on TEST ----TEST為表名

----注:(TEST為表名或者檢視名,關於檢視上建立物化檢視,見基於檢視的物化檢視

----建立物化檢視語句:

Create materialized view MV_TEST

----MVTEST為物化檢視名

Build immediate

----建立時生成資料對應的是build deferred

Refresh fast

----增量重新整理

On commit

----在基表有更新時提交,這裡該句對檢視無效

With rowid

----這裡建立基於rowid的物化檢視,對應的是 primary key

As

Select * from TEST;

----生成物化檢視資料語句

七、 小的知識點

建立主鍵約束語句:alter table table_name add(constraint constraint_name primary key(columes));

建議使用job來定期重新整理物化檢視