《Materialized Views & 程式、trigger 同步差異》

摘要:《Materialized Views & 程式、trigger 同步差異》

 

筆者在接觸 materialized view 時,問了 oracle 講師 mview 跟用程式每天定時同步或是透過trigger同步有什麼不同,

講師回答是一樣的,但是在研究一陣子之後,還是有些顯著的差異。

其實在上一個專案中嘗試使用 mview 之前,有另一個專案是需要從遠端資料庫同步資料的作業,當時尚未接觸到 mview,

所以在遠端資料庫寫了一個trigger,透過 database link 更新本機資料庫的資料表;在上線的過程中,遇到二個問題,

雖然都一一解決,但是總覺得不是那麼踏實。第一個是 trigger 邏輯部份需要仔細端詳,否則容易影響到線上的作業,

可能會造成同步的資料不正確或是前端程式的異常回報。第二個是目標資料表的欄位屬性與來源資料表不一致的情形。

這專案也花了一兩天的時間才上線,後續問題的處理也花費不少人力、時間成本。

如果用的是 mview,那上述兩種情形都不會發生,而且不到半天就可以搞定了。

以下簡述 mview 跟程式、trigger同步的差異:

 

項目

比較

mview

程式、trigger

建置成本

勝 (成本低)

 

異常發生率

勝 (發生率低)

 

靈活度

 

勝 (隨心所欲)

同步成本

勝 (oracle 內部作業)

 

加分功能

Query rewrite

 

 

mview refresh mode 如果是 DEMAND,oracle 連排程都幫你設定好了;程式run還要手動設定排程。

如果是COMMIT,oracle 連即時同步的作業都幫你搞定;用trigger寫還要擔心寫錯。

講來講去就是推薦 mview 的好處遠大於用程式coding;

筆者寫這篇的原因,其實是想介紹 Query rewrite 的功能,筆者覺得這是 mview 與程式同步最大的差異,

而且也是程式絕對無法作到的功能,這應該算是 oracle 資料庫內部運作的外掛吧!