マテリアライズド・ビューとは、ひとつ以上の表(又はビュー、のマテリアライズド・ビュー)を問い合わせた結果を含むスキーマオブジェクトである。マテリアライズド・ビューの基となる表のことをマスター表と呼ぶ。参照を行なうたびに実表を問い合わせるビューと異なり、マスター表への問い合わせ結果を含んでいるため、参照を高速に行なえる。ただし、更新は遅くなる。
操作 | 表 | ビュー | マテリアライズド・ビュー |
---|---|---|---|
SELECT | ✓ | ✓ | ✓ |
INSERT | ✓ | ✓(制限あり) | ✗ |
UPDATE | ✓ | ✓(制限あり) | ✗ |
DELETE | ✓ | ✓(制限あり) | ✗ |
主キーの作成 | ✓ | ✗ | ✗ |
インデックスの作成 | ✓ | ✗ | ✓ |
マテリアライズド・ビューを操作するSQL文の一覧を次に示す。
マテリアライズド・ビューを操作するのに必要なシステム権限の一覧を次に示す。
システム権限 | 説明 |
---|---|
CREATE MATERIALIZED VIEW | 自分のスキーマ内でマテリアライズドビューを作成、変更、削除できる。 |
CREATE ANY MATERIALIZED VIEW | 他のユーザのスキーマ内にマテリアライズドビューを作成できる。 |
ALTER ANY MATERIALIZED VIEW | 他のユーザのスキーマ内にあるマテリアライズドビューを変更できる。 |
DROP ANY MATERIALIZED VIEW | 他のユーザのスキーマ内にあるマテリアライズドビューを削除できる。 |
CREATE TABLE | いずれかのテーブル作成権限が必要である。 |
CREATE ANY TABLE | |
SELECT ANY TABLE | 他のユーザのスキーマ内にあるテーブルをマスター表にできる。 |
マテリアライズド・ビューに関するデータ・ディクショナリ・ビューの一覧を次に示す。
マテリアライズド・ビューを定義する問い合わせを確認する例を示す。
SQL> SELECT QUERY FROM USER_MVIEWS WHERE MVIEW_NAME = 'example';
マテリアライズド・ビューを手動でリフレッシュするには、SQL*PlusのEXECUTEコマンドでDBMS_MVIEWパッケージのREFRESHプロシージャを実行する。
EXECUTE DBMS_MVIEW.REFRESH(name)
EXECUTE DBMS_MVIEW.REFRESH(name, method)
リフレッシュするマテリアライズド・ビューを指定する。
リフレッシュ方法を指定する。
方法 | 説明 |
---|---|
c | 完全リフレッシュ |
f | 高速リフレッシュ |
? | 強制リフレッシュ |
マテリアライズド・ビューの元となるマスター・マテリアライズド・ビューをDROP MATERIALIZED VIEWで削除すると、マテリアライズド・ビューのリフレッシュはエラーになる。 マスター・マテリアライズド・ビューを一度削除すると、CREATE MATERIALIZED VIEWで同じ名前のマスター・マテリアライズド・ビューを作成しても、マテリアライズド・ビューのリフレッシュはエラーになる。
マテリアライズド・ビューを手動でリフレッシュする例を示す。
SQL> EXEC DBMS_MVIEW.REFRESH('mview1', 'c');
マテリアライズド・ビュー・ログとは、マテリアライズド・ビューの基となるマスター表への変更を格納するスキーマオブジェクトである。マテリアライズド・ビュー・ログがある場合、マテリアライズド・ビュー・ログを使用してマテリアライズド・ビューがリフレッシュされる。これを増分リフレッシュ又は高速リフレッシュと呼ぶ。
マテリアライズド・ビューを高速リフレッシュするためには、マテリアライズド・ビュー・ログを作成する必要がある。
マテリアライズド・ビュー・ログを操作するSQL文の一覧を次に示す。