オラクルのマテリアライズドビューとは
マテリアライズドビュー クエリの結果を含むデータベースオブジェクトです。単純なオラクルビューとは異なります。これらのマテリアライズド・ビューにはデータが保管されており、マテリアライズド・ビューを照会すると、保管されているデータからデータが返されます。クエリのFROM句は、テーブル、ビュー、およびその他のマテリアライズドビューに名前を付けることができます。これらのオブジェクトを総称して、マスターテーブル(レプリケーション用語)または詳細テーブル(データウェアハウス用語)と呼びます。このリファレンスでは、一貫性を保つために「マスターテーブル」を使用しています。マスターテーブルを含むデータベースは、マスターデータベースと呼ばれます。
マテリアライズド・ビューを作成すると、Oracle Databaseは1つの内部表と少なくとも1つのOracle索引を作成し、すべてマテリアライズド・ビューのスキーマに1つのビューを作成する場合があります。 Oracle Databaseは、これらのオブジェクトを使用して、マテリアライズド・ビューのデータを維持します。これらのオブジェクトを作成するために必要な権限が必要です。
マテリアライズドビューを作成するために必要な権限
ユーザーはマテリアライズドビューを作成する必要があります マテリアライズドビューを作成するには
一般的な構文
CREATE MATERIALIZED VIEW BUILD [IMMEDIATE | DEFERRED] REFRESH [FAST | COMPLETE | FORCE ] ON [COMMIT | DEMAND ] [[ENABLE | DISABLE] QUERY REWRITE] [ON PREBUILT TABLE] AS ;
各用語の説明
BUILD [IMMEDIATE |延期] | すぐにデータを入力するように指定することも、最初に要求された更新時にデータを入力するようにDEFERREDを指定することもできます。 |
REFRESH [FAST |完了|フォース] | ここには3つのオプションがあります。それぞれを以下に説明します 1)FAST:高速リフレッシュが試行されます。マテリアライズドビューログがソーステーブルに対して事前に存在しない場合、作成は失敗します。 2)COMPLETE:マテリアライズド・ビューをサポートするテーブル・セグメントは、関連付けられた照会を使用して切り捨てられ、完全に再移入されます。 3)FORCE:高速リフレッシュが試行されます。不可能な場合は、完全な更新が実行されます。 |
ON [COMMIT |要求] | ON COMMITを指定して、依存テーブルの1つでコミットされたデータ変更によって更新がトリガーされるようにするか、ON DEMANDを指定して、手動リクエストまたはスケジュールされたタスクによって更新が開始されるようにすることができます。 |
[[ENABLE | DISABLE] QUERY REWRITE] | ビューはクエリの書き換えに適格です |
CREATE MATERIALIZED VIEW mv_test
BUILD IMMEDIATE
REFRESH complete
ON demand AS
SELECT EMP.EMPNO,EMP.ENAME, DEPT.DEPTNO,DEPT.DNAME
FROM EMP,DEPT
where EMP.DEPTNO= DEPT.DEPTNO;
マテリアライズドビューの更新
PLSQLパッケージDBMS_MVIEW
を使用して、マテリアライズド・ビューをリフレッシュできます。DBMS_MVIEWパッケージには、更新操作を実行するための3つのAPIが含まれています。
DBMS_MVIEW.REFRESH
1つ以上のマテリアライズドビューを更新します。
DBMS_MVIEW.REFRESH_ALL_MVIEWS
マテリアライズドビューをすべて更新します。
DBMS_MVIEW.REFRESH_DEPENDENT
指定されたマスター表またはマテリアライズド・ビュー、あるいはマスター表またはマテリアライズド・ビューのリストに依存するすべてのマテリアライズド・ビューをリフレッシュします。
EXECUTE DBMS_MVIEW.REFRESH('MV_TEST','C');
Here C stands for Complete refresh
以下のコマンドを使用して、高速更新を実行しようとする場合
EXECUTE DBMS_MVIEW.REFRESH('MV_TEST','F');
Here F stands for fast Refresh
マテリアライズド・ビュー・ログがないため、エラーがスローされます。以下のマテリアライズドビューログを確認します
Oracle 12cでは、Oracleは更新用の新しいAPIDBMS_SYNC_REFRESHを導入しました
Oracleマテリアライズドビューログとは
マスターテーブルデータにDMLの変更が加えられると、OracleDatabaseはそれらの変更を説明する行をマテリアライズドビューログに格納します 次に、マテリアライズド・ビュー・ログを使用して、マスター表に基づいてマテリアライズド・ビューをリフレッシュします。このプロセスは、インクリメンタルまたは高速リフレッシュと呼ばれます。マテリアライズド・ビュー・ログがない場合、Oracle Databaseはマテリアライズド・ビュー・クエリを再実行して、マテリアライズド・ビューをリフレッシュする必要があります。このプロセスは、完全更新と呼ばれます。通常、高速更新は完全更新よりも時間がかかりません。
マテリアライズド・ビュー・ログは、マスター表と同じスキーマのマスター・データベースにあります。マスターテーブルには、マテリアライズドビューログを1つだけ定義できます。 Oracle Databaseは、このマテリアライズド・ビュー・ログを使用して、マスター表に基づいて、高速リフレッシュ可能なすべてのマテリアライズド・ビューに対して高速リフレッシュを実行できます。
マテリアライズド結合ビューを高速リフレッシュするには、マテリアライズド・ビューによって参照されるテーブルごとにマテリアライズド・ビュー・ログを作成する必要があります。
グループを更新
リフレッシュグループは、Oracleがアトミックトランザクションでリフレッシュする1つ以上のマテリアライズドビューのコレクションであり、マスターテーブル間の関係が保持されることを保証します
例:
CREATE MATERIALIZED VIEW mv_test
TABLESPACE test_data
BUILD IMMEDIATE
REFRESH complete ON COMMIT AS
SELECT a.name,b.salary FROM [email protected]_LINK a, [email protected]_LINK b where a.emp_id=b.emp_id;CREATE MATERIALIZED VIEW mv_test
TABLESPACE test_data
BUILD IMMEDIATE
REFRESH force ON COMMIT AS
SELECT a.name,b.salary FROM [email protected]_LINK a, [email protected]_LINK b where a.emp_id=b.emp_id;CREATE MATERIALIZED VIEW LOG ON emp;exec DBMS_REFRESH.MAKE(name=>'test_grp', -
list=>'test_mv1,test_mv2','mv_test' -
next_date => sysdate, -
interval => 'null');exec DBMS_REFRESH.REFRESH('test_grp');
マテリアライズドビューのステータスを確認する方法
SELECT MVIEW_NAME, STALENESS, LAST_REFRESH_TYPE, COMPILE_STATE
FROM USER_MVIEWS ORDER BY MVIEW_NAME;
マテリアライズド・ビューのアウトオブプレース更新オプション
12cリリース1では、マテリアライズド・ビューのリフレッシュのパフォーマンスと可用性を向上させるための新しいリフレッシュ・オプションが使用可能です。このリフレッシュオプションは、マテリアライズドビューコンテナテーブルに変更を直接適用する既存の「インプレース」リフレッシュとは対照的に、リフレッシュ中に外部テーブルを使用するため、アウトオブプレースリフレッシュと呼ばれます。アウトオブプレースリフレッシュオプションは、FAST('F')、COMPLETE('C')、PCT('P')、FORCE('?')などの既存のすべてのリフレッシュメソッドで機能します。
アウトオブプレースリフレッシュは、従来のDMLステートメントが適切にスケーリングされない大量のデータ変更を伴う状況を処理する場合に特に効果的です。また、更新中のマテリアライズド・ビューは、更新ステートメントの実行中に直接アクセスおよび照会の書き換えに使用できるため、非常に高い可用性を実現できます。
アウトオブプレースリフレッシュでは、マテリアライズドビューの全体または影響を受ける部分が1つ以上の外部テーブルに計算されます。
exec dbms_mview.refresh('MV_TEST', out_of_place=>true, atomic_refresh=>false) ;
マテリアライズド・ビューとOracleビューの違い
上で説明したように、マテリアライズドビュー はディスクベースであり、クエリ定義に基づいて定期的に更新されます。マテリアライズドビューでは、結果セットはマテリアライズドビューテーブルに保存されます
ビュー は仮想のみであり、アクセスされるたびにクエリ定義を実行します。ビューでは、結果セットは保存されず、ビューにアクセスするたびに基になるテーブルにアクセスします
また読む
Oracleが参加します
Oracleのサブクエリ
https://en.wikipedia.org/wiki/Materialized_view