日本語PDF

14.3 CREATE MATERIALIZED VIEW

目的

CREATE MATERIALIZED VIEW文を使用すると、マテリアライズド・ビューを作成できます。マテリアライズド・ビューは、問合せ結果を含むデータベース・オブジェクトです。問合せのFROM句には、表、ビューおよびその他のマテリアライズド・ビューを指定できます。これらのオブジェクトをあわせて、マスター表(レプリケーション用語)またはディテール表(データ・ウェアハウス用語)といいます。このマニュアルでは、「マスター表」を使用します。マスター表が格納されているデータベースをマスター・データベースといいます。

注意:

下位互換性を保つために、MATERIALIZED VIEWのかわりにキーワードSNAPSHOTもサポートされています。

レプリケーションでは、マテリアライズド・ビューを使用すると、ローカル・ノード上にあるリモート・データの読取り専用コピーをメンテナンスできます。マテリアライズド・ビューのデータを、表またはビューと同じように選択することができます。レプリケーション環境では、通常作成されるマテリアライズド・ビューは、主キーROWIDオブジェクトおよび副問合せのマテリアライズド・ビューです。

関連項目:

レプリケーションのサポートに使用するマテリアライズド・ビューのタイプの詳細は、『Oracle Database管理者ガイド』を参照してください。

データ・ウェアハウスでは、通常作成されるマテリアライズド・ビューは、マテリアライズド集計ビュー単一表マテリアライズド集計ビューおよびマテリアライズド結合ビューです。3つのマテリアライズド・ビューはすべてクエリー・リライトで使用できます。クエリー・リライトとは、マスター表に関して記述されたユーザー要求を、1つ以上のマテリアライズド・ビューを含む意味的に同等の要求に変換するための最適化手法です。

関連項目:

前提条件

マテリアライズド・ビューの作成に必要な権限は、ロールを介してではなく、直接付与する必要があります。

自分のスキーマ内にマテリアライズド・ビューを作成する場合は、次の条件に従う必要があります。

  • CREATE MATERIALIZED VIEWシステム権限CREATE TABLEまたはCREATE ANY TABLEのいずれかのシステム権限が必要です。

  • 所有していないマテリアライズド・ビューのマスター表にアクセスする場合は、各表に対するREADまたはSELECTオブジェクト権限またはREAD ANY TABLEまたはSELECT ANY TABLEシステム権限が必要です。

他のユーザーのスキーマ内にマテリアライズド・ビューを作成する場合、次の条件に従う必要があります。

  • CREATE ANY MATERIALIZED VIEWシステム権限が必要です。

  • マテリアライズド・ビューの所有者には、CREATE TABLEシステム権限が必要です。スキーマ所有者が所有していないマテリアライズド・ビューの任意のマスター表(リモート・データベースに存在するマスター表など)、およびそのマスター表に定義された任意のマテリアライズド・ビュー・ログにアクセスするには、各表に対するREADまたはSELECTオブジェクト権限、あるいはREAD ANY TABLEまたはSELECT ANY TABLEシステム権限が必要です。

REFRESH ON COMMITモードのマテリアライズド・ビューを作成する場合(REFRESH ON COMMIT句を使用する場合)は、前述の権限の他に、所有していないマスター表に対するON COMMIT REFRESHオブジェクト権限、またはON COMMIT REFRESHシステム権限が必要です。

前述の権限の他にも、クエリー・リライト使用可能なマテリアライズド・ビューを作成する場合は、次の条件に従う必要があります。

  • スキーマ所有者がマスター表を所有していない場合は、そのスキーマ所有者にはGLOBAL QUERY REWRITE権限、または自分のスキーマ以外の各表に対するQUERY REWRITEオブジェクト権限が必要です。

  • 事前作成コンテナにマテリアライズド・ビューを定義する(ON PREBUILT TABLE句を使用)場合は、コンテナ表に対するWITH GRANT OPTION付きのREADまたはSELECT権限が必要です。

マテリアライズド・ビューを含むスキーマのユーザーには、マテリアライズド・ビューのマスター表および索引を格納するターゲット表領域への十分な割当て制限またはUNLIMITED TABLESPACEシステム権限が必要です。

マテリアライズド・ビューを作成すると、そのマテリアライズド・ビューのスキーマ内に、1つの内部表および1つ以上の索引が作成されます。また、1つのビューが作成されることもあります。これらのオブジェクトは、マテリアライズド・ビューのデータをメンテナンスするために使用されます。ユーザーには、これらのオブジェクトを作成するための権限が必要です。

コミットSCNベース・マテリアライズド・ビュー・ログを使用するマスター表には、次のようなローカル・マテリアライズド・ビューを作成できます(ON COMMITおよびON DEMANDを含む)。

  • マテリアライズド集計ビュー(単一表に対するマテリアライズド集計ビューを含む)

  • マテリアライズド結合ビュー

  • 主キーおよびROWIDに基づく単一表マテリアライズド・ビュー

  • UNION ALLマテリアライズド・ビュー(各UNION ALLブランチはここに示したマテリアライズド・ビューのいずれかのタイプ)

コミットSCNベース・マテリアライズド・ビュー・ログを使用するマスター表には、リモート・マテリアライズド・ビューを作成できません。

異なるマテリアライズド・ビュー・ログを使用するマスター表(つまり、タイムスタンプ・ベース・マテリアライズド・ビュー・ログを使用するマスター表およびコミットSCNベース・マテリアライズド・ビュー・ログを使用するマスター表)にはマテリアライズド・ビューを作成できず、ORA-32414が戻されます。

evaluation_edition_clauseまたはunusable_editions_clauseでエディションを指定するには、そのエディションに対するUSE権限が必要になります。

関連項目:

構文

scoped_table_ref_constraint::=

heap_org_table_clause::=

index_org_table_clause::=

(mapping_table_clause: マテリアライズド・ビューではサポートされていません、prefix_compression::=index_org_overflow_clause::=)

prefix_compression::=

create_mv_refresh::=

deferred_segment_creation::=

segment_attributes_clause::=

(physical_attributes_clause::=TABLESPACE SET: CREATE MATERIALIZED VIEWではサポートされていません、logging_clause::=)

logging_clause::=

table_compression::=

inmemory_memcompress::=

inmemory_priority::=

inmemory_distribute::=

inmemory_duplicate::=

column_properties::=

(object_type_col_properties::=nested_table_col_properties::=varray_col_properties::=LOB_partition_storage::=LOB_storage_clause::=XMLType_column_propertiesは、マテリアライズド・ビューではサポートされていません)

substitutable_column_clause::=

LOB_storage_parameters::=

(TABLESPACE SET: CREATE MATERIALIZED VIEWではサポートされていません、LOB_parameters::=storage_clause::=)

parallel_clause::=

evaluation_edition_clause::=

query_rewrite_clause::=

unusable_editions_clause::=

セマンティクス

schema

