マテリアライズドビューを複数箇所から更新するときの懸念

スポンサーリンク
データベース
スポンサーリンク

Photo credit: Håkan Dahlström via Visual hunt / CC BY

 

Oracleにおいて、あるテーブルからスナップショット(マテリアライズドビュー)を取得しようとした際、2箇所から高速リフレッシュ(差分リフレッシュ)を実行することができるかということを疑問に思った。

高速リフレッシュは、マテビュー取得元テーブルの脇にログテーブルを用意しておき、元テーブルに更新がかかればログテーブルに発行されたSQLを蓄積、高速リフレッシュ時にそのSQLをマテビュー側に流し込んで更新・レプリケーションするというもの。

スポンサーリンク

スナップショット(マテビュー)の実験

同一テーブルに対して複数のマテビューが存在する場合、それぞれのマテビューは正しく更新できるのか?ログテーブルは一つと思われるのに、リフレッシュタイミングが違うそれぞれのマテビューが正常に機能するのか?

色々調べてみると、マテビュー単位にログテーブルが存在し、それぞれのマテビューが自身専用のログテーブルを見に行くようになっている。

実際、ログテーブルは複数存在しているように見えた(Osqleditで見た場合)。

但し、ObjectBrowserではログテーブルは1つしか見えない。アプリケーションの仕様の問題だろうか。ということで、複数のマテリアライズドビューから同一テーブルに対し、違うタイミングで高速リフレッシュしても問題なくレプリケーションができるということがわかった。

ただ、あまりにマテリアライズドビューを増やすと、取得先のマテビューがどこまで更新しているのかを計算しながらそれぞれのログテーブルを更新しなければならないようになると思われるし、管理がややこしくなるため、あまり数を増やさない方が良いと思われる。

 

コメント