hogehoge foobar Blog Style Beta

Web,Mac,Linux,JavaScript,Perl,PHP,RegExp,Git,Vim,Redmineなど技術的なことのメモや、ちょっと便利そうなものの紹介をしています。

Oracleのマテリアライズド・ビューのリフレッシュ(手動での完全リフレッシュ)

前回のエントリ(d:id:mrgoofy33:20100608)でマテリアライズド・ビューを作りましたが、リフレッシュ方法などが良くわかっていなかったので、調べてみました。
今回は、自動でのリフレッシュは必要なかったので、手動での完全リフレッシュを試してみました。

リフレッシュの方法

refresh complete 完全リフレッシュ
refresh fast 高速リフレッシュ
refresh force 高速リフレッシュ or 完全リフレッシュ(デフォルト)
never refresh リフレッシュをしない

リフレッシュのタイミング

on commit コミットされたときにリフレッシュ
start with・next 指定時刻でリフレッシュ
on demand 手動でのリフレッシュ

記述例

手動での完全リフレッシュを行う場合
create materialized view TEST_VIEW refresh complete on demand ・・・

※今回はこれを使用しました。

手動での完全リフレッシュor高速リフレッシュを行う場合

リフレッシュの方法、リフレッシュのタイミングを指定しないときはコレと同じになる。

create materialized view TEST_VIEW refresh force on demand ・・・

高速リフレッシュを行うには色々と条件があるので、条件が合致すれば高速リフレッシュ。
条件が合わずに高速リフレッシュが出来ない場合は、完全リフレッシュになる。

コミットしたときに高速リフレッシュを行う場合
create materialized view TEST_VIEW refresh fast on commit ・・・

実際に高速リフレッシュを指定する場合には、「マテリアライズド・ビュー・ログ」を作ったり、色々な制限があるようです。
今回は高速リフレッシュを使わなかったので、詳しいことは書けません。
詳しい情報は以下のページがとても参考になると思います。
http://www.ne.jp/asahi/hishidama/home/tech/oracle/mview.html#refresh_fast

手動でのリフレッシュ方法

マテビューで指定された方法(完全 or 高速)でリフレッシュ
SQL> exec dbms_mview.refresh('TEST_VIEW');
PL/SQL procedure successfully completed.
明示的に完全リフレッシュ

マテビューで高速リフレッシュを指定している場合でも、'c'を指定することで完全リフレッシュが出来る。

SQL> exec dbms_mview.refresh('TEST_VIEW','c');
PL/SQL procedure successfully completed.
明示的に高速リフレッシュ

マテビューで高速リフレッシュを指定している場合でも、'c'を指定することで完全リフレッシュが出来る。

マテビューで高速リフレッシュを指定している場合(成功する)

SQL> exec dbms_mview.refresh('TEST_VIEW','f');
PL/SQL procedure successfully completed.

マテビューで高速リフレッシュを指定出来ていない場合(失敗する)

SQL> exec dbms_mview.refresh('TEST_VIEW','f');
BEGIN dbms_mview.refresh('TEST_VIEW','f'); END;
*
ERROR at line 1:
ORA-23413: table "SYSTEM"."TEST_TABLE" does not have a
materialized view log
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 1883
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2089
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2058
ORA-06512: at line 1

参考にしたページ

マテリアライズド・ビュー(マテリアライズド・ビューの詳しい説明)
http://www.ne.jp/asahi/hishidama/home/tech/oracle/mview.html

@IT - Oracleの機能を使って表の結合を高速化する
http://www.atmarkit.co.jp/fdb/rensai/orasql11/orasql11_1.html