マテリアライズド・ビューを含めるスキーマを指定します。schemaを指定しない場合、自分のスキーマにそのマテリアライズド・ビューが作成されます。

materialized_view

作成するマテリアライズド・ビューの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。Oracle Databaseは、マテリアライズド・ビュー名に接頭辞または接尾辞を追加して、マテリアライズド・ビューをメンテナンスするための表および索引の名前を生成します。

column_alias

マテリアライズド・ビューの各列に対して別名を指定できます。列の別名のリストによって、競合する列名が明示的に解決されます。したがって、マテリアライズド・ビューのSELECT句で別名を指定する必要がなくなります。この句で列の別名を指定する場合は、SELECT句内で参照される各データソースの別名を指定する必要があります。

ENCRYPT句

この句を使用すると、マテリアライズド・ビューの列を暗号化できます。列の暗号化の詳細は、「CREATE TABLE」の句encryption_spec」を参照してください。

OF object_type

OF object_type句を指定すると、object_type型のオブジェクト・マテリアライズド・ビューを明示的に作成できます。

関連項目:

OF type_name句の詳細は、「CREATE TABLE」のobject_table」を参照してください。

scoped_table_ref_constraint

SCOPE FOR句を使用すると、参照の有効範囲を1つのオブジェクト表に制限できます。scope_table_nameを持つ表名または列の別名を参照できます。REF列または属性の値はscope_table_nameまたはc_alias内のオブジェクトを指し、その場所にREF列と同じ型のオブジェクト・インスタンスが格納されます。別名を指定する場合は、その別名が、マテリアライズド・ビューを定義する問合せのSELECT構文のリストの列と1対1で対応する必要があります。

関連項目:

詳細は、「REF列のSCOPE制約」を参照してください。

DEFAULT COLLATION

この句を使用して、マテリアライズド・ビューのデフォルトの照合を指定します。デフォルトの照合は、マテリアライズド・ビューを定義する問合せに含まれるすべての文字リテラルについて、導出された照合として使用されます。デフォルトの照合は、マテリアライズド・ビューの列では使用されません。マテリアライズド・ビューの列の照合は、マテリアライズド・ビューの定義副問合せから導出されます。CREATE MATERIALIZED VIEW文は、エラーが発生して失敗するか、その文字列のいずれかが、導出された照合がない定義副問合せの式に基づいている場合、マテリアライズド・ビューは無効な状態で作成されます。

collation_nameには、有効な名前付き照合または疑似照合を指定します。

この句を省略した場合、マテリアライズド・ビューのデフォルトの照合は、マテリアライズド・ビューを含むスキーマの有効スキーマのデフォルトの照合に設定されます。有効なスキーマのデフォルトの照合の詳細は、「ALTER SESSION」のDEFAULT_COLLATION句を参照してください。

DEFAULT COLLATION句を指定できるのは、COMPATIBLE初期化パラメータが12.2以上に設定され、かつMAX_STRING_SIZE初期化パラメータがEXTENDEDに設定されている場合のみです。

マテリアライズド・ビューのデフォルトの照合を変更するには、マテリアライズド・ビューを再作成する必要があります。

マテリアライズド・ビューのデフォルトの照合の制限事項

次の制限事項は、マテリアライズド・ビューのデフォルトの照合を指定する場合に適用されます。

  • マテリアライズド・ビューを定義する問合せにWITH plsql_declarations句が含まれている場合、マテリアライズド・ビューのデフォルトの照合はUSING_NLS_COMPである必要があります。

  • マテリアライズド・ビューを事前作成表に対して作成する場合、表の列の宣言された照合は、定義する問合せから導出された、マテリアライズド・ビューの列の対応する照合と同じである必要があります。

ON PREBUILT TABLE句

ON PREBUILT TABLE句を指定すると、既存の表を再初期化したマテリアライズド・ビューとして登録できます。この句は、データ・ウェアハウス環境において、大きいマテリアライズド・ビューを登録する場合に有効です。その表は、結果マテリアライズド・ビューと同じ名前で、同じスキーマにある必要があります。

マテリアライズド・ビューが削除されると、その既存の表は、1つの表としての元の形に戻ります。

注意:

この句は、表オブジェクトが副問合せの具体化を反映することを前提としています。マテリアライズド・ビューがそのマスター表のデータを正しく反映することを保証するために、この前提が満たされていることを確認することをお薦めします。

ON PREBUILT TABLE句は、次のような使用例で役立ちます。

  • 問合せの結果を示す表があります。この表の作成コストは高く、作成に長時間かかりました。この問合せに対し、マテリアライズド・ビューを作成します。この場合、ON PREBUILT TABLE句を使用することで、問合せを実行してマテリアライズド・ビューのコンテナにデータを移入するコストを回避できます。

  • マテリアライズド・ビューを一時的に破棄しますが、そのマテリアライズド・ビューのコンテナ表は保持します。このために、DROP MATERIALIZED VIEW ... PRESERVE TABLE文を使用します。その後、マテリアライズド・ビューを再度作成することにします。このとき、マテリアライズド・ビューのマスター表に変更がないことが判明しています。この場合、ON PREBUILT TABLE句を使用してこのマテリアライズド・ビューを作成できます。これにより、マテリアライズド・ビューのコンテナ表を作成してデータを移入するコストと時間を節約できます。

ON PREBUILT TABLEを指定すると、I_SNAP$索引が生成されません。この索引は、高速リフレッシュのパフォーマンスを改善します。この索引の利点を活用するには、索引を手動で作成できます。詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

WITH REDUCED PRECISION

WITH REDUCED PRECISIONを指定すると、表またはマテリアライズド・ビューの列の精度が、subqueryによって戻される精度と正確に一致しない場合に、精度の低下が許可されます。

WITHOUT REDUCED PRECISION

WITHOUT REDUCED PRECISIONを指定すると、表またはマテリアライズド・ビューの列の精度が、subqueryによって戻される精度と正確に一致する必要があります。一致しない場合、作成操作は失敗します。これはデフォルトです。

事前作成表の使用の制限事項

事前作成表には、次の制限事項があります。

  • subqueryの各列の別名は、事前作成表の列に対応し、対応する列のデータ型が一致している必要があります。

  • この句を指定する場合、subqueryで参照されない列にデフォルト値も指定しないかぎり、その列にNOT NULL制約は指定できません。

  • ROWIDマテリアライズド・ビューの作成時にON PREBUILT TABLE句を指定することはできません。

physical_properties_clause

physical_properties_clauseの構成要素は、マテリアライズド・ビューと表に対して同一のセマンティクスを持ちます。ただし、次の項で説明する例外および追加事項があります。

physical_properties_clauseの制限事項

マテリアライズド・ビューにはORGANIZATION EXTERNALを指定できません。

deferred_segment_creation

この句を使用すると、このマテリアライズド・ビューのセグメントを作成するタイミングを指定できます。詳細は、「CREATE TABLE」の句deferred_segment_creation」を参照してください。

segment_attributes_clause

