摘要:《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 資料庫內部運作的外掛吧!