CREATE MATERIALIZED VIEW
目的
CREATE
MATERIALIZED
VIEW
文を使用すると、マテリアライズド・ビューを作成できます。マテリアライズド・ビューは、問合せ結果を含むデータベース・オブジェクトです。問合せのFROM
句には、表、ビューおよびその他のマテリアライズド・ビューを指定できます。これらのオブジェクトをあわせて、マスター表(レプリケーション用語)またはディテール表(データ・ウェアハウス用語)といいます。このマニュアルでは、「マスター表」を使用します。マスター表が格納されているデータベースをマスター・データベースといいます。
ノート:
下位互換性を保つために、MATERIALIZED
VIEW
のかわりにキーワードSNAPSHOT
もサポートされています。
レプリケーションでは、マテリアライズド・ビューを使用すると、ローカル・ノード上にあるリモート・データの読取り専用コピーをメンテナンスできます。マテリアライズド・ビューのデータを、表またはビューと同じように選択することができます。レプリケーション環境では、通常作成されるマテリアライズド・ビューは、主キー、ROWID、オブジェクトおよび副問合せのマテリアライズド・ビューです。
関連項目:
レプリケーションのサポートに使用するマテリアライズド・ビューのタイプの詳細は、『Oracle Database管理者ガイド』を参照してください。
データ・ウェアハウスでは、通常作成されるマテリアライズド・ビューは、マテリアライズド集計ビュー、単一表マテリアライズド集計ビューおよびマテリアライズド結合ビューです。3つのマテリアライズド・ビューはすべてクエリー・リライトで使用できます。クエリー・リライトとは、マスター表に関して記述されたユーザー要求を、1つ以上のマテリアライズド・ビューを含む意味的に同等の要求に変換するための最適化手法です。
関連項目:
-
データ・ウェアハウスのサポートに使用するマテリアライズド・ビューの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
前提条件
マテリアライズド・ビューの作成に必要な権限は、ロールを介してではなく、直接付与する必要があります。
自分のスキーマ内にマテリアライズド・ビューを作成する場合は、次の条件に従う必要があります。
-
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
権限が必要になります。
マテリアライズド・ビューから選択を実行するには、SELECT ANY TABLE
システム権限が必要です。
関連項目:
-
これらの権限については、「CREATE TABLE」、「CREATE VIEW」および「CREATE INDEX」を参照してください。
-
レプリケーションのためのマテリアライズド・ビューの作成に適用される前提条件の詳細は、『Oracle Database管理者ガイド』を参照してください。
-
データ・ウェアハウスのためのマテリアライズド・ビューの作成についての前提条件は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
構文
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::=、annotations_clause)
annotations_clause::=
annotations_clause
の完全な構文およびセマンティクスについては、「annotations_clause」を参照してください。
scoped_table_ref_constraint::=
physical_properties::=
(deferred_segment_creation::=、segment_attributes_clause::=、table_compression::=、inmemory_table_clause::=、heap_org_table_clause::=、index_org_table_clause::=)
materialized_view_props::=
(column_properties::=、table_partitioning_clauses::= (CREATE
TABLE
構文の一部)、parallel_clause::=、build_clause::=)
heap_org_table_clause::=
index_org_table_clause::=
(mapping_table_clause
: マテリアライズド・ビューではサポートされていません、prefix_compression::=、index_org_overflow_clause::=)
prefix_compression::=
deferred_segment_creation::=
segment_attributes_clause::=
(physical_attributes_clause::=、TABLESPACE
SET
: CREATE
MATERIALIZED
VIEW
ではサポートされていません、logging_clause::=)
logging_clause::=
table_compression::=
inmemory_table_clause::=
inmemory_attributes::=
(inmemory_memcompress::=、inmemory_priority::=、inmemory_distribute::=、inmemory_duplicate::=)
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::=
nested_table_col_properties::=
(substitutable_column_clause::=、object_properties::=、physical_properties::= (CREATE
TABLE
構文の一部)、column_properties::=)
LOB_storage_parameters::=
(TABLESPACE
SET
: CREATE
MATERIALIZED
VIEW
ではサポートされていません、LOB_parameters::=、storage_clause::=)
LOB_partition_storage::=
build_clause::=
evaluation_edition_clause::=
query_rewrite_clause::=
unusable_editions_clause::=
セマンティクス
IF NOT EXISTS
IF NOT EXISTS
を指定すると、次の効果が得られます。
-
ビューが存在していない場合は、文の最後に新しいビューが作成されます。
-
ビューが存在している場合、これは文の最後の時点にあるビューになります。古いものが検出されるため、新しいものは作成されません。
IF EXISTS
はCREATE
とともに使用すると、ORA-11543: Incorrect IF NOT EXISTS clause for CREATE statement
が発生します。
annotations_clause
注釈句のセマンティクスの詳細は、「annotations_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
を使用すると、PCTFREE
、PCTUSED
、INITRANS
パラメータの値、およびマテリアライズド・ビューの記憶特性の設定、表領域の割当て、ロギングが実行されるかどうかを指定できます。USING
INDEX
句では、PCTFREE
またはPCTUSED
は指定できません。
マテリアライズド・ビューを作成する表領域を指定します。この句を指定しないと、マテリアライズド・ビューを含むスキーマのデフォルト表領域内にマテリアライズド・ビューが作成されます。
関連項目:
デフォルト値を含むこれらの句の詳細は、「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
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
column_properties
句を使用すると、LOB、ネストした表、VARRAYまたはXMLType
の列の記憶特性を指定できます。object_type_col_properties
は、マテリアライズド・ビューには関連しません。
関連項目:
この句のパラメータの指定の詳細は、「CREATE TABLE」を参照してください。
table_partitioning_clauses
table_partitioning_clauses
を使用すると、マテリアライズド・ビューを、指定した範囲の値またはハッシュ・ファンクションでパーティション化できます。マテリアライズド・ビューのパーティション化は、表のパーティション化と同じです。
関連項目:
「CREATE TABLE」の「table_partitioning_clauses」
を参照してください。
アクセス頻度の高いデータについて、CACHE
は、全表スキャンの実行時にこの表に対して取り出された各ブロックを、バッファ・キャッシュの最低使用頻度(LRU)リストの最高使用頻度側に入れることを指定します。この属性は、小規模な参照表で有効です。NOCACHE
は、ブロックをLRUリストの最低使用頻度側に入れることを指定します。
ノート:
NOCACHE
は、storage_clause
にKEEP
を指定したマテリアライズド・ビューには、影響しません。
関連項目:
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データ・ウェアハウス・ガイド』を参照してください。
関連項目:
-
「マテリアライズド・ビューの定期的リフレッシュ: 例」および「マテリアライズド・ビューの自動リフレッシュ時刻: 例」を参照してください。
-
リフレッシュ方法の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
-
リフレッシュ統計を使用してマテリアライズド・ビューのリフレッシュ操作のパフォーマンスを監視する方法を学習するには、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
FAST
を指定すると、高速リフレッシュ方法が使用されます。この方法では、マスター表に対して行われた変更に従ってリフレッシュを実行します。従来型DML変更の場合、変更は、マスター表に関連付けられたマテリアライズド・ビュー・ログに格納されます。ダイレクト・パス・インサート操作の変更は、ダイレクト・ローダー・ログに格納されます。
REFRESH
FAST
を指定すると、マテリアライズド・ビューのマスター表のマテリアライズド・ビュー・ログが存在していない場合に、CREATE
文は正常に実行されません。ダイレクト・パス・インサートが行われると、ダイレクト・ローダー・ログが自動的に作成されます。手動での操作は必要ありません。
従来型DMLの変更の場合も、ダイレクト・パス・インサート操作の場合も、他の条件によって、高速リフレッシュへのマテリアライズド・ビューの適応性が制限されることがあります。
FASTリフレッシュの制限事項
FAST
リフレッシュには、次の制限事項があります。
-
作成時に
FAST
リフレッシュを指定した場合、作成するマテリアライズド・ビューは高速リフレッシュに適応することが検証されています。ALTER
MATERIALIZED
VIEW
文でリフレッシュ方法をFAST
に変更した場合、これは検証されていません。マテリアライズド・ビューが高速リフレッシュに適応しない場合、このビューをリフレッシュしようとするとエラーが戻されます。 -
定義する問合せに分析ファンクションまたは
XMLTable
ファンクションが含まれている場合、マテリアライズド・ビューは高速リフレッシュに適応しません。 -
定義する問合せで、
XMLIndex
索引が定義されている表を参照する場合、マテリアライズド・ビューは高速リフレッシュに適格となりません。 -
暗号化されている列がある場合は、マテリアライズド・ビューを高速リフレッシュできません。
関連項目:
-
レプリケーション環境における高速リフレッシュの制限事項は、『Oracle Database管理者ガイド』を参照してください。
-
データ・ウェアハウス環境における高速リフレッシュの制限については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
-
高速リフレッシュに関する問題の診断については、
DBMS_MVIEW
パッケージのEXPLAIN_MVIEW
プロシージャを参照し、クエリー・リライトの問題の修正については、DBMS_MVIEW
パッケージのTUNE_MVIEW
プロシージャを参照してください。
COMPLETE
を指定すると、完全リフレッシュ方法が使用されます。この方法は、マテリアライズド・ビューを定義する問合せを実行することによって実装されます。完全リフレッシュを要求すると、高速リフレッシュが実行可能であっても、完全リフレッシュが実行されます。
FORCE
を指定すると、リフレッシュ時に、高速リフレッシュが可能な場合は高速リフレッシュを実行し、可能でない場合は完全リフレッシュを実行するように指定できます。リフレッシュ方法(FAST
、COMPLETE
またはFORCE
)を指定しないと、デフォルトでFORCE
が指定されます。
ON
COMMIT
を指定すると、マテリアライズド・ビューのマスター表に対するトランザクションをコミットするときに、必ずリフレッシュが実行されるように指定できます。この句を指定すると、リフレッシュ操作がコミット処理の一部として行われるため、コミットの完了に時間がかかります。
指定できるのは、ON
COMMIT
、ON
DEMAND
およびON
STATEMENT
のいずれか1つの句のみです。ON
COMMIT
を指定した場合、START
WITH
またはNEXT
を指定できません。
ON COMMITのリフレッシュの制限事項:
ON
COMMIT
句には、次の制限事項があります。
-
この句は、オブジェクト型またはOracleが提供する型を含むマテリアライズド・ビューについてはサポートしていません。
-
この句はリモート表を使用するマテリアライズド・ビューではサポートされていません。
-
この句を指定すると、それ以降は、このマテリアライズド・ビューのすべてのマスター表で分散トランザクションが実行できなくなります。たとえば、リモート表から選択してマスターに挿入することはできません。
ON
DEMAND
句の場合は、それ以降のマスター表での分散トランザクションに、このような制限はありません。
ON
DEMAND
を指定すると、3つのDBMS_MVIEW
リフレッシュ・プロシージャのうちのいずれかを使用してユーザーが手動でリフレッシュしないかぎりデータベースによってマテリアライズド・ビューがリフレッシュされないように指定できます。
指定できるのは、ON
COMMIT
、ON
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
を指定しても意味がありません。
関連項目:
-
これらのプロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
-
REFRESH
ON
DEMAND
を指定することによって作成できるマテリアライズド・ビューのタイプについては、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
ON STATEMENT句
ON
STATEMENT
を指定すると、マテリアライズド・ビューの実表のいずれかでDML操作が実行されるたびに自動リフレッシュが発生します。
指定できるのは、ON
COMMIT
、ON
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
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
を指定してマテリアライズドされたオブジェクトは暗黙的にリフレッシュされます。
関連項目:
「マテリアライズド集計ビューの作成: 例」および「ROWIDマテリアライズド・ビューの作成: 例」を参照してください。
自動UNDOモードではロールバック・セグメントではなくUNDO表領域が使用されるため、データベースが自動UNDOモードの場合、この句は無効です。自動UNDOモードを使用することをお薦めします。この句は、ロールバック・セグメントが使用される以前のバージョンのOracle Databaseが含まれるレプリケーション環境との下位互換性のためにサポートされています。
rollback_segment
に、マテリアライズド・ビューのリフレッシュ中に使用するリモート・ロールバック・セグメントを指定します。
DEFAULT
DEFAULT
を使用すると、使用するロールバック・セグメントを自動的に選択できます。DEFAULT
を指定した場合、rollback_segment
は指定できません。DEFAULT
は、マテリアライズド・ビューを(作成ではなく)変更する場合に有効です。
関連項目:
MASTER
MASTER
を使用すると、個々のマテリアライズド・ビュー用のリモート・マスター・サイトで使用されるリモート・ロールバック・セグメントを指定できます。
LOCAL
LOCAL
を使用すると、マテリアライズド・ビューが含まれているローカル・リフレッシュ・グループで使用されるリモート・ロールバック・セグメントを指定できます。これはデフォルトです。
関連項目:
DBMS_REFRESH
パッケージを使用するローカル・マテリアライズド・ビューのロールバック・セグメントの指定の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
rollback_segment
を指定しない場合、使用するロールバック・セグメントが自動的に選択されます。各マテリアライズド・ビューに対して1つのマスター・ロールバック・セグメントが格納され、マテリアライズド・ビューの作成およびリフレッシュ時に検証されます。複合マテリアライズド・ビューの場合、マスター・ロールバック・セグメントの指定は無視されます。
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つ以上のベース・マテリアライズド・ビューが失効している場合、クエリー・リライトは、このリアルタイムのマテリアライズド・ビューを使用して実行されません。
-
リアルタイムのマテリアライズド・ビューに直接アクセスする問合せのカーソルは共有されません。
関連項目:
-
リアルタイムのマテリアライズド・ビューの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
query_rewrite_clause
query_rewrite_clause
を使用すると、マテリアライズド・ビューがクエリー・リライトに適格であるかどうかを指定できます。
ENABLE句
ENABLE
を指定すると、クエリー・リライトでマテリアライズド・ビューを使用可能にできます。unusable_editions_clause
を同時に指定すると、使用禁止エディションでマテリアライズド・ビューがクエリー・リライトに使用されなくなります。
クエリー・リライトの有効化の制限事項
クエリー・リライトの有効化には、次の制限事項があります。
-
マテリアライズド・ビューのすべてのユーザー定義ファンクションが
DETERMINISTIC
である場合のみ、クエリー・リライトを使用可能にできます。 -
文内の式が反復可能な場合のみ、クエリー・リライトを使用可能にできます。たとえば、
CURRENT_TIME
、USER
、順序値(たとえば、CURRVAL
またはNEXTVAL
疑似列)、またはSAMPLE
句(マテリアライズド・ビューの変更内容と異なる行をサンプルとして抽出します)を含めることはできません。
ノート:
-
クエリー・リライトでのマテリアライズド・ビューの使用は、デフォルトでは無効です。この句を指定して、マテリアライズド・ビューをクエリー・リライトに適用できるようにする必要があります。
-
マテリアライズド・ビューを作成した後は、
DBMS_STATS
パッケージを使用して、その統計情報を収集する必要があります。クエリー・リライトを最適化するために、このパッケージで生成した統計情報が必要です。
関連項目:
-
クエリー・リライトの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
-
リフレッシュ統計を使用してマテリアライズド・ビューのリフレッシュ操作のパフォーマンスを監視する方法を学習するには、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
-
DBMS_STATS
パッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。 -
クエリー・リライトに関する問題の診断については、
DBMS_MVIEW
パッケージのEXPLAIN_MVIEW
プロシージャを参照し、クエリー・リライトの問題の修正については、DBMS_MVIEW
パッケージのTUNE_MVIEW
プロシージャを参照してください
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
句を省略することと同じです。
マテリアライズド・ビューは、クエリー・リライトに適格ではない各エディションに対する依存関係があります。これに該当するエディションが後に削除されると、依存関係が削除されます。ただし、そのマテリアライズド・ビューが無効にされることはありません。
ENABLE | DISABLE CONCURRENT REFRESH
ON COMMITおよびアトミック・モードの同じマテリアライズド・ビューを複数のセッションにわたって同時にリフレッシュするには、同時リフレッシュを有効にします。マテリアライズド・ビューの同じ実表に対する複数の同時DMLトランザクションがコミットされると、マテリアライズド・ビューが同時にリフレッシュされます。
リフレッシュできるマテリアライズド・ビューの数に制限はありません。
同時リフレッシュは、デフォルトでは無効になっています。マテリアライズド・ビューに対して明示的に有効にする必要があります。ON COMMITモードのマテリアライズド・ビューに対してのみ有効にできます。
関連項目:
『Oracle Databaseデータ・ウェアハウス・ガイド』の「マテリアライズド・ビューのリフレッシュ」。
AS副問合せ
マテリアライズド・ビューを定義する問合せを指定します。マテリアライズド・ビューの作成時に、この副問合せが実行され、実行結果がマテリアライズド・ビューに格納されます。この副問合せは、有効な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ファンクションに対する直接またはビューを介した参照を含めることはできません。 -
マテリアライズド・ビューおよびマテリアライズド・ビューのマスター表はリモートにできません。
マテリアライズド・ビュー・ログを使用した高速リフレッシュ、またはステージング・ログを使用した同期リフレッシュにマテリアライズド・ビューが適格になるようにする場合は、いくつかの追加の制限事項が適用されます。
関連項目:
-
高速リフレッシュおよび同期リフレッシュに関連する制限事項については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
-
レプリケーションに関連する制限の詳細は、『Oracle Database管理者ガイド』を参照してください。
-
「マテリアライズド結合ビューの作成: 例」、「副問合せマテリアライズド・ビューの作成: 例」および「ネステッド・マテリアライズド・ビューの作成: 例」を参照してください。
例
次の例では、「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
集合演算子を使用して、サンプル・スキーマ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;
ビュー・レベルでの注釈の指定
次の例では、値Tab1 MV1
の注釈Title
および値のないSnapshot
をマテリアライズド・ビューMView1
に追加します。
CREATE MATERIALIZED VIEW MView1 ANNOTATIONS (Title 'Tab1 MV1', ADD Snapshot) AS SELECT * from Table1;
ビューおよび列レベルでの注釈の指定
次の例では、Hidden
を列T
に、値Tab1 MV1
の注釈Title
および値のないSnapshot
をマテリアライズド・ビューMView1
に追加します。
CREATE MATERIALIZED VIEW MView1(T ANNOTATIONS (Hidden)) ANNOTATIONS (Title 'Tab1 MV1', ADD Snapshot) AS SELECT * from Table1;