segment_attributes_clauseを使用すると、PCTFREEPCTUSEDINITRANSパラメータの値、およびマテリアライズド・ビューの記憶特性の設定、表領域の割当て、ロギングが実行されるかどうかを指定できます。USING INDEX句では、PCTFREEまたはPCTUSEDは指定できません。

TABLESPACE句

マテリアライズド・ビューを作成する表領域を指定します。この句を指定しないと、マテリアライズド・ビューを含むスキーマのデフォルト表領域内にマテリアライズド・ビューが作成されます。

関連項目:

デフォルト値を含むこれらの句の詳細は、「physical_attributes_clause」および「storage_clause」を参照してください。

logging_clause

LOGGINGまたはNOLOGGINGを指定すると、マテリアライズド・ビューのロギング特性を設定できます。ロギング特性は、マテリアライズド・ビューの作成およびDBMS_REFRESHパッケージによって開始される非アトミック・リフレッシュに影響します。デフォルトは、マテリアライズド・ビューが存在する表領域のロギング特性です。

関連項目:

この句の詳細は、logging_clause」を参照してください。アトミック・リフレッシュおよび非アトミック・リフレッシュの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

table_compression

table_compression句を使用すると、ディスクおよびメモリーの使用量を削減するために、データ・セグメントを圧縮するかどうかを指定できます。この句のセマンティクスは、CREATE MATERIALIZED VIEWおよびCREATE TABLE文で同じです。この句のセマンティクスの詳細は、CREATE TABLEのドキュメントのtable_compression句を参照してください。

inmemory_table_clause

inmemory_table_clauseを使用して、インメモリー列ストア(IM列ストア)のマテリアライズド・ビューを有効化または無効化します。この句のセマンティクスは、CREATE TABLEドキュメントのinmemory_table_clauseと同じです。

inmemory_column_clause

inmemory_column_clauseを使用して、IM列ストアの特定のマテリアライズド・ビュー列を無効化し、特定の列のデータ圧縮方法を指定します。この句のセマンティクスは、CREATE TABLEのドキュメントのinmemory_column_clauseと同じですが、次が追加されます。inmemory_column_clauseを指定する場合、マテリアライズド・ビューの各列にcolumn_aliasを指定する必要もあります。

index_org_table_clause

ORGANIZATION INDEXを指定すると、索引構成マテリアライズド・ビューを作成できます。このマテリアライズド・ビューでは、データ行は、マテリアライズド・ビューの主キーに定義した索引に格納されます。次のようなマテリアライズド・ビューの索引構成を指定できます。

  • 読取り専用および更新可能なオブジェクト・マテリアライズド・ビュー。マスター表に主キーが含まれている必要があります。

  • 読取り専用および更新可能な主キー・マテリアライズド・ビュー。

  • 読取り専用のROWIDマテリアライズド・ビュー。

index_org_table_clauseのキーワードおよびパラメータは、CREATE TABLEと同じです。また、次の制限事項があります。

関連項目:

CREATE TABLE」の「index_org_table_clause」を参照してください。

索引構成マテリアライズド・ビューの制限事項

索引構成マテリアライズド・ビューには、次の制限事項があります。

  • CREATE MATERIALIZED VIEWCACHENOCACHECLUSTERまたはON PREBUILT TABLE句は指定できません。

  • index_org_table_clauseには次の制限事項があります。

    • mapping_table_clauseを指定できません。

    • 複合主キーに基づくマテリアライズド・ビューのみにCOMPRESSを指定できます。単一主キーと複合主キーのいずれかに基づくマテリアライズド・ビューにNOCOMPRESSを指定できます。

CLUSTER句

CLUSTER句を指定すると、指定したクラスタの一部としてマテリアライズド・ビューを作成できます。クラスタ化マテリアライズド・ビューは、クラスタの領域割当てを使用します。したがって、CLUSTER句で物理属性またはTABLESPACE句を指定しないでください。

クラスタ化マテリアライズド・ビューの制限事項

CLUSTERを指定すると、materialized_view_propstable_partitioning_clausesを指定できません。

materialized_view_props

これらのプロパティ句を使用すると、既存の表に基づかないマテリアライズド・ビューを定義できます。既存の表に基づくマテリアライズド・ビューを作成するには、ON PREBUILT TABLE句を使用します。

column_properties

column_properties句を使用すると、LOB、ネストした表、VARRAYまたはXMLTypeの列の記憶特性を指定できます。object_type_col_propertiesは、マテリアライズド・ビューには関連しません。

関連項目:

この句のパラメータの指定の詳細は、「CREATE TABLE」を参照してください。

table_partitioning_clauses

table_partitioning_clausesを使用すると、マテリアライズド・ビューを、指定した範囲の値またはハッシュ・ファンクションでパーティション化できます。マテリアライズド・ビューのパーティション化は、表のパーティション化と同じです。

関連項目:

CREATE TABLE」のtable_partitioning_clausesを参照してください。

CACHE | NOCACHE

アクセス頻度の高いデータについて、CACHEは、全表スキャンの実行時にこの表に対して取り出された各ブロックを、バッファ・キャッシュの最低使用頻度(LRU)リストの最高使用頻度側に入れることを指定します。この属性は、小規模な参照表で有効です。NOCACHEは、ブロックをLRUリストの最低使用頻度側に入れることを指定します。

注意:

NOCACHEは、storage_clauseKEEPを指定したマテリアライズド・ビューには、影響しません。

関連項目:

CACHEまたはNOCACHEの指定の詳細は、「CREATE TABLE」を参照してください。

parallel_clause

parallel_clauseを使用すると、マテリアライズド・ビューへのパラレル操作をサポートするかどうかを指定できます。作成後にマテリアライズド・ビューに対する問合せおよびDMLのデフォルトの並列度を設定します。

この句の詳細は、「CREATE TABLE」のparallel_clause」を参照してください。

build_clause

build_clauseを指定すると、マテリアライズド・ビューをいつ移入するかを指定できます。

IMMEDIATE

IMMEDIATEを指定すると、マテリアライズド・ビューにすぐに移入できます。これはデフォルトです。

DEFERRED

DEFERREDを指定すると、次のREFRESH操作でマテリアライズド・ビューに移入できます。最初の(遅延)リフレッシュは、常に、完全リフレッシュである必要があります。それ以前のマテリアライズド・ビューの値はUNUSABLEであるため、クエリー・リライトには使用できません。

USING INDEX句

USING INDEX句を使用すると、マテリアライズド・ビューのデータをメンテナンスするために使用されるデフォルトの索引のINITRANSパラメータおよびSTORAGEパラメータの値を変更できます。USING INDEXが設定されていない場合、この索引にはデフォルト値が使用されます。デフォルトの索引は、マテリアライズド・ビューの増分リフレッシュ(FAST)を高速に処理するために使用されます。

USING INDEX句の制限事項

この句には、PCTUSEDパラメータを指定できません。

USING NO INDEX句

