プライマリ・コンテンツに移動
Oracle® Database SQL言語リファレンス
11gリリース2 (11.2)
B56299-08
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

CREATE MATERIALIZED VIEW

用途

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


注意:

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

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


関連項目:

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

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


関連項目:

  • 「ALTER MATERIALIZED VIEW」

  • データ・ウェアハウスのサポートに使用するマテリアライズド・ビューの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。


前提条件

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


関連項目:

  • これらの権限については、「CREATE TABLE」「CREATE VIEW」および「CREATE INDEX」を参照してください。

  • レプリケーションのためのマテリアライズド・ビューの作成についての前提条件は、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

  • データ・ウェアハウスのためのマテリアライズド・ビューの作成についての前提条件は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。


構文

create_materialized_view::=

create_materialized_view.gifの説明が続きます。
図「create_materialized_view.gif」の説明

(scoped_table_ref_constraint::=physical_properties ::=materialized_view_props::=physical_attributes_clause::=create_mv_refresh::=subquery::=を参照)

scoped_table_ref_constraint::=

scoped_table_ref_constraint.gifの説明が続きます。
図「scoped_table_ref_constraint.gif」の説明

physical_properties::=

physical_properties.gifの説明が続きます。
図「physical_properties.gif」の説明

(deferred_segment_creation::=segment_attributes_clause::=table_compression ::=index_org_table_clause::=を参照)

materialized_view_props::=

materialized_view_props.gifの説明が続きます。
図「materialized_view_props.gif」の説明

(column_properties ::=table_partitioning_clauses ::=(「CREATE TABLE」構文の項)、parallel_clause::=build_clause::=を参照)

index_org_table_clause::=

index_org_table_clause.gifの説明が続きます。
図「index_org_table_clause.gif」の説明

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

key_compression::=

key_compression.gifの説明が続きます。
図「key_compression.gif」の説明

index_org_overflow_clause::=

index_org_overflow_clause.gifの説明が続きます。
図「index_org_overflow_clause.gif」の説明

(segment_attributes_clause::=を参照)

create_mv_refresh::=

create_mv_refresh.gifの説明が続きます。
図「create_mv_refresh.gif」の説明

deferred_segment_creation::=

deferred_segment_creation.gifの説明が続きます。
図「deferred_segment_creation.gif」の説明

segment_attributes_clause::=

segment_attributes_clause.gifの説明が続きます。
図「segment_attributes_clause.gif」の説明

(physical_attributes_clause ::=logging_clause::=を参照)

physical_attributes_clause::=

physical_attributes_clause.gifの説明が続きます。
図「physical_attributes_clause.gif」の説明

(logging_clause::=を参照)

logging_clause::=

logging_clause.gifの説明が続きます。
図「logging_clause.gif」の説明

table_compression::=

table_compression.gifの説明が続きます。
図「table_compression.gif」の説明

column_properties::=

column_properties.gifの説明が続きます。
図「column_properties.gif」の説明

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

object_type_col_properties::=

object_type_col_properties.gifの説明が続きます。
図「object_type_col_properties.gif」の説明

(substitutable_column_clause::=を参照)

substitutable_column_clause::=

substitutable_column_clause.gifの説明が続きます。
図「substitutable_column_clause.gif」の説明

nested_table_col_properties::=

nested_table_col_properties.gifの説明が続きます。
図「nested_table_col_properties.gif」の説明

(substitutable_column_clause::=object_properties::=physical_properties::=(「CREATE TABLE」構文の項)、column_properties ::=を参照)

varray_col_properties::=

varray_col_properties.gifの説明が続きます。
図「varray_col_properties.gif」の説明

(substitutable_column_clause::=varray_storage_clause::=を参照)

varray_storage_clause::=

varray_storage_clause.gifの説明が続きます。
図「varray_storage_clause.gif」の説明

(LOB_parameters::=を参照)

LOB_storage_clause::=

lob_storage_clause.gifの説明が続きます。
図「lob_storage_clause.gif」の説明

(LOB_storage_parameters::=を参照)

LOB_storage_parameters::=

