用途
CREATE MATERIALIZED VIEW文を使用すると、マテリアライズド・ビューを作成できます。マテリアライズド・ビューは、問合せ結果を含むデータベース・オブジェクトです。問合せのFROM句には、表、ビューおよびその他のマテリアライズド・ビューを指定できます。これらのオブジェクトをあわせて、マスター表(レプリケーション用語)またはディテール表(データ・ウェアハウス用語)といいます。このマニュアルでは、「マスター表」を使用します。マスター表が格納されているデータベースをマスター・データベースといいます。
| 注意:下位互換性を保つために、 MATERIALIZEDVIEWのかわりにキーワード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権限が必要になります。
| 関連項目: 
 | 
構文
create_materialized_view::=

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

physical_properties::=

(deferred_segment_creation::=、segment_attributes_clause::=、table_compression ::=、inmemory_table_clause::=、ilm_clauseを参照: マテリアライズド・ビューheap_org_table_clause::=、index_org_table_clause::=ではサポートされません)

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

(table_compression ::=,inmemory_table_clause::=,ilm_clauseを参照: マテリアライズド・ビューではサポートされません)

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

index_org_overflow_clause::=

(segment_attributes_clause::=を参照)



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

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



(inmemory_parameters::=、inmemory_column_clause::=)
inmemory_parameters::=

(inmemory_memcompress::=、inmemory_priority::=、inmemory_distribute::=、inmemory_duplicate::=)
inmemory_memcompress::=

inmemory_priority::=

inmemory_distribute::=

inmemory_duplicate::=

inmemory_column_clause::=


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

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

nested_table_col_properties::=

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

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

(LOB_parameters::=を参照)

(LOB_storage_parameters::=を参照)
LOB_storage_parameters::=

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

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

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

build_clause::=