USING NO INDEX句を指定すると、デフォルトの索引の作成を抑制できます。CREATE INDEX文を使用することによって、代替する索引を明示的に作成できます。USING NO INDEXを指定し、高速リフレッシュ(REFRESH FAST)でマテリアライズド・ビューを作成する場合は、このような索引を作成する必要があります。

create_mv_refresh

create_mv_refresh句を使用すると、マテリアライズド・ビューのデフォルトのリフレッシュ方法、リフレッシュ・モードおよびリフレッシュ時刻を指定できます。マテリアライズド・ビューのマスター表が変更された場合、マテリアライズド・ビューのデータを更新し、その時点でマスター表にあるデータを正確に反映させる必要があります。この句によって、自動的にマテリアライズド・ビューをリフレッシュする日時をスケジューリングし、リフレッシュの方法およびモードを指定できます。

同期リフレッシュの制限事項

同期リフレッシュの方法を使用する場合は、ON DEMANDおよびUSING TRUSTED CONSTRAINTSを指定する必要があります。

注意:

この句では、デフォルトのリフレッシュ・オプションのみを設定します。リフレッシュを実際に行う手順は、『Oracle Database管理者ガイド』および『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

関連項目:

FAST句

FASTを指定すると、高速リフレッシュ方法が使用されます。この方法では、マスター表に対して行われた変更に従ってリフレッシュを実行します。従来型DML変更の場合、変更は、マスター表に関連付けられたマテリアライズド・ビュー・ログに格納されます。ダイレクト・パス・インサート操作の変更は、ダイレクト・ローダー・ログに格納されます。

REFRESH FASTを指定すると、マテリアライズド・ビューのマスター表のマテリアライズド・ビュー・ログが存在していない場合に、CREATE文は正常に実行されません。ダイレクト・パス・インサートが行われると、ダイレクト・ローダー・ログが自動的に作成されます。手動での操作は必要ありません。

従来型DMLの変更の場合も、ダイレクト・パス・インサート操作の場合も、他の条件によって、高速リフレッシュへのマテリアライズド・ビューの適応性が制限されることがあります。

FASTリフレッシュの制限事項

FASTリフレッシュには、次の制限事項があります。

  • 作成時にFASTリフレッシュを指定した場合、作成するマテリアライズド・ビューは高速リフレッシュに適応することが検証されています。ALTER MATERIALIZED VIEW文でリフレッシュ方法をFASTに変更した場合、これは検証されていません。マテリアライズド・ビューが高速リフレッシュに適応しない場合、このビューをリフレッシュしようとするとエラーが戻されます。

  • 定義する問合せに分析ファンクションまたはXMLTableファンクションが含まれている場合、マテリアライズド・ビューは高速リフレッシュに適応しません。

  • 定義する問合せで、XMLIndex索引が定義されている表を参照する場合、マテリアライズド・ビューは高速リフレッシュに適格となりません。

  • 暗号化されている列がある場合は、マテリアライズド・ビューを高速リフレッシュできません。

関連項目:

COMPLETE句

COMPLETEを指定すると、完全リフレッシュ方法が使用されます。この方法は、マテリアライズド・ビューを定義する問合せを実行することによって実装されます。完全リフレッシュを要求すると、高速リフレッシュが実行可能であっても、完全リフレッシュが実行されます。

FORCE句

FORCEを指定すると、リフレッシュ時に、高速リフレッシュが可能な場合は高速リフレッシュを実行し、可能でない場合は完全リフレッシュを実行するように指定できます。リフレッシュ方法(FASTCOMPLETEまたはFORCE)を指定しないと、デフォルトでFORCEが指定されます。

ON COMMIT句

ON COMMITを指定すると、マテリアライズド・ビューのマスター表に対するトランザクションをコミットするときに、必ずリフレッシュが実行されるように指定できます。この句を指定すると、リフレッシュ操作がコミット処理の一部として行われるため、コミットの完了に時間がかかります。

指定できるのは、ON COMMITON DEMANDおよびON STATEMENTのいずれか1つの句のみです。ON COMMITを指定した場合、START WITHまたはNEXTを指定できません。

ON COMMITのリフレッシュの制限事項:

ON COMMIT句には、次の制限事項があります。

  • この句は、オブジェクト型またはOracleが提供する型を含むマテリアライズド・ビューについてはサポートしていません。

  • この句はリモート表を使用するマテリアライズド・ビューではサポートされていません。

  • この句を指定すると、それ以降は、このマテリアライズド・ビューのすべてのマスター表で分散トランザクションが実行できなくなります。たとえば、リモート表から選択してマスターに挿入することはできません。ON DEMAND句の場合は、それ以降のマスター表での分散トランザクションに、このような制限はありません。

ON DEMAND句

ON DEMANDを指定すると、3つのDBMS_MVIEWリフレッシュ・プロシージャのうちのいずれかを使用してユーザーが手動でリフレッシュしないかぎりデータベースによってマテリアライズド・ビューがリフレッシュされないように指定できます。

指定できるのは、ON COMMITON DEMANDおよびON STATEMENTのいずれか1つの句のみです。これら3つの句をすべて省略すると、ON DEMANDがデフォルトになります。このデフォルト設定は、同じCREATE MATERIALIZED VIEW文または後続のALTER MATERIALIZED VIEW文のいずれかにSTART WITH句またはNEXT句を指定することで上書きできます。

START WITHおよびNEXTは、ON DEMANDより優先されます。このため、START WITHまたはNEXTを指定したときは、ほとんどの場合、ON DEMANDを指定しても意味がありません。

関連項目:

ON STATEMENT句

ON STATEMENTを指定すると、マテリアライズド・ビューの実表のいずれかでDML操作が実行されるたびに自動リフレッシュが発生します。

指定できるのは、ON COMMITON DEMANDおよびON STATEMENTのいずれか1つの句のみです。ON STATEMENTは、マテリアライズド・ビューを作成する場合にのみ指定できます。ON STATEMENTリフレッシュを使用するマテリアライズド・ビューは後から変更できません。

ON STATEMENTのリフレッシュの制限事項

