DBMS_MVIEW
を使用すると、リライトの可用性の他、マテリアライズド・ビューおよび潜在的なマテリアライズド・ビューの機能を理解できます。また、同じリフレッシュ・グループおよびパージ・ログの一部ではないマテリアライズド・ビューをリフレッシュできます。
注意: DBMS_MVIEW はDBMS_SNAPSHOT のシノニムです。 |
関連項目:
|
この章では、次の項目について説明します。
使用上の注意
セキュリティ・モデル
ルールおよび制限
この項では、DBMS_MVIEW
パッケージの使用に関連する項目について説明します。
問合せが256文字未満の場合は、SQL*PlusからEXECUTE
コマンドを使用してEXPLAIN_REWRITE
を起動できます。それ以外の場合は、/rdbms/demo/smxrw.sql
の例に示されているように、PL/SQLのBEGIN..END
ブロックを使用する方法をお薦めします。
表93-1 DBMS_MVIEWパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
BEGIN_TABLE_REORGANIZATIONプロシージャ |
リフレッシュに必要なマテリアライズド・ビュー・データを保存するプロセスを実行します。 |
END_TABLE_REORGANIZATIONプロシージャ |
マスター表のマテリアライズド・ビュー・データが有効であり、マスター表が適切な状態であることを確認します。 |
|
作成するマテリアライズド・ビューのサイズを、バイトと行で見積もります。 |
|
マテリアライズド・ビューまたは潜在的なマテリアライズド・ビューを使用して実行できる事項を説明します。 |
|
クエリー・リライトが失敗した理由、または特定のマテリアライズド・ビュー(複数も可)を使用してオプティマイザがクエリー・リライトを実行した理由を説明します。 |
|
|
|
ROWIDからパーティション・マーカーを戻します。戻り値は、パーティション・チェンジ・トラッキング(PCT)で使用されます。 |
|
マテリアライズド・ビューで行が不要になると、ダイレクト・ローダー・ログからその行をパージします(データ・ウェアハウスで使用)。 |
|
マテリアライズド・ビュー・ログから行をパージします。 |
|
マテリアライズド・ビュー・ログから行をパージします。 |
|
同じリフレッシュ・グループのメンバーではない1つ以上のマテリアライズド・ビューをリフレッシュします。 |
|
マスター表またはマスター・マテリアライズド・ビューに変更を反映していないマテリアライズド・ビューをすべてリフレッシュします。 |
|
指定したマスター表またはマスター・マテリアライズド・ビューに依存する表ベースのマテリアライズド・ビュー、またはマスター表またはマスター・マテリアライズド・ビューをリフレッシュします。 |
|
個々のマテリアライズド・ビューの管理を可能にします。 |
|
マスター・サイトまたはマスター・マテリアライズド・ビュー・サイトで起動された個々のマテリアライズド・ビューを管理できるようにして、マテリアライズド・ビューの登録を解除します。 |
このプロシージャは、リフレッシュに必要なマテリアライズド・ビュー・データを保存するプロセスを実行します。このプロシージャは、マスター表の再編成前にコールする必要があります。
このプロシージャは、マスター表のマテリアライズド・ビュー・データが有効であり、マスター表が適切な状態であることを確認します。このプロシージャは、マスター表の再編成後にコールする必要があります。
このプロシージャでは、作成するマテリアライズド・ビューのサイズをバイトおよび行数で見積もります。
このプロシージャは、マテリアライズド・ビューまたは潜在的なマテリアライズド・ビューを使用して実行できる事項を説明します。たとえば、マテリアライズド・ビューが高速リフレッシュ可能であるかどうか、また、特定のマテリアライズド・ビューを使用して実行できるクエリー・リライトのタイプなどを判別します。
このプロシージャの使用方法は簡単です。DBMS_MVIEW
.EXPLAIN_MVIEW
をコールし、既存のマテリアライズド・ビューにパラメータとしてスキーマとマテリアライズド・ビュー名を渡します。または、潜在的なマテリアライズド・ビューに、SELECT
文字列またはCREATE
MATERIALIZED
VIEW
文を指定できます。マテリアライズド・ビューまたは作成前のマテリアライズド・ビューが分析され、結果がデフォルトの表MV_CAPABILITIES_TABLE
または配列MSG_ARRAY
に書き込まれます。
このプロシージャはオーバーロードされています。
最初のバージョンは、既存または潜在的なマテリアライズド・ビューを分析するもので、分析結果はMV_CAPABILITIES_TABLE
に出力されます。
2番目のバージョンは、既存または潜在的なマテリアライズド・ビューを分析するもので、分析結果はVARRAY
に出力されます。
構文
DBMS_MVIEW.EXPLAIN_MVIEW ( mv IN VARCHAR2, statement_id IN VARCHAR2:= NULL); DBMS_MVIEW.EXPLAIN_MVIEW ( mv IN VARCHAR2, msg_array OUT SYS.ExplainMVArrayType);
パラメータ
表93-5 EXPLAIN_MVIEWプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
既存のマテリアライズド・ビューの名前(オプションにより"."(ピリオド)で区切られた所有者の名前で修飾可能)、あるいは潜在的なマテリアライズド・ビューの |
|
クライアントが提供する一意の識別子。出力行を特定の |
|
出力を受け取るPL/SQL |
このプロシージャを使用すると、クエリー・リライトに失敗した理由や、リライトした場合は使用されるマテリアライズド・ビューを確認できます。プロシージャから得た結果を使用することで、クエリー・リライトに必要な適切なアクションを可能なかぎり実行できます。EXPLAIN_REWRITE
文で指定された問合せが、実際に実行されることはありません。
デモ・ファイルxrwutl.sql
を使用すると、EXPLAIN_REWRITE
からの出力をフォーマットできます。
構文
DBMS_MVIEW.EXPLAIN_REWRITE
からの出力を取得するには、2つの方法があります。1つは表を使用する方法、もう1つはVARRAY
を作成する方法です。出力表を使用するための基本構文は、次のとおりです。
DBMS_MVIEW.EXPLAIN_REWRITE ( query VARCHAR2, mv VARCHAR2(30), statement_id VARCHAR2(30));
utlxrw.sql
スクリプトを実行して、REWRITE_TABLE
という名前の出力表を作成できます。
query
パラメータはSQL問合せを表すテキスト文字列です。パラメータmv
は、schema.mv
という形式の完全修飾マテリアライズド・ビュー名です。このパラメータはオプションです。指定されていない場合、EXPLAIN_REWRITE
は、目的の問合せのリライトに必要なすべてのマテリアライズド・ビューに関するメッセージを戻します。スキーマ
が省略され、mv
のみが指定されている場合、EXPLAIN_REWRITE
は、現行のスキーマのマテリアライズド・ビューを検索します。
EXPLAIN_REWRITE
の出力を表ではなくVARRAY
に送る場合は、プロシージャを次のようにコールする必要があります。
DBMS_MVIEW.EXPLAIN_REWRITE ( query [VARCHAR2 | CLOB], mv VARCHAR2(30), output_array SYS.RewriteArrayType);
問合せが256文字未満の場合は、SQL*PlusからEXECUTE
コマンドを使用して簡単にEXPLAIN_REWRITE
を起動できます。それ以外の場合は、/rdbms/demo/smxrw*
の例に示されているように、PL/SQLのBEGIN... END
ブロックを使用する方法をお薦めします。
また、複数のマテリアライズド・ビューでEXPLAIN_REWRITE
を使用することもできますが、この場合、構文は、マテリアライズド・ビューがカンマ区切り文字列で指定される点を除き、単一のマテリアライズド・ビューで使用される場合と同じです。たとえば、マテリアライズド・ビューの特定のセットmv1
、mv2
およびmv3
を問合せquery_txt
のリライトに使用できるかどうかを判断し、使用できない場合にその原因を調べるには、次のようにEXPLAIN_REWRITE
を使用します。
DBMS_MVIEW.EXPLAIN_REWRITE(query_txt, 'mv1, mv2, mv3')
EXPLAIN_REWRITE
プロシージャの使用方法の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
このプロシージャは、既知のマテリアライズド・ビューでエントリが不要になると、ダイレクト・ローダー・ログからそのエントリを削除します。このプロシージャは通常、Oracleのデータ・ウェアハウス・テクノロジを使用する環境で使用されます。
関連項目: 詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。 |
このプロシージャは、マテリアライズド・ビュー・ログから行をパージします。
構文
DBMS_MVIEW.PURGE_LOG ( master IN VARCHAR2, num IN BINARY_INTEGER := 1, flag IN VARCHAR2 := 'NOP');
パラメータ
表93-8 PURGE_LOGプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
マスター表またはマスター・マテリアライズド・ビューの名前。 |
|
マテリアライズド・ビュー・ログから削除する行の中で、リフレッシュ日付が最も古いマテリアライズド・ビューの数。たとえば、次の文は、リフレッシュ日付が最も古い2つのマテリアライズド・ビューをリフレッシュするために必要な行を削除します。
マテリアライズド・ビュー・ログにあるすべての行を削除するには、次の例のように、削除するマテリアライズド・ビューについて大きい数を指定します。
この文は、 |
|
|
このプロシージャは、マテリアライズド・ビューのリフレッシュに関連したデータ・ディクショナリ表にある行を削除するためにマスター・サイトまたはマスター・マテリアライズド・ビュー・サイトでコールされますが、この表は、mview_id
またはmviewowner
、mviewname
およびmviewsite
の組合せで識別される指定マテリアライズド・ビューについて、マスター・サイトでメンテナンスされている表です。指定したマテリアライズド・ビューが、任意のマスター表からリフレッシュされた最も古いマテリアライズド・ビューの場合、またはマスター・マテリアライズド・ビューの場合は、そのマテリアライズド・ビュー・ログもパージされます。このプロシージャは、マテリアライズド・ビューの登録解除は行いません。
構文
DBMS_MVIEW.PURGE_MVIEW_FROM_LOG ( mview_id IN BINARY_INTEGER | mviewowner IN VARCHAR2, mviewname IN VARCHAR2, mviewsite IN VARCHAR2);
注意: このプロシージャはオーバーロードされています。mview_id パラメータには、同時に指定できないパラメータが3つあり、それらのパラメータは、mviewowner 、mviewname およびmviewsite です。 |
パラメータ
表93-9 PURGE_MVIEW_FROM_LOGプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ターゲット・マテリアライズド・ビューの識別に基づいてこのプロシージャを実行するには、 登録済マテリアライズド・ビューのリスト( |
|
|
|
|
|
|
このプロシージャは、マテリアライズド・ビューのリストをリフレッシュします。
構文
DBMS_MVIEW.REFRESH ( { list IN VARCHAR2, | tab IN DBMS_UTILITY.UNCL_ARRAY,} method IN VARCHAR2 := NULL, rollback_seg IN VARCHAR2 := NULL, push_deferred_rpc IN BOOLEAN := true, refresh_after_errors IN BOOLEAN := false, purge_option IN BINARY_INTEGER := 1, parallelism IN BINARY_INTEGER := 0, heap_size IN BINARY_INTEGER := 0, atomic_refresh IN BOOLEAN := true, nested IN BOOLEAN := false);
注意: このプロシージャはオーバーロードされています。list パラメータとtab パラメータは、両方同時には指定できません。 |
パラメータ
表93-10 REFRESHプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
リフレッシュするマテリアライズド・ビューの、カンマ区切りのリストです。(シノニムはサポートされていません。)これらのマテリアライズド・ビューは、異なるスキーマに置くことができ、また異なるマスター表またはマスター・マテリアライズド・ビューを持つことができます。ただし、リストされているすべてのマテリアライズド・ビューが、ローカル・データベースに存在している必要があります。 他の方法として、 |
|
リストされているマテリアライズド・ビューのリフレッシュ方法を示す文字列。 マテリアライズド・ビューに対応するリフレッシュ方法がない場合(つまり、リフレッシュ方法より多くのマテリアライズド・ビューが指定された場合)、そのマテリアライズド・ビューはデフォルトのリフレッシュ方法に従ってリフレッシュされます。たとえば、SQL*Plus内の次の DBMS_MVIEW.REFRESH ('countries_mv,regions_mv,hr.employees_mv','cf'); この文は、 |
|
マテリアライズド・ビューのリフレッシュ中に使用する、マテリアライズド・ビュー・サイトのロールバック・セグメント名。 |
|
更新可能なマテリアライズド・ビューでのみ使用します。マテリアライズド・ビューをリフレッシュする前に、マテリアライズド・ビューから関連するマスター表またはマスター・マテリアライズド・ビューに変更を送信する場合、このパラメータを |
|
このパラメータを |
|
パラレル伝播メカニズムを使用する場合(つまり、パラレル化に1以上を設定)、0はパージなし、1はレイジー・パージ、2はアグレッシブ・パージになります。ほとんどの場合、レイジー・パージが最適な設定です。複数のマスター・レプリケーション・グループが別々のターゲット・サイトに送信され、1つ以上のレプリケーション・グループへの更新や送信がまれな場合は、アグレッシブ・パージに設定してキューを減らします。すべてのレプリケーション・グループへの更新と送信がまれな場合は、このパラメータを |
|
0(ゼロ)はシリアル伝播を指定します。 n > 1はnのパラレル処理を使用するパラレル伝播を指定します。 1は単一のパラレル処理を使用するパラレル伝播を指定します。 |
|
パラレル伝播スケジューリングで同時に検査されるトランザクションの最大数。最適なパフォーマンスのためのデフォルト設定はOracleが自動的に計算します。 注意: Oracleサポート・サービスから指示がないかぎり、このパラメータは設定しないでください。 |
|
このパラメータを このパラメータを 完全リフレッシュの一環として、切捨てが使用されると(アトミック以外のリフレッシュ)、一意索引の再作成が実行されます。 |
|
このパラメータを |
このプロシージャは、次のプロパティを持つすべてのマテリアライズド・ビューをリフレッシュします。
マテリアライズド・ビューが依存するマスター表またはマスター・マテリアライズド・ビューに対する最も新しい変更が行われてから、マテリアライズド・ビューがリフレッシュされていない場合。
マテリアライズド・ビューおよびそれが依存しているすべてのマスター表またはマスター・マテリアライズド・ビューがローカルな場合。
マテリアライズド・ビューがDBA_MVIEWS
ビューにある場合。
これは、データ・ウェアハウスで使用するためのプロシージャです。
構文
DBMS_MVIEW.REFRESH_ALL_MVIEWS ( number_of_failures OUT BINARY_INTEGER, method IN VARCHAR2 := NULL, rollback_seg IN VARCHAR2 := NULL, refresh_after_errors IN BOOLEAN := false, atomic_refresh IN BOOLEAN := true);
パラメータ
表93-11 REFRESH_ALL_MVIEWSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
処理中に発生した失敗の件数を戻します。 |
|
リフレッシュされる各マテリアライズド・ビューに対して実行するリフレッシュのタイプを示す単一のリフレッシュ方法。 |
|
マテリアライズド・ビューのリフレッシュ中に使用する、マテリアライズド・ビュー・サイトのロールバック・セグメント名。 |
|
このパラメータを |
|
このパラメータを このパラメータを |
このプロシージャは、次のプロパティを持つすべてのマテリアライズド・ビューをリフレッシュします。
マテリアライズド・ビューが、指定されたマスターのリストにあるマスター表またはマスター・マテリアライズド・ビューに依存している場合。
マテリアライズド・ビューが依存するマスター表またはマスター・マテリアライズド・ビューに対する最も新しい変更が行われてから、マテリアライズド・ビューがリフレッシュされていない場合。
マテリアライズド・ビューおよびそれが依存しているすべてのマスター表またはマスター・マテリアライズド・ビューがローカルな場合。
マテリアライズド・ビューがDBA_MVIEWS
ビューにある場合。
これは、データ・ウェアハウスで使用するためのプロシージャです。
構文
DBMS_MVIEW.REFRESH_DEPENDENT ( number_of_failures OUT BINARY_INTEGER, { list IN VARCHAR2, | tab IN DBMS_UTILITY.UNCL_ARRAY,} method IN VARCHAR2 := NULL, rollback_seg IN VARCHAR2 := NULL, refresh_after_errors IN BOOLEAN := false, atomic_refresh IN BOOLEAN := true, nested IN BOOLEAN := false);
注意: このプロシージャはオーバーロードされています。list パラメータとtab パラメータは、両方同時には指定できません。 |
パラメータ
表93-12 REFRESH_DEPENDENTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
処理中に発生した失敗の件数を戻します。 |
|
マテリアライズド・ビューが依存できるマスター表またはマスター・マテリアライズド・ビューのカンマで区切られたリスト。(シノニムはサポートされていません。)これらの表およびそれらに依存するマテリアライズド・ビューは、別々のスキーマに配置できます。ただし、すべての表とマテリアライズド・ビューが、ユーザーのローカル・データベースに存在している必要があります。 他の方法として、 |
|
依存するマテリアライズド・ビューのリフレッシュ方法を示す文字列。特定の表に依存しているすべてのマテリアライズド・ビューは、その表に関連付けられたリフレッシュ方法に従ってリフレッシュされます。 表に対応するリフレッシュ方法がない場合(つまり、リフレッシュ方法より多くの表が指定された場合)、その表に依存するマテリアライズド・ビューはデフォルトのリフレッシュ方法に従ってリフレッシュされます。たとえば、SQL*Plus内の次の DBMS_MVIEW.REFRESH_DEPENDENT ('employees,deptartments,hr.regions','cf');
|
|
マテリアライズド・ビューのリフレッシュ中に使用する、マテリアライズド・ビュー・サイトのロールバック・セグメント名。 |
|
このパラメータを |
|
このパラメータを このパラメータを |
|
このパラメータを |
このプロシージャは、個々のマテリアライズド・ビューを管理できるようにします。マスター・サイトまたはマスター・マテリアライズド・ビュー・サイトでこのプロシージャを起動して、マテリアライズド・ビューを登録します。
通常、マテリアライズド・ビューは、作成されている間に自動的に登録されます。自動登録に失敗した場合または登録情報が削除された場合にかぎり、このプロシージャを実行してマテリアライズド・ビューを手動で登録してください。
構文
DBMS_MVIEW.REGISTER_MVIEW ( mviewowner IN VARCHAR2, mviewname IN VARCHAR2, mviewsite IN VARCHAR2, mview_id IN DATE | BINARY_INTEGER, flag IN BINARY_INTEGER, qry_txt IN VARCHAR2, rep_type IN BINARY_INTEGER := DBMS_MVIEW.REG_UNKNOWN);
パラメータ
表93-13 REGISTER_MVIEWプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
マテリアライズド・ビューの所有者。 |
|
マテリアライズド・ビューの名前。 |
|
Oracle Databaseバージョン8.x以上のマスター・サイトまたはマスター・マテリアライズド・ビュー・サイトで登録するマテリアライズド・ビューのマテリアライズド・ビュー・サイトの名前。この名前に二重引用符を含めることはできません。 |
|
マテリアライズド・ビューの識別番号。Oracle Databaseバージョン8.x以上のマテリアライズド・ビューは、 |
|
登録されているマテリアライズド・ビューのプロパティを記述する定数。割当て可能な定数は次のとおりです。 ROWIDマテリアライズド・ビューの場合は 主キー・マテリアライズド・ビューの場合は オブジェクトIDマテリアライズド・ビューの場合は 高速リフレッシュが可能なマテリアライズド・ビューの場合は 更新可能なマテリアライズド・ビューの場合は マテリアライズド・ビューにはこれらのプロパティのうち複数を設定できます。複数のプロパティを指定するには、プラス記号(+)を使用します。たとえば、主キーのマテリアライズド・ビューに高速リフレッシュを実行できる場合、このパラメータに次のように入力できます。
|
|
マテリアライズド・ビュー定義問合せの最初の32,000バイト。 |
|
マテリアライズド・ビューのバージョン。割当て可能な定数は次のとおりです。 マテリアライズド・ビューがOracle Databaseバージョン7のサイトにある場合、
マテリアライズド・ビューがOracle Databaseバージョン8.x以上のサイトにある場合、 マテリアライズド・ビューがOracle Databaseバージョン7のサイトまたはOracle Databaseバージョン8.x以上のサイトのどちらにあるか不明な場合、 |
使用上の注意
このプロシージャは、リモート・プロシージャ・コールを使用して、マスター・サイトまたはマスター・マテリアライズド・ビュー・サイトでリモート・マテリアライズド・ビューにより起動します。REGISTER_MVIEW
が同じmviewowner
、mviewname
およびmviewsite
を使用して複数回コールされている場合、mview_id
、flag
およびqry_txt
に対する最も新しい値が格納されます。問合せがVARCHAR2
の最大サイズを超える場合は、最初の32000文字がqry_txt
に格納され、残りは切り捨てられます。手動で起動した場合、プロシージャをコールしたユーザーがマテリアライズド・ビューのデータ・ディクショナリ・ビューでmview_id
の値を参照する必要があります。