lob_storage_parameters.gifの説明が続きます。
図「lob_storage_parameters.gif」の説明

(LOB_parameters::=storage_clause::=を参照)

LOB_parameters::=

lob_parameters.gifの説明が続きます。
図「lob_parameters.gif」の説明

(storage_clause::=logging_clause::=を参照)

LOB_partition_storage::=

lob_partition_storage.gifの説明が続きます。
図「lob_partition_storage.gif」の説明

(LOB_storage_clause::=varray_col_properties::=を参照)

parallel_clause::=

parallel_clause.gifの説明が続きます。
図「parallel_clause.gif」の説明

build_clause::=

build_clause.gifの説明が続きます。
図「build_clause.gif」の説明

セマンティクス

schema

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

materialized_view

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

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制約」を参照してください。

column_alias

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

ENCRYPT句  

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

ON PREBUILT TABLE句

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

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


注意:

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

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

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

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

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

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

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

  • 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 TABLE」のtable_compressionを参照してください。

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


注意:

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


関連項目:


FAST句

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

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

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

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


関連項目:

  • レプリケーション環境における高速リフレッシュの制限については、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

  • データ・ウェアハウス環境における高速リフレッシュの制限については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

  • 高速リフレッシュに関する問題の診断については、DBMS_MVIEWパッケージのEXPLAIN_MVIEWプロシージャを参照してください。高速リフレッシュの問題の修正については、DBMS_MVIEWパッケージのTUNE_MVIEWプロシージャを参照してください。

  • 「分析ファンクション」

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


COMPLETE句

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

FORCE句

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

ON COMMIT句

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

ON COMMITおよびON DEMANDの両方を指定することはできません。ON COMMITを指定した場合、START WITHまたはNEXTを指定できません。

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

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

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

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

ON DEMAND句

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

ON COMMITおよびON DEMANDの両方を指定することはできません。ON COMMITおよびON DEMANDのどちらも指定しなかった場合、ON DEMANDがデフォルトになります。このデフォルト設定は、同じCREATE MATERIALIZED VIEW文または後続のALTER MATERIALIZED VIEW文のいずれかにSTART WITH句またはNEXT句を指定することで上書きできます。

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


関連項目:

  • これらのプロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

  • REFRESH ON DEMANDを指定することによって作成できるマテリアライズド・ビューのタイプについては、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。


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マテリアライズド・ビューは、単一表を基にしている必要があり、次のいずれも含むことができません。

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

  • 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は、マテリアライズド・ビューを(作成ではなく)変更する場合に有効です。

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

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


関連項目:

DBMS_REFRESHパッケージを使用するローカル・マテリアライズド・ビューのロールバック・セグメントの指定については、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

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文を発行する必要があります。

FOR UPDATE句

FOR UPDATEを指定すると、副問合せ、主キー、オブジェクトまたはROWIDマテリアライズド・ビューを更新できます。アドバンスト・レプリケーションと組み合せて使用した場合、更新はマスターにも影響します。

QUERY REWRITE句

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

ENABLE句 ENABLEを指定すると、クエリー・リライトでマテリアライズド・ビューを使用可能にできます。

クエリー・リライトを使用可能にする場合の制限事項: クエリー・リライトを使用可能にする処理には、次の制限事項があります。

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

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


注意:

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

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



関連項目:

  • クエリー・リライトの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

  • DBMS_STATSパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

  • クエリー・リライトに関する問題の診断については、DBMS_MVIEWパッケージのEXPLAIN_MVIEWプロシージャを参照してください。クエリー・リライトの問題の修正については、DBMS_MVIEWパッケージのTUNE_MVIEWプロシージャを参照してください。

  • CREATE FUNCTION


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

AS subquery

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

マテリアライズド・ビューを定義する問合せに関する注意事項:マテリアライズド・ビューには、次の注意事項があります。

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

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

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

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

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

  • マテリアライズド・ビューを定義するとき、定義する問合せの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に対するSELECTオブジェクト権限のみです。

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

CREATE MATERIALIZED VIEW foreign_customers FOR UPDATE
   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集合演算子を使用して、サンプル・スキーマoeの表order_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;