ON STATEMENT句には、次の制限事項があります。

  • この句は、高速リフレッシュが可能なマテリアライズド・ビューでのみ使用できます。ON STATEMENT句は、REFRESH FAST句とともに指定する必要があります。

  • マテリアライズド・ビューを定義する問合せで参照する実表は、スター・スキーマまたはスノーフレーク・スキーマ・モデルを使用する図形結合で接続する必要があります。問合せには、1つのみの一元化されたファクト表および1つ以上のディメンション表を含み、関連する結合表のすべてのペアは主キーと外部キーの制約を使用する必要があります。

    • スノーフレーク・モデルの深さに制限はありません。

    • RELYモードにはこの制約があります。ただし、RELY制約を使用するマテリアライズド・ビューの作成中に、USING TRUSTED CONSTRAINT句を含める必要があります。

  • マテリアライズド・ビューを定義する問合せには、ファクト表のROWID列を含める必要があります。

  • マテリアライズド・ビューを定義する問合せには、非表示列、ANSI結合構文、複合問合せ、実表としてのインライン・ビュー、複合主キー、LONG列およびLOB列のいずれも含めることはできません。

  • ON STATEMENTリフレッシュ・モードを使用する既存のマテリアライズド・ビューの定義は変更できません。

  • 既存のマテリアライズド・ビューは変更できないため、ON STATEMENTリフレッシュを有効にできません。

  • 次の操作により、ON STATEMENTリフレッシュが指定されたマテリアライズド・ビューは使用禁止となります。

    • マテリアライズド・ビューのベースとなっている1つ以上のディメンション表に対するUPDATE操作

    • すべての実表に対するパーティション・メンテナンス操作およびTRUNCATE操作

      ただし、ON STATEMENTリフレッシュ・モードが指定されたマテリアライズド・ビューはパーティション化できます。

  • ON COMMIT句に適用されるすべての制限はON STATEMENTに適用されます。

START WITH句

最初の自動リフレッシュ時刻を表す日時式を指定します。

NEXT句

自動リフレッシュの間隔を計算するための日時式を指定します。

START WITH値およびNEXT値は、将来の時刻に評価される値です。START WITH値を省略した場合、Oracle Databaseはマテリアライズド・ビューの作成時刻に対してNEXT式を評価することによって、最初の自動リフレッシュ時刻を判断します。START WITH値を指定し、NEXT値を指定しない場合、Oracle Databaseは1回のみマテリアライズド・ビューをリフレッシュします。START WITH値およびNEXT値のどちらも指定しない場合、またはcreate_mv_refreshを指定しない場合は、マテリアライズド・ビューは自動リフレッシュされません。

WITH PRIMARY KEY句

WITH PRIMARY KEYを指定すると、主キー・マテリアライズド・ビューを作成できます。これはデフォルトであり、WITH ROWIDの項で説明する場合を除き、すべての場合に使用する必要があります。主キー・マテリアライズド・ビューを使用すると、高速リフレッシュに対するマテリアライズド・ビューの適応性に影響せずに、マテリアライズド・ビューのマスター表を再編成できます。マスター表には、使用可能な主キー制約が定義されている必要があり、マテリアライズド・ビューを定義する問合せでは、すべての主キー列が直接指定される必要があります。定義する問合せでは、UPPERなどのファンクションへの引数として主キー列を指定できません。

主キー・マテリアライズド・ビューの制限事項

この句は、オブジェクト・マテリアライズド・ビューには指定できません。WITH OBJECT IDを指定してマテリアライズドされたオブジェクトは暗黙的にリフレッシュされます。

関連項目:

主キー・マテリアライズド・ビューの詳細は、『Oracle Database管理者ガイド』および「主キー・マテリアライズド・ビューの作成: 例」を参照してください。

WITH ROWID句

WITH ROWIDを指定すると、ROWIDマテリアライズド・ビューを作成できます。マテリアライズド・ビューがマスター表の主キー列をすべて含まない場合に、ROWIDマテリアライズド・ビューは有効です。ROWIDマテリアライズド・ビューは、単一表を基にしている必要があり、次のいずれも含むことができません。

  • distinctまたは集計ファンクション

  • GROUP BYまたは CONNECT BY

  • 副問合せ

  • 結合

  • 集合演算

WITH ROWID句は、定義する問合せに複数のマスター表がある場合は効果がありません。

完全リフレッシュが行われるまでは、マスター表の再編成後に、ROWIDマテリアライズド・ビューは高速リフレッシュされません。

ROWIDマテリアライズド・ビューの制限事項

この句は、オブジェクト・マテリアライズド・ビューには指定できません。WITH OBJECT IDを指定してマテリアライズドされたオブジェクトは暗黙的にリフレッシュされます。

USING ROLLBACK SEGMENT句

自動UNDOモードではロールバック・セグメントではなくUNDO表領域が使用されるため、データベースが自動UNDOモードの場合、この句は無効です。自動UNDOモードを使用することをお薦めします。この句は、ロールバック・セグメントが使用される以前のバージョンのOracle Databaseが含まれるレプリケーション環境との下位互換性のためにサポートされています。

rollback_segmentに、マテリアライズド・ビューのリフレッシュ中に使用するリモート・ロールバック・セグメントを指定します。

DEFAULT

DEFAULTを使用すると、使用するロールバック・セグメントを自動的に選択できます。DEFAULTを指定した場合、rollback_segmentは指定できません。DEFAULTは、マテリアライズド・ビューを(作成ではなく)変更する場合に有効です。

関連項目:

ALTER MATERIALIZED VIEW

MASTER

MASTERを使用すると、個々のマテリアライズド・ビュー用のリモート・マスター・サイトで使用されるリモート・ロールバック・セグメントを指定できます。

LOCAL

LOCALを使用すると、マテリアライズド・ビューが含まれているローカル・リフレッシュ・グループで使用されるリモート・ロールバック・セグメントを指定できます。これはデフォルトです。

関連項目:

DBMS_REFRESHパッケージを使用するローカル・マテリアライズド・ビューのロールバック・セグメントの指定の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

rollback_segmentを指定しない場合、使用するロールバック・セグメントが自動的に選択されます。各マテリアライズド・ビューに対して1つのマスター・ロールバック・セグメントが格納され、マテリアライズド・ビューの作成およびリフレッシュ時に検証されます。複合マテリアライズド・ビューの場合、マスター・ロールバック・セグメントの指定は無視されます。

USING ... CONSTRAINTS句

USING ... CONSTRAINTS句を使用すると、リフレッシュ操作中にOracle Databaseでより多くのリライト・オプションを選択でき、リフレッシュをより効果的に実行できます。リフレッシュ操作中に、適用される制約のみに依存するのではなく、適用されていない制約(RELY状態のディメンションの関係や制約など)を使用できます。

USING TRUSTED CONSTRAINTS句では、NULL以外の仮想プライベート・データベース(VPD)ポリシーを持つ表の最上位にマテリアライズド・ビューを作成できます。この場合、マテリアライズド・ビューが適切に動作することを確認する必要があります。マテリアライズド・ビューの結果は、VPDポリシーによってフィルタ処理された行と列に基づいて計算されます。したがって、正しい結果を得るには、マテリアライズド・ビュー定義をVPDポリシーで調整する必要があります。USING TRUSTED CONSTRAINTS句を指定しないと、マスター表のVPDポリシーにより、マテリアライズド・ビューを作成できなくなります。

注意:

USING TRUSTED CONSTRAINTS句を指定すると、データベース管理者が信頼できると宣言したが、データベースで検証されていないディメンションおよび制約の情報を、Oracle Databaseで使用できます。ディメンションおよび制約の情報が有効であると、パフォーマンスを向上できる場合があります。ただし、この情報が無効であると、正常な状態が戻されても、リフレッシュ・プロシージャによってマテリアライズド・ビューが破損する場合があります。

この句を指定しない場合、USING ENFORCED CONSTRAINTSがデフォルトになります。

NEVER REFRESH句

NEVER REFRESHを指定すると、Oracle Databaseのリフレッシュ・メカニズムまたはパッケージ・プロシージャを使用したマテリアライズド・ビューのリフレッシュを回避できます。このようなプロシージャから発行された、マテリアライズド・ビューに対するREFRESH文は、無視されます。この句を指定すると、マテリアライズド・ビューでDML操作を実行できます。この句を無効にするには、ALTER MATERIALIZED VIEW ... REFRESH文を発行する必要があります。

evaluation_edition_clause

subqueryでエディショニングされたオブジェクトを参照する場合は、この句を指定する必要があります。この句を使用すると、エディショニングされたオブジェクトの名前解決時に検索されたエディション(評価エディション)を指定できます。

  • CURRENT EDITIONを指定すると、このDDL文が実行されるエディションを検索できます。

  • EDITION editionを指定すると、editionを検索できます。

  • NULL EDITIONを指定することは、evaluation_edition_clauseを省略することと同じです。

evaluation_edition_clauseを省略すると、エディショニングされたオブジェクトは名前解決時に認識されなくなるためエラーが発生します。評価エディションを削除すると、マテリアライズド・ビューが無効になります。

関連項目:

マテリアライズド・ビューの評価エディションを指定する方法の詳細は、『Oracle Database開発ガイド』を参照してください。

{ ENABLE | DISABLE } ON QUERY COMPUTATION

この句を使用すると、リアルタイムのマテリアライズド・ビューまたは通常のビューを作成できます。リアルタイムのマテリアライズド・ビューでは、データ変更によりマテリアライズド・ビューがその実表と同期していない場合も、ユーザーの問合せに対して最新のデータを提供します。マテリアライズド・ビューを変更するかわりに、オプティマイザはマテリアライズド・ビューの既存の行とログ・ファイル(マテリアライズド・ビュー・ログまたはダイレクト・ローダー・ログ)に記録された変更を結合する問合せを記述します。これは、問合せ時計算と呼ばれます。

  • ENABLE ON QUERY COMPUTATIONを指定し、問合せ時計算を有効にすると、リアルタイムのマテリアライズド・ビューを作成できます。これにより、SELECT文でFRESH_MVヒントを指定して、マテリアライズド・ビューから直接最新データを問い合せることができます。マテリアライズド・ビューがクエリー・リライトに対しても有効化されている場合、クエリー・リライト中に自動的に問合せ時計算が行われます。

  • DISABLE ON QUERY COMPUTATIONを指定し、問合せ時計算を無効にすると、通常のマテリアライズド・ビューを作成できます。これはデフォルトです。

リアルタイムのマテリアライズド・ビューの制限事項

リアルタイムのマテリアライズド・ビューには、次の制限事項があります。

  • リアルタイムのマテリアライズド・ビューは、実表に対して作成された1つ以上のマテリアライズド・ビュー・ログが使用禁止になっているか、存在しない場合は、使用できません。

  • リアルタイムのマテリアライズド・ビューは、ホーム外のリフレッシュ、ログベースのリフレッシュまたはパーティション・チェンジ・トラッキング(PCT)リフレッシュを使用してリフレッシュできる必要があります。

  • REFRESH ON COMMITモードのマテリアライズド・ビューをリアルタイムのマテリアライズド・ビューにすることはできません。

  • リアルタイムのマテリアライズド・ビューが、1つ以上のベース・マテリアライズド・ビューの上位に定義されているネステッド・マテリアライズド・ビューである場合、すべてのベース・マテリアライズド・ビューが最新である場合にのみ、クエリー・リライトが発生します。1つ以上のベース・マテリアライズド・ビューが失効している場合、クエリー・リライトは、このリアルタイムのマテリアライズド・ビューを使用して実行されません。

  • リアルタイムのマテリアライズド・ビューに直接アクセスする問合せのカーソルは共有されません。

関連項目:

query_rewrite_clause

query_rewrite_clauseを使用すると、マテリアライズド・ビューがクエリー・リライトに適格であるかどうかを指定できます。

ENABLE句

ENABLEを指定すると、クエリー・リライトでマテリアライズド・ビューを使用可能にできます。unusable_editions_clauseを同時に指定すると、使用禁止エディションでマテリアライズド・ビューがクエリー・リライトに使用されなくなります。

クエリー・リライトの有効化の制限事項

クエリー・リライトの有効化には、次の制限事項があります。

  • マテリアライズド・ビューのすべてのユーザー定義ファンクションがDETERMINISTICである場合のみ、クエリー・リライトを使用可能にできます。

  • 文内の式が反復可能な場合のみ、クエリー・リライトを使用可能にできます。たとえば、CURRENT_TIMEUSER、順序値(たとえば、CURRVALまたはNEXTVAL疑似列)、またはSAMPLE句(マテリアライズド・ビューの変更内容と異なる行をサンプルとして抽出します)を含めることはできません。

注意:

  • クエリー・リライトでのマテリアライズド・ビューの使用は、デフォルトでは無効です。この句を指定して、マテリアライズド・ビューをクエリー・リライトに適用できるようにする必要があります。

  • マテリアライズド・ビューを作成した後は、DBMS_STATSパッケージを使用して、その統計情報を収集する必要があります。クエリー・リライトを最適化するために、このパッケージで生成した統計情報が必要です。

関連項目:

DISABLE句

DISABLEを指定すると、マテリアライズド・ビューはクエリー・リライトに適格でなくなります。使用禁止にしたマテリアライズド・ビューはリフレッシュ可能です。

unusable_editions_clause

この句を使用すると、1つ以上のエディションでマテリアライズド・ビューがクエリー・リライトの対象でないことを指定できます。この句は、ENABLE句またはDISABLE句を指定しているかどうかにかかわらず指定できます。DISABLE句を指定すると、ALTER MATERIALIZED VIEW ... ENABLE QUERY REWRITE文を使用して、マテリアライズド・ビューが後にクエリー・リライトに使用できるようにされたときに、この句の効果が現れるようになります。

UNUSABLE BEFORE句

この句を使用すると、先行エディションでマテリアライズド・ビューがクエリー・リライトに適格でないことを指定できます。

  • CURRENT EDITIONを指定すると、現在のエディションの先行エディションでマテリアライズド・ビューがクエリー・リライトに適格でなくなります。

  • EDITION editionを指定すると、指定したeditionの先行エディションでマテリアライズド・ビューが適格でなくなります。

UNUSABLE BEGINNING WITH句

この句を使用すると、特定のエディションとそれ以降のエディションでマテリアライズド・ビューがクエリー・リライトに適格でなくなることを指定できます。

  • CURRENT EDITIONを指定すると、現在のエディションとそれ以降のエディションで、マテリアライズド・ビューがクエリー・リライトに適格ではなくなります。

  • EDITION editionを指定すると、指定したエディションとそれ以降のエディションで、マテリアライズド・ビューがクエリー・リライトに適格ではなくなります。

  • NULL EDITIONを指定することは、UNUSABLE BEGINNING WITH句を省略することと同じです。

マテリアライズド・ビューは、クエリー・リライトに適格ではない各エディションに対する依存関係があります。これに該当するエディションが後に削除されると、依存関係が削除されます。ただし、そのマテリアライズド・ビューが無効にされることはありません。

AS副問合せ

マテリアライズド・ビューを定義する問合せを指定します。マテリアライズド・ビューの作成時に、この副問合せが実行され、実行結果がマテリアライズド・ビューに格納されます。この副問合せは、有効なSQL副問合せである必要があります。ただし、すべての副問合せに高速リフレッシュを適用できるわけではなく、すべての副問合せがクエリー・リライトに使用できるわけでもありません。

マテリアライズド・ビューを定義する問合せの注意事項

マテリアライズド・ビューには、次の注意事項があります。

  • BUILD DEFERREDを指定する場合、定義する問合せはすぐには実行されません。

  • マテリアライズド・ビューを定義する問合せのFROM句に指定する各表およびビューを、それを含むスキーマで修飾することをお薦めします。

  • 仮想プライベート・データベース(VPD)ポリシーを持つマスター表から定義問合せが選択するマテリアライズド・ビューを作成するには、REFRESH USING TRUSTED CONSTRAINTS句を指定する必要があります。

マテリアライズド・ビューを定義する問合せの制限事項

マテリアライズド・ビュー問合せには、次の制限事項があります。

  • マテリアライズド・ビューを定義する問合せでは、ユーザーSYSが所有する表、ビューまたはマテリアライズド・ビューから選択できますが、このようなマテリアライズド・ビューに対してQUERY REWRITEは使用できません。

  • マテリアライズド・ビューを定義する問合せは、V$ビューまたはGV$ビューから選択できません。

  • マテリアライズド・ビューを定義するとき、定義する問合せのSELECT構文のリストに副問合せを使用することはできません。WHERE句など、定義問合せのその他の場所に副問合せを記述することは可能です。

  • マテリアライズド・ビューを定義する問合せでは、flashback_query_clauseAS OF句を使用することはできません。

  • GROUP BY句を含むマテリアライズド結合ビューおよびマテリアライズド集計ビューは、索引構成表からは選択できません。

  • マテリアライズド・ビューにLONGまたはLONG RAWのデータ型の列を含めることはできません。

  • マテリアライズド・ビューに仮想列を含めることはできません。

  • 一時表に対しては、マテリアライズド・ビュー・ログを作成できません。そのため、定義する問合せが一時表を参照する場合、マテリアライズド・ビューは高速リフレッシュ(FAST)に適応せず、この文でQUERY REWRITEを指定することもできません。

  • 定義する問合せのFROM句が他のマテリアライズド・ビューを参照する場合、この文で作成するマテリアライズド・ビューのリフレッシュの前に、定義する問合せで参照されているマテリアライズド・ビューを常にリフレッシュしておく必要があります。

  • 定義する問合せ内に結合式を持つマテリアライズド・ビューは、XMLデータ型の列を持つことができません。XMLデータ型には、XMLTypeおよびURIデータ型の列が含まれます。

クエリー・リライトが可能なマテリアライズド・ビューを作成する場合、次の制限があります。

  • 定義する問合せには、ROWNUMUSERSYSDATE、リモート表、順序、または(データベースやパッケージ状態の書込みまたは読取りを行う)PL/SQLファンクションに対する直接またはビューを介した参照を含めることはできません。

  • マテリアライズド・ビューおよびマテリアライズド・ビューのマスター表はリモートにできません。

マテリアライズド・ビュー・ログを使用した高速リフレッシュ、またはステージング・ログを使用した同期リフレッシュにマテリアライズド・ビューが適格になるようにする場合は、いくつかの追加の制限事項が適用されます。

関連項目:

次の例では、「CREATE MATERIALIZED VIEW LOG」の「例」で作成したマテリアライズド・ログが必要です。

単純なマテリアライズド・ビューの作成: 例

次の文は、hrスキーマのemployeesおよび表に基づいた非常に単純なマテリアライズド・ビューを作成します。

CREATE MATERIALIZED VIEW mv1 AS SELECT * FROM hr.employees;

デフォルトでは、REFRESH ON DEMANDのみが指定されている主キー・マテリアライズド・ビューが作成されます。マテリアライズド・ビュー・ログがemployeesに存在する場合は、高速リフレッシュできるようにmv1を変更できます。このようなログが存在しない場合は、mv1の完全リフレッシュのみが可能です。Oracle Databaseでは、mv1に対してデフォルトの記憶域プロパティが使用されます。この操作に必要な権限は、CREATE MATERIALIZED VIEWシステム権限と、hr.employeesに対するREADまたはSELECTオブジェクト権限のみです。

副問合せマテリアライズド・ビューの作成: 例

次の文は、remoteデータベースのshスキーマのcustomersおよびcountries表に基づいた副問合せマテリアライズド・ビューを作成します。

CREATE MATERIALIZED VIEW foreign_customers
   AS SELECT * FROM sh.customers@remote cu
   WHERE EXISTS
     (SELECT * FROM sh.countries@remote co
      WHERE co.country_id = cu.country_id);

マテリアライズド集計ビューの作成: 例

次の文は、サンプル表sh.salesにマテリアライズド集計ビューを作成して移入し、デフォルトのリフレッシュ方法、モードおよび時刻を指定します。これは、「高速リフレッシュ用のマテリアライズド・ビュー・ログの作成: 例」で作成したマテリアライズド・ビュー・ログと、ここに示す2つの追加ログを使用します。

CREATE MATERIALIZED VIEW LOG ON times
   WITH ROWID, SEQUENCE (time_id, calendar_year)
   INCLUDING NEW VALUES;

CREATE MATERIALIZED VIEW LOG ON products
   WITH ROWID, SEQUENCE (prod_id)
   INCLUDING NEW VALUES;

CREATE MATERIALIZED VIEW sales_mv
   BUILD IMMEDIATE
   REFRESH FAST ON COMMIT
   AS SELECT t.calendar_year, p.prod_id, 
      SUM(s.amount_sold) AS sum_sales
      FROM times t, products p, sales s
      WHERE t.time_id = s.time_id AND p.prod_id = s.prod_id
      GROUP BY t.calendar_year, p.prod_id;

マテリアライズド結合ビューの作成: 例

次の文は、サンプル・スキーマshの表を使用して、マテリアライズド集計ビューsales_by_month_by_stateを作成して移入します。マテリアライズド・ビューは、この文が正しく実行されるとすぐに移入されます。デフォルトで、次のマテリアライズド・ビューを定義する問合せを再実行することによって、後続のリフレッシュが行われます。

CREATE MATERIALIZED VIEW sales_by_month_by_state
     TABLESPACE example
     PARALLEL 4
     BUILD IMMEDIATE
     REFRESH COMPLETE
     ENABLE QUERY REWRITE
     AS SELECT t.calendar_month_desc, c.cust_state_province,
        SUM(s.amount_sold) AS sum_sales
        FROM times t, sales s, customers c
        WHERE s.time_id = t.time_id AND s.cust_id = c.cust_id
        GROUP BY t.calendar_month_desc, c.cust_state_province;

事前作成したマテリアライズド・ビューの作成: 例

次の文は、既存の集計表sales_sum_tableに対するマテリアライズド集計ビューを作成します。

CREATE TABLE sales_sum_table
   (month VARCHAR2(8), state VARCHAR2(40), sales NUMBER(10,2));

CREATE MATERIALIZED VIEW sales_sum_table
   ON PREBUILT TABLE WITH REDUCED PRECISION
   ENABLE QUERY REWRITE
   AS SELECT t.calendar_month_desc AS month, 
             c.cust_state_province AS state,
             SUM(s.amount_sold) AS sales
      FROM times t, customers c, sales s
      WHERE s.time_id = t.time_id AND s.cust_id = c.cust_id
      GROUP BY t.calendar_month_desc, c.cust_state_province;

前述の例では、マテリアライズド・ビューは事前作成表と同じ名前を持ち、かつ事前作成表と同じデータ型で同じ数の列を持ちます。WITH REDUCED PRECISION句によって、マテリアライズド・ビュー列の精度と副問合せによって戻された値の精度の違いは許可されます。

主キー・マテリアライズド・ビューの作成: 例

次の文は、サンプル表oe.product_informationに主キー・マテリアライズド・ビューcatalogを作成します。

CREATE MATERIALIZED VIEW catalog   
   REFRESH FAST START WITH SYSDATE NEXT SYSDATE + 1/4096 
   WITH PRIMARY KEY 
   AS SELECT * FROM product_information;  

ROWIDマテリアライズド・ビューの作成: 例

次の文は、サンプル表oe.ordersにROWIDマテリアライズド・ビューを作成します。

CREATE MATERIALIZED VIEW order_data REFRESH WITH ROWID 
   AS SELECT * FROM orders; 

マテリアライズド・ビューの定期的リフレッシュ: 例

次の文は、主キー・マテリアライズド・ビューemp_dataを作成し、サンプル表hr.employeesのデータを移入します。

CREATE MATERIALIZED VIEW LOG ON employees
   WITH PRIMARY KEY
   INCLUDING NEW VALUES;

CREATE MATERIALIZED VIEW emp_data 
   PCTFREE 5 PCTUSED 60 
   TABLESPACE example 
   STORAGE (INITIAL 50K)
   REFRESH FAST NEXT sysdate + 7 
   AS SELECT * FROM employees; 

前述の文にはSTART WITHパラメータが指定されていないため、Oracle Databaseでは、現行のSYSDATEを使用してNEXT値が評価され、最初の自動リフレッシュ時刻が判断されます。従業員表のマテリアライズド・ビュー・ログが作成されたため、マテリアライズド・ビュー作成の7日後から、7日ごとにマテリアライズド・ビューの高速リフレッシュが実行されます。

マテリアライズド・ビューが高速リフレッシュを行うための条件と一致するため、高速リフレッシュが行われます。また、前述の文では、マテリアライズド・ビューをメンテナンスするためにデータベースで使用される表の記憶特性も設定しています。

マテリアライズド・ビューの自動リフレッシュ時刻: 例

次の文は、remoteおよびlocalデータベースの従業員表を問い合せる複合マテリアライズド・ビューall_customersを作成します。

CREATE MATERIALIZED VIEW all_customers
   PCTFREE 5 PCTUSED 60 
   TABLESPACE example 
   STORAGE (INITIAL 50K) 
   USING INDEX STORAGE (INITIAL 25K)
   REFRESH START WITH ROUND(SYSDATE + 1) + 11/24 
   NEXT NEXT_DAY(TRUNC(SYSDATE), 'MONDAY') + 15/24 
   AS SELECT * FROM sh.customers@remote 
         UNION
      SELECT * FROM sh.customers@local; 

このマテリアライズド・ビューは、翌日の午前11:00に自動的にリフレッシュされ、その後は、毎週月曜日の午後3:00にリフレッシュされます。デフォルトのリフレッシュ方法は、FORCEです。定義する問合せにはUNION演算子が含まれますが、この演算子は高速リフレッシュでサポートされていないため、自動的に完全リフレッシュが実行されます。

前述の文では、マテリアライズド・ビューおよびこのマテリアライズド・ビューをメンテナンスするために使用される索引の記憶特性を次のように設定しています。

  • 最初のSTORAGE句で、マテリアライズド・ビューの1番目と2番目のエクステントのサイズをそれぞれ50KBに設定します。

  • 次のUSING INDEX句付きのSTORAGE句では、索引の1番目と2番目のエクステントのサイズをそれぞれ25KBに変更します。

高速リフレッシュ可能なマテリアライズド・ビューの作成: 例

次の文は、product_informationおよびinventories表からWHERE条件で戻される行を制限するUNION集合演算子を使用して、サンプル・スキーマoeorder_items表から列を選択する高速リフレッシュが可能なマテリアライズド・ビューを作成します。order_itemsおよびproduct_informationのマテリアライズド・ビュー・ログは、CREATE MATERIALIZED VIEW LOG「例」の項で作成されたものです。また、次の例では、oe.inventoriesのマテリアライズド・ビュー・ログが必要です。

CREATE MATERIALIZED VIEW LOG ON inventories
   WITH (quantity_on_hand);

CREATE MATERIALIZED VIEW warranty_orders REFRESH FAST AS
  SELECT order_id, line_item_id, product_id FROM order_items o
    WHERE EXISTS
    (SELECT * FROM inventories i WHERE o.product_id = i.product_id
      AND i.quantity_on_hand IS NOT NULL)
  UNION
    SELECT order_id, line_item_id, product_id FROM order_items
    WHERE quantity > 5; 

マテリアライズド・ビューwarranty_ordersには、order_items(product_idを結合列とする)およびinventories(quantity_on_handをフィルタ列とする)で定義されたマテリアライズド・ビュー・ログが必要です。「マテリアライズド・ビュー・ログに対するフィルタ列の指定: 例」および「マテリアライズド・ビュー・ログに対する結合列の指定: 例」を参照してください。

ネステッド・マテリアライズド・ビューの作成: 例

次の例は、前述の例のマテリアライズド・ビューをマスター表として使用し、サンプル・スキーマoeの特定の販売員で構成されるマテリアライズド・ビューを作成します。

CREATE MATERIALIZED VIEW my_warranty_orders
   AS SELECT w.order_id, w.line_item_id, o.order_date
   FROM warranty_orders w, orders o
   WHERE o.order_id = o.order_id
   AND o.sales_rep_id = 165;