CREATE MATERIALIZED VIEW LOG

CREATE MATERIALIZED VIEW LOG はマテリアライズド・ビュー・ログを作成するSQL文である。マテビューを高速リフレッシュするためには、マテリアライズド・ビュー・ログを作成する必要がある。

マテリアライズド・ビュー・ログとは

マテリアライズド・ビュー・ログとは、マテリアライズド・ビューの基となるマスター表への変更を格納するスキーマ・オブジェクトである。

マテリアライズド・ビュー・ログがある場合、マテリアライズド・ビュー・ログを使用してマテリアライズド・ビューがリフレッシュされる。これを増分リフレッシュまたは高速リフレッシュと呼ぶ。

マテリアライズド・ビューを高速リフレッシュするためには、マテリアライズド・ビュー・ログを作成する必要がある。

SQL

自分のスキーマ内にあるテーブルに対して、マテリアライズド・ビュー・ログを作成する。

CREATE MATERIALIZED VIEW LOG ON table
table
マテリアライズド・ビュー・ログの対象となる表

社員表に対して、マテリアライズド・ビュー・ログを作成する。

CREATE MATERIALIZED VIEW LOG ON emp

他人のスキーマ内にあるテーブルに対して、マテリアライズド・ビュー・ログを作成する。

CREATE MATERIALIZED VIEW LOG ON schema.table
schema
表が存在するスキーマ

社員表に対して、マテリアライズド・ビュー・ログを作成する。

CREATE MATERIALIZED VIEW LOG ON tsuka.emp

マテリアライズド・ビューを作成して、高速リフレッシュするまでの手順を次に示す。

CREATE MATERIALIZED VIEW emp_dept_mv AS
SELECT e.empno, e.deptno, d.dname FROM emp e INNER JOIN dept d ON (e.deptno = d.deptno);
CREATE MATERIALIZED VIEW LOG ON emp;
CREATE MATERIALIZED VIEW LOG ON dept;
DBMS_MVIEW.REFRESH('emp_dept_mv', 'f');

権限

自分のスキーマ内にある表に対してマテリアライズド・ビュー・ログを作成するには、CREATE TABLE システム権限が必要である。

他人のスキーマ内にある表に対してマテリアライズド・ビュー・ログを作成するには、次に示す権限が必要である。

マテリアライズド・ビュー・ログに関するSQL

マテリアライズド・ビュー・ログに関するSQL文には、次のものがある。

マテリアライズド・ビュー・ログに関するSQL
SQL 説明
CREATE MATERIALIZED VIEW LOG マテリアライズド・ビュー・ログを作成する。
ALTER MATERIALIZED VIEW LOG マテリアライズド・ビュー・ログを変更する。
DROP MATERIALIZED VIEW LOG マテリアライズド・ビュー・ログを削除する。

マテリアライズド・ビュー・ログに関するデータディクショナリ・ビュー

マテリアライズド・ビュー・ログに関するデータディクショナリ・ビューを以下に示す。

ALL_MVIEW_LOGS
現在のユーザがアクセスできるマテリアライズド・ビュー・ログ
DBA_MVIEW_LOGS
データベース内すべてのマテリアライズド・ビュー・ログ
USER_MVIEW_LOGS
現在のユーザが所有するマテリアライズド・ビュー・ログ

次のSQL文を実行することで、自分が所有するマテリアライズド・ビュー・ログの一覧を確認できる。

SQL> SELECT MASTER, LOG_TABLE FROM USER_MVIEW_LOGS;

マテリアライズド・ビュー・ログに関するPL/SQLパッケージ

マテリアライズド・ビュー・ログに関するPL/SQLパッケージを以下に示す。

DBMS_MVIEW
マテリアライズド・ビューを操作するプロシージャやファンクションを含むパッケージ

マテリアライズド・ビュー・ログに関する表

マテリアライズド・ビュー・ログに関する表を以下に示す。

MV_CAPABILITIES_TABLE
マテリアライズド・ビューで可能なことを調べる表

MV_CAPABILITIES_TABLE テーブルを作成するには、DBMS_MVIEW.EXPLAIN_MVIEW プロシージャを実行する必要がある。

SQL> EXEC DBMS_MVIEW.EXPLAIN_MVIEW('emp_dept_mv');

マテリアライズド・ビューの高速リフレッシュが可能かどうか問い合わせる。

SQL> SELECT CAPABILITY_NAME FROM MV_CAPABILITIES_TABLE WHERE CAPABILITY_NAME = 'REFRESH_FAST';

CAPABILITY_NAME                POS REL_TEXT   MSGTXT
------------------------------ --- ---------- --------
REFRESH_FAST                   Y

SQL