セマンティクス
schema
マテリアライズド・ビューを含めるスキーマを指定します。schemaを指定しない場合、自分のスキーマにそのマテリアライズド・ビューが作成されます。
materialized_view
作成するマテリアライズド・ビューの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。Oracle Databaseは、マテリアライズド・ビュー名に接頭辞または接尾辞を追加して、マテリアライズド・ビューをメンテナンスするための表および索引の名前を生成します。
column_alias
マテリアライズド・ビューの各列に対して別名を指定できます。列の別名のリストによって、競合する列名が明示的に解決されます。したがって、マテリアライズド・ビューのSELECT句で別名を指定する必要がなくなります。この句で列の別名を指定する場合は、SELECT句内で参照される各データソースの別名を指定する必要があります。
ENCRYPT句 この句を使用すると、マテリアライズド・ビューの列を暗号化できます。列の暗号化の詳細は、「CREATE TABLE」の句「encryption_spec」を参照してください。
OF object_type句を指定すると、object_type型のオブジェクト・マテリアライズド・ビューを明示的に作成できます。
SCOPE FOR句を使用すると、参照の有効範囲を1つのオブジェクト表に制限できます。scope_table_nameを持つ表名または列の別名を参照できます。REF列または属性の値はscope_table_nameまたはc_alias内のオブジェクトを指し、その場所にREF列と同じ型のオブジェクト・インスタンスが格納されます。別名を指定する場合は、その別名が、マテリアライズド・ビューを定義する問合せのSELECT構文のリストの列と1対1で対応する必要があります。
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を指定すると、表またはマテリアライズド・ビューの列の精度が、副問合せによって戻される精度と正確に一致しない場合に、精度の低下が許可されます。
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を使用すると、PCTFREE、PCTUSED、INITRANSパラメータの値、およびマテリアライズド・ビューの記憶特性の設定、表領域の割当て、ロギングが実行されるかどうかを指定できます。USING INDEX句では、PCTFREEまたはPCTUSEDは指定できません。
TABLESPACE句 マテリアライズド・ビューを作成する表領域を指定します。この句を指定しないと、マテリアライズド・ビューを含むスキーマのデフォルト表領域内にマテリアライズド・ビューが作成されます。
logging_clause LOGGINGまたはNOLOGGINGを指定すると、マテリアライズド・ビュー・ログのロギング特性を設定できます。ロギング特性は、マテリアライズド・ビューの作成およびDBMS_REFRESHパッケージによって開始される非アトミック・リフレッシュに影響します。デフォルトは、マテリアライズド・ビューが存在する表領域のロギング特性です。
| 関連項目:この句の詳細は、「logging_clause」を参照してください。アトミック・リフレッシュおよび非アトミック・リフレッシュの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。 | 
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列ストアの特定のマテリアライズド・ビュー列を無効化し、特定の列のデータ圧縮方法を指定します。この句を指定するには、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 MATERIALIZED VIEWのCACHE、NOCACHE、CLUSTERまたは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句を使用すると、LOB、ネストした表、VARRAYまたはXMLTypeの列の記憶特性を指定できます。object_type_col_propertiesは、マテリアライズド・ビューには関連しません。
table_partitioning_clausesを使用すると、マテリアライズド・ビューを、指定した範囲の値またはハッシュ・ファンクションでパーティション化できます。マテリアライズド・ビューのパーティション化は、表のパーティション化と同じです。
アクセス頻度の高いデータについて、CACHEは、全表スキャンの実行時にこの表に対して取り出された各ブロックを、バッファ・キャッシュの最低使用頻度(LRU)リストの最高使用頻度側に入れることを指定します。この属性は、小規模な参照表で有効です。NOCACHEは、ブロックをLRUリストの最低使用頻度側に入れることを指定します。
| 注意: NOCACHEは、storage_clauseにKEEPを指定したマテリアライズド・ビューには、影響しません。 | 
parallel_clauseを使用すると、マテリアライズド・ビューへのパラレル操作をサポートするかどうかを指定できます。作成後にマテリアライズド・ビューに対する問合せおよびDMLのデフォルトの並列度を設定します。
この句の詳細は、「CREATE TABLE」の「parallel_clause」を参照してください。
build_clauseを指定すると、マテリアライズド・ビューをいつ移入するかを指定できます。
IMMEDIATE IMMEDIATEを指定すると、マテリアライズド・ビューにすぐに移入できます。これはデフォルトです。
DEFERRED DEFERREDを指定すると、次のREFRESH操作でマテリアライズド・ビューに移入できます。最初の(遅延)リフレッシュは、常に、完全リフレッシュである必要があります。それ以前のマテリアライズド・ビューの値はUNUSABLEであるため、クエリー・リライトには使用できません。
USING INDEX句を使用すると、マテリアライズド・ビューのデータをメンテナンスするために使用されるデフォルトの索引のINITRANSパラメータおよびSTORAGEパラメータの値を変更できます。USING INDEXが設定されていない場合、この索引にはデフォルト値が使用されます。デフォルトの索引は、マテリアライズド・ビューの増分リフレッシュ(FAST)を高速に処理するために使用されます。
USING INDEX句の制限事項: この句では、PCTUSEDパラメータは指定できません。
USING NO INDEX句を指定すると、デフォルトの索引の作成を抑制できます。CREATE INDEX文を使用することによって、代替する索引を明示的に作成できます。USING NO INDEXを指定し、高速リフレッシュ(REFRESH FAST)でマテリアライズド・ビューを作成する場合は、このような索引を作成する必要があります。
create_mv_refresh句を使用すると、マテリアライズド・ビューのデフォルトのリフレッシュ方法、リフレッシュ・モードおよびリフレッシュ時刻を指定できます。マテリアライズド・ビューのマスター表が変更された場合、マテリアライズド・ビューのデータを更新し、その時点でマスター表にあるデータを正確に反映させる必要があります。この句によって、自動的にマテリアライズド・ビューをリフレッシュする日時をスケジューリングし、リフレッシュの方法およびモードを指定できます。
同期リフレッシュの制限事項: 同期リフレッシュの方法を使用する場合は、ON DEMANDとUSING TRUSTED CONSTRAINTSを指定する必要があります。
| 注意:この句では、デフォルトのリフレッシュ・オプションのみを設定します。リフレッシュを実際に行う手順は、『Oracle Databaseアドバンスト・レプリケーション』および『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。 | 
| 関連項目: 
 | 
FASTを指定すると、高速リフレッシュ方法が使用されます。この方法では、マスター表に対して行われた変更に従ってリフレッシュを実行します。従来型DML変更の場合、変更は、マスター表に関連付けられたマテリアライズド・ビュー・ログに格納されます。ダイレクト・パスINSERT操作の変更は、ダイレクト・ローダー・ログに格納されます。
REFRESH FASTを指定すると、マテリアライズド・ビューのマスター表のマテリアライズド・ビュー・ログが存在していない場合に、CREATE文は正常に実行されません。ダイレクト・パスINSERTが行われると、ダイレクト・ローダー・ログが自動的に作成されます。手動での操作は必要ありません。
従来型DMLの変更の場合も、ダイレクト・パスINSERT操作の場合も、他の条件によって、高速リフレッシュへのマテリアライズド・ビューの適応性が制限されることがあります。
FASTリフレッシュの制限事項: FASTリフレッシュには、次の制限事項があります。
作成時にFASTリフレッシュを指定した場合、作成するマテリアライズド・ビューは高速リフレッシュに適応することが検証されています。ALTER MATERIALIZED VIEW文でリフレッシュ方法をFASTに変更した場合、これは検証されていません。マテリアライズド・ビューが高速リフレッシュに適応しない場合、このビューをリフレッシュしようとするとエラーが戻されます。
定義する問合せに分析ファンクションまたはXMLTableファンクションが含まれている場合、マテリアライズド・ビューは高速リフレッシュに適応しません。
定義する問合せで、XMLIndex索引が定義されている表を参照する場合、マテリアライズド・ビューは高速リフレッシュに適格となりません。
暗号化されている列がある場合は、マテリアライズド・ビューを高速リフレッシュできません。
| 関連項目: 
 | 
COMPLETEを指定すると、完全リフレッシュ方法が使用されます。この方法は、マテリアライズド・ビューを定義する問合せを実行することによって実装されます。完全リフレッシュを要求すると、高速リフレッシュが実行可能であっても、完全リフレッシュが実行されます。
FORCEを指定すると、リフレッシュ時に、高速リフレッシュが可能な場合は高速リフレッシュを実行し、可能でない場合は完全リフレッシュを実行するように指定できます。リフレッシュ方法(FAST、COMPLETEまたはFORCE)を指定しないと、デフォルトでFORCEが指定されます。
ON COMMITを指定すると、マテリアライズド・ビューのマスター表に対するトランザクションをコミットするときに、必ずリフレッシュが実行されるように指定できます。この句を指定すると、リフレッシュ操作がコミット処理の一部として行われるため、コミットの完了に時間がかかります。
ON COMMITおよびON DEMANDの両方を指定することはできません。ON COMMITを指定した場合、START WITHまたはNEXTを指定できません。
ON COMMITのリフレッシュの制限事項:
この句は、オブジェクト型またはOracleが提供する型を含むマテリアライズド・ビューについてはサポートしていません。
この句はリモート表を使用するマテリアライズド・ビューではサポートされていません。
この句を指定すると、それ以降は、このマテリアライズド・ビューのすべてのマスター表で分散トランザクションが実行できなくなります。たとえば、リモート表から選択してマスターに挿入することはできません。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を指定しても意味がありません。
| 関連項目: 
 | 
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 ROWIDの項で説明する場合を除き、すべての場合に使用する必要があります。主キー・マテリアライズド・ビューを使用すると、高速リフレッシュに対するマテリアライズド・ビューの適応性に影響せずに、マテリアライズド・ビューのマスター表を再編成できます。マスター表には、使用可能な主キー制約が定義されている必要があり、マテリアライズド・ビューを定義する問合せでは、すべての主キー列が直接指定される必要があります。定義する問合せでは、UPPERなどのファンクションへの引数として主キー列を指定できません。
主キー・マテリアライズド・ビューの制限事項: この句は、オブジェクト・マテリアライズド・ビューには指定できません。WITH OBJECT IDを指定してマテリアライズドされたオブジェクトは暗黙的にリフレッシュされます。
WITH ROWIDを指定すると、ROWIDマテリアライズド・ビューを作成できます。マテリアライズド・ビューがマスター表の主キー列をすべて含まない場合に、ROWIDマテリアライズド・ビューは有効です。ROWIDマテリアライズド・ビューは、単一表を基にしている必要があり、次のいずれも含むことができません。
固有ファンクションまたは集計ファンクション
GROUP BY句または CONNECT BY句
副問合せ
結合
集合演算
WITH ROWID句は、定義する問合せに複数のマスター表がある場合は効果がありません。
完全リフレッシュが行われるまでは、マスター表の再編成後に、ROWIDマテリアライズド・ビューは高速リフレッシュされません。
ROWIDマテリアライズド・ビューの制限事項: この句は、オブジェクト・マテリアライズド・ビューには指定できません。WITH OBJECT IDを指定してマテリアライズドされたオブジェクトは暗黙的にリフレッシュされます。
自動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句を使用すると、リフレッシュ操作中にOracle Databaseでより多くのリライト・オプションを選択でき、リフレッシュをより効果的に実行できます。リフレッシュ操作中に、適用される制約のみに依存するのではなく、適用されていない制約(RELY状態のディメンションの関係や制約など)を使用できます。
USING TRUSTED CONSTRAINTS句では、NULL以外の仮想プライベート・データベース(VPD)ポリシーを持つ表の最上位にマテリアライズド・ビューを作成できます。この場合、マテリアライズド・ビューが適切に動作することを確認する必要があります。マテリアライズド・ビューの結果は、VPDポリシーによってフィルタ処理された行と列に基づいて計算されます。したがって、正しい結果を得るには、マテリアライズド・ビュー定義をVPDポリシーで調整する必要があります。USING TRUSTED CONSTRAINTS句を指定しないと、マスター表のVPDポリシーにより、マテリアライズド・ビューを作成できなくなります。
| 注意: USINGTRUSTEDCONSTRAINTS句を指定すると、データベース管理者が信頼できると宣言したが、データベースで検証されていないディメンションおよび制約の情報を、Oracle Databaseで使用できます。ディメンションおよび制約の情報が有効であると、パフォーマンスを向上できる場合があります。ただし、この情報が無効であると、正常な状態が戻されても、リフレッシュ・プロシージャによってマテリアライズド・ビューが破損する場合があります。 | 
この句を指定しない場合、USING ENFORCED CONSTRAINTSがデフォルトになります。
NEVER REFRESH句
NEVER REFRESHを指定すると、Oracle Databaseのリフレッシュ・メカニズムまたはパッケージ・プロシージャを使用したマテリアライズド・ビューのリフレッシュを回避できます。このようなプロシージャから発行された、マテリアライズド・ビューに対するREFRESH文は、無視されます。この句を指定すると、マテリアライズド・ビューでDML操作を実行できます。この句を無効にするには、ALTER MATERIALIZED VIEW ... REFRESH文を発行する必要があります。
FOR UPDATEを指定すると、副問合せ、主キー、オブジェクトまたはROWIDマテリアライズド・ビューを更新できます。アドバンスト・レプリケーションと組み合せて使用した場合、更新はマスターにも影響します。
evaluation_edition_clause
subqueryでエディショニングされたオブジェクトを参照する場合は、この句を指定する必要があります。この句を使用すると、エディショニングされたオブジェクトの名前解決時に検索されたエディション(評価エディション)を指定できます。
CURRENT EDITIONを指定すると、このDDL文が実行されるエディションを検索できます。
EDITION editionを指定すると、editionを検索できます。
NULL EDITIONを指定することは、evaluation_edition_clauseを省略することと同じです。
evaluation_edition_clauseを省略すると、エディショニングされたオブジェクトは名前解決時に認識されなくなるためエラーが発生します。評価エディションを削除すると、マテリアライズド・ビューが無効になります。
| 関連項目:マテリアライズド・ビューの評価エディションを指定する方法の詳細は、『Oracle Database開発ガイド』を参照してください。 | 
query_rewrite_clauseを使用すると、マテリアライズド・ビューがクエリー・リライトに適格であるかどうかを指定できます。
ENABLE句 ENABLEを指定すると、クエリー・リライトでマテリアライズド・ビューを使用可能にできます。unusable_editions_clauseを同時に指定すると、使用禁止エディションでマテリアライズド・ビューがクエリー・リライトに使用されなくなります。
クエリー・リライトを使用可能にする場合の制限事項: クエリー・リライトを使用可能にする処理には、次の制限事項があります。
マテリアライズド・ビューのすべてのユーザー定義ファンクションがDETERMINISTICである場合のみ、クエリー・リライトを使用可能にできます。
文内の式が反復可能な場合のみ、クエリー・リライトを使用可能にできます。たとえば、CURRENT_TIME、USER、順序値(たとえば、CURRVALまたはNEXTVAL疑似列)、またはSAMPLE句(マテリアライズド・ビューの変更内容と異なる行をサンプルとして抽出します)を含めることはできません。
| 注意: 
 | 
| 関連項目: 
 | 
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句を省略することと同じです。
マテリアライズド・ビューは、クエリー・リライトに適格ではない各エディションに対する依存関係があります。これに該当するエディションが後に削除されると、依存関係が削除されます。ただし、そのマテリアライズド・ビューが無効にされることはありません。
マテリアライズド・ビューを定義する問合せを指定します。マテリアライズド・ビューの作成時に、この副問合せが実行され、実行結果がマテリアライズド・ビューに格納されます。この副問合せは、有効なSQL副問合せである必要があります。ただし、すべての副問合せに高速リフレッシュを適用できるわけではなく、すべての副問合せがクエリー・リライトに使用できるわけでもありません。
マテリアライズド・ビューを定義する問合せに関する注意事項:マテリアライズド・ビューには、次の注意事項があります。
BUILD DEFERREDを指定する場合、定義する問合せはすぐには実行されません。
マテリアライズド・ビューを定義する問合せのFROM句に指定する各表およびビューを、それを含むスキーマで修飾することをお薦めします。
仮想プライベート・データベース(VPD)ポリシーを持つマスター表から定義問合せが選択するマテリアライズド・ビューを作成するには、REFRESH USING TRUSTED CONSTRAINTS句を指定する必要があります。
マテリアライズド・ビューを定義する問合せに関する制限事項: マテリアライズド・ビュー問合せには、次の制限事項があります。
マテリアライズド・ビューを定義する問合せでは、ユーザーSYSが所有する表、ビューまたはマテリアライズド・ビューから選択できますが、このようなマテリアライズド・ビューに対してQUERY REWRITEは使用できません。
マテリアライズド・ビューを定義する問合せは、V$ビューまたはGV$ビューから選択できません。
マテリアライズド・ビューを定義するとき、定義する問合せのSELECT構文のリストに副問合せを使用することはできません。ただし、WHERE句内など、定義する問合せの他の箇所には、副問合せを含めることができます。
マテリアライズド・ビューを定義する問合せでは、flashback_query_clauseのAS OF句を使用することはできません。
GROUP BY句を含むマテリアライズド結合ビューおよびマテリアライズド集計ビューは、索引構成表からは選択できません。
マテリアライズド・ビューにLONGまたはLONG RAWのデータ型の列を含めることはできません。
マテリアライズド・ビューに仮想列を含めることはできません。
一時表に対しては、マテリアライズド・ビュー・ログを作成できません。そのため、定義する問合せが一時表を参照する場合、マテリアライズド・ビューは高速リフレッシュ(FAST)に適応せず、この文でQUERY REWRITEを指定することもできません。
定義する問合せのFROM句が他のマテリアライズド・ビューを参照する場合、この文で作成するマテリアライズド・ビューのリフレッシュの前に、定義する問合せで参照されているマテリアライズド・ビューを常にリフレッシュしておく必要があります。
定義する問合せ内に結合式を持つマテリアライズド・ビューは、XMLデータ型の列を持つことができません。XMLデータ型には、XMLTypeおよびURIデータ型の列が含まれます。
クエリー・リライトが可能なマテリアライズド・ビューを作成する場合、次の制限があります。
定義する問合せには、ROWNUM、USER、SYSDATE、リモート表、順序、または(データベースやパッケージ状態の書込みまたは読取りを行う)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オブジェクト権限のみです。
副問合せマテリアライズド・ビューの作成例 次の文は、リモート・データベースの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;