(轉)oracle資料庫之間 表複製方法二(物化檢視 方法)

mahanso發表於2011-05-27
物化檢視是包括一個查詢結果的資料庫對像,它是遠端資料的的本地副本,或者用來生成基於資料表求和的彙總表。物化檢視儲存基於遠端表的資料,也可以稱為快照。
       物化檢視可以查詢表,檢視和其它的物化檢視。

       通常情況下,物化檢視被稱為主表(在複製期間)或明細表(在資料倉儲中)。

       對於複製,物化檢視允許你在本地維護遠端資料的副本,這些副本是隻讀的。如果你想修改本地副本,必須用高階複製的功能。當你想從一個表或檢視中抽取資料時,你可以用從物化檢視中抽取。

       對於資料倉儲,建立的物化檢視通常情況下是聚合檢視,單一表聚合檢視和連線檢視。

本篇我們將會看到怎樣建立物化檢視並且討論它的重新整理選項。

       在複製環境下,建立的物化檢視通常情況下主鍵,rowid,和子查詢檢視。

1.主鍵物化檢視:

              下面的語法在遠端資料庫表emp上建立主鍵物化檢視

          SQL> CREATE MATERIALIZED VIEW mv_emp_pk
                 REFRESH FAST START WITH SYSDATE 
              NEXT  SYSDATE + 1/48
              WITH PRIMARY KEY 
              AS SELECT * FROM emp@remote_db;
              Materialized view created.
              注意:當用FAST選項建立物化檢視,必須建立基於主表的檢視日誌,如下:

              SQL> CREATE MATERIALIZED VIEW LOG ON emp;
              Materialized view log created.
2.Rowid物化檢視

              下面的語法在遠端資料庫表emp上建立Rowid物化檢視

        SQL> CREATE MATERIALIZED VIEW mv_emp_rowid 
              REFRESH WITH ROWID 
               AS SELECT * FROM emp@remote_db; 
              Materialized view log created.
3.子查詢物化檢視

              下面的語法在遠端資料庫表emp上建立基於emp和dept表的子查詢物化檢視

              SQL> CREATE MATERIALIZED VIEW  mv_empdept
              AS SELECT * FROM emp@remote_db e
              WHERE EXISTS
                 (SELECT * FROM dept@remote_db d
               WHERE e.dept_no = d.dept_no)
        Materialized view log created.
       REFRESH 子句

                      [refresh [fast|complete|force]
              [on demand | commit]
              [start with date] [next date]
              [with {primary key|rowid}]]
 
       Refresh選項說明:

a.      oracle用重新整理方法在物化檢視中重新整理資料.

b.      是基於主鍵還是基於rowid的物化檢視

c.       物化檢視的重新整理時間和間隔重新整理時間

Refresh方法-FAST子句

       增量重新整理用物化檢視日誌(參照上面所述)來傳送主表已經修改的資料行到物化檢視中.如果指定REFRESH FAST子句,那麼應該對主表建立物化檢視日誌

                      SQL> CREATE MATERIALIZED VIEW LOG ON emp;
Materialized view log created.

       對於增量重新整理選項,如果在子查詢中存在分析函式,則物化檢視不起作用。

Refresh方法- COMPLETE子句

       完全重新整理重新生成整個檢視,如果請求完全重新整理,oracle會完成       完全重新整理即使增量重新整理可用。

Refresh Method – FORCE 子句

       當指定FORCE子句,如果增量重新整理可用Oracle將完成增量重新整理,否則將完成完全重新整理,如果不指定重新整理方法(FAST, COMPLETE, or FORCE),Force選項是預設選項

主鍵和ROWD子句

       WITH PRIMARY KEY選項生成主鍵物化檢視,也就是說物化檢視是基於主表的主鍵,而不是ROWID(對應於ROWID子句). PRIMARY KEY是預設選項,為了生成PRIMARY KEY子句,應該在主表上定義主鍵,否則應該用基於ROWID的物化檢視.

       主鍵物化檢視允許識別物化檢視主表而不影響物化檢視增量重新整理的可用性。

       Rowid物化檢視只有一個單一的主表,不能包括下面任何一項:

n         Distinct 或者聚合函式.

n         Group by,子查詢,連線和SET操作

重新整理時間      

       START WITH子句通知資料庫完成從主表到本地表第一次複製的時間,應該及時估計下一次執行的時間點, NEXT 子句說明了重新整理的間隔時間.

              SQL> CREATE MATERIALIZED VIEW mv_emp_pk
                         REFRESH FAST 
                    START WITH SYSDATE 
                    NEXT  SYSDATE + 2
                    WITH PRIMARY KEY 
                    AS SELECT * FROM emp@remote_db;
                    Materialized view created.
在上面的例子中,物化檢視資料的第一個副本在建立時生成,以後每兩天重新整理一次.

總結

物化檢視提供了可伸縮的基於主鍵或ROWID的檢視,指定了重新整理方法和自動重新整理的時間。


補充內容:

物化檢視的重新整理有二類,分別是:on commit on demand。重新整理方法有三種分別是:快速(FAST),完全(COMPLETE),強制(FORCE);

ON COMMIT DEMAND 在應用中的問題

ON COMMIT

如果選擇on commit ,則在對主表應用上會造成速度,這是因為ORACLE在對主表操作提交後馬上會進行重新整理物化檢視操作,這部分時間是也包括在提交時間中。

a) refresh force on commit:中對刪,新增記錄,物理檢視都能真實反映主表的變化。同時這種情況下不用建物化檢視日誌表。缺點是提交時間長。

b) refresh fast on commit:中對新增或修改能真實反映主表的變化,但對刪除則不能反映,必須進行一次完全重新整理。

 

ON DEMAND

DEMAND必須用DBMS_MVIEW.REFRESH儲存過程建立的JOB去定時重新整理物化檢視。

a) refresh fast on DEMAND:必須透過呼叫DBMS_MVIEW.REFRESH儲存過程來進行快速重新整理反映主表新增情況;但當對主表中的資料刪除或修改時,快速重新整理則會報錯,因此必須調DBMS_MVIEW.REFRESH的完全重新整理才能反映。可以透過建JOB解決。

表1:快速重新整理

declare
v_mvname varchar2(50);
begin
v_mvname:='MOCHA_FE_DOC_CONTENT_MV';
dbms_mview.refresh(v_mvname,'f');
end;
/

 
 
 
 
 
 
 
 

表2:完全重新整理

declare
v_mvname varchar2(50);
begin
v_mvname:='MOCHA_FE_DOC_CONTENT_MV';
dbms_mview.refresh(v_mvname,'C');
end;
/

 
 
 
 
 
 
 
 

 

注意:用FAST 重新整理物化檢視,前提要新建物化檢視日誌表。

          b) refresh force/complate on DEMAND:

在這種方式下物化檢視也是無法自動重新整理,必須透過JOB或手工。

FASTFORCECOMPLETE區別

FAST:增量式重新整理,使用此方法必須有前提,就是建立物化檢視日誌表。

FORCE::如果可以以fast 方式重新整理則用,否則完全重新整理。

COMPLETE:先將物化檢視表內容刪除,然後再重新整理。此方式缺少就是在重新整理時間內用法在頁面無法查到的所需要內容。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12272958/viewspace-696399/,如需轉載,請註明出處,否則將追究法律責任。

相關文章