物化視圖的快速刷新需要先構造物化視圖日誌,而物化視圖日誌中會記錄表的dml操作,因此可以通過物化視圖日誌訂閱Oracle增量。
1.物化視圖日誌名
物化視圖日誌名爲MLOG$_表名。當表名長度超過20時,只取前20位;當出現截短後名稱重複時,會自動在物化視圖日誌名後面添加數字。
2.物化視圖日誌結構
基本字段:
SNAPTIME$$:數據刷新的時間;當該物化視圖日誌僅供一張物化視圖使用時,爲4000-01-01 00:00:00;當其供多張物化視圖使用時,該字段會記錄dml操作的時間。
DMLTYPE$$: 表示DML操作類型,I表示INSERT,D表示DELETE,U表示UPDATE。
OLD_NEW$$:表示這個值是新值還是舊值。N表示新值,O表示舊值,U表示UPDATE操作。
CHANGE_VECTOR$$:表示修改矢量,用來表示被修改的是哪個或哪幾個字段。
特殊字段:
(1)構建物化視圖日誌時添加了rowid,因此物化視圖日誌中會包含字段:M_ROW$$:存儲增量記錄的ROWID。
create materialized view log on student with rowid including new values;
(2)構建物化視圖日誌時添加了primary key,因此物化視圖日誌中會包含主鍵字段
create materialized view log on student with primary key including new values;
(3)構建物化視圖日誌時添加了SEQUENCE,因此物化視圖日誌中會包含字段:SEQUENCE$$:每個操作的SEQUENCE號,從而保證刷新時按照順序進行刷新。
CREATE MATERIALIZED VIEW LOG ON STUDENT WITH
sequence ( C_ID, C_NAME ) including new VALUES;
(4)構建物化視圖日誌時添加了表的字段名,因此物化視圖日誌中會包含這些字段
CREATE MATERIALIZED VIEW LOG ON STUDENT WITH
C_ID, C_NAME including new VALUES;
3.注意點
(1)基於主鍵的物化視圖日誌,如果更新主鍵時,DML操作會轉爲一條DELETE記錄和一條INSERT記錄。即更新主鍵操作被轉換爲先插入新記錄,然後刪除舊記錄;
(2)當創建物化視圖日誌時包含INCLUDING NEW VALUES語句時,每條UPDATE操作會在物化視圖日誌中生成兩條記錄。一條對應UPDATE操作的原記錄DMLTYPE$$和OLD_NEW$$都爲U;一條對應UPDATE操作後的新記錄,DMLTYPE$$爲U,OLD_NEW$$爲N;
4.通過Oracle物化視圖日誌實現Oracle增量抽取。
目標表結構: