用途
CREATE
MATERIALIZED
VIEW
文を使用すると、マテリアライズド・ビューを作成できます。マテリアライズド・ビューは、問合せ結果を含むデータベース・オブジェクトです。問合せのFROM
句には、表、ビューおよびその他のマテリアライズド・ビューを指定できます。これらのオブジェクトをあわせて、マスター表(レプリケーション用語)またはディテール表(データ・ウェアハウス用語)といいます。このマニュアルでは、「マスター表」を使用します。マスター表が格納されているデータベースをマスター・データベースといいます。
注意: 下位互換性を保つために、MATERIALIZED VIEW のかわりにキーワードSNAPSHOT もサポートされています。 |
レプリケーションでは、マテリアライズド・ビューを使用すると、ローカル・ノード上にあるリモート・データのコピーのメンテナンスができます。コピーは、アドバンスト・レプリケーション機能によって更新可能となりますが、この機能がない場合は読取り専用です。マテリアライズド・ビューのデータを、表またはビューと同じように選択することができます。レプリケーション環境では、通常作成されるマテリアライズド・ビューは、主キー、ROWID、オブジェクトおよび副問合せのマテリアライズド・ビューです。
関連項目: レプリケーションのサポートに使用するマテリアライズド・ビューの詳細は、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。 |
データ・ウェアハウスでは、通常作成されるマテリアライズド・ビューは、マテリアライズド集計ビュー、単一表マテリアライズド集計ビューおよびマテリアライズド結合ビューです。3つのマテリアライズド・ビューはすべてクエリー・リライトで使用できます。クエリー・リライトとは、マスター表に関して記述されたユーザー要求を、1つ以上のマテリアライズド・ビューを含む意味的に同等の要求に変換するための最適化手法です。
関連項目:
|
前提条件
マテリアライズド・ビューの作成に必要な権限は、ロールを介してではなく、直接付与する必要があります。
自分のスキーマ内にマテリアライズド・ビューを作成する場合は、次の条件に従う必要があります。
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_materialized_view::=
(scoped_table_ref_constraint::=、physical_properties ::=、materialized_view_props::=、physical_attributes_clause::=、create_mv_refresh::=、subquery::=を参照)
scoped_table_ref_constraint::=
physical_properties::=
(deferred_segment_creation::=、segment_attributes_clause::=、table_compression ::=、index_org_table_clause::=を参照)
(column_properties ::=、table_partitioning_clauses ::=(「CREATE
TABLE
」構文の項)、parallel_clause::=、build_clause::=を参照)
(mapping_table_clause
は、マテリアライズド・ビューではサポートされていません。key_compression::=、index_org_overflow_clause::=を参照)
key_compression::=
index_org_overflow_clause::=
(segment_attributes_clause::=を参照)
(physical_attributes_clause ::=、logging_clause::=を参照)
physical_attributes_clause::=
(logging_clause::=を参照)
logging_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は、マテリアライズド・ビュー名に接頭辞または接尾辞を追加して、マテリアライズド・ビューをメンテナンスするための表および索引の名前を生成します。
OF
object_type
句を指定すると、object_type型のオブジェクト・マテリアライズド・ビュー
を明示的に作成できます。
SCOPE
FOR
句を使用すると、参照の有効範囲を1つのオブジェクト表に制限できます。scope_table_name
を持つ表名または列の別名を参照できます。REF
列または属性の値はscope_table_name
またはc_alias
内のオブジェクトを指し、その場所にREF
列と同じ型のオブジェクト・インスタンスが格納されます。別名を指定する場合は、その別名が、マテリアライズド・ビューを定義する問合せのSELECT
構文のリストの列と1対1で対応する必要があります。
column_alias
マテリアライズド・ビューの各列に対して別名を指定できます。列の別名のリストによって、競合する列名が明示的に解決されます。したがって、マテリアライズド・ビューのSELECT
句で別名を指定する必要がなくなります。この句で列の別名を指定する場合は、SELECT
句内で参照される各データソースの別名を指定する必要があります。
ENCRYPT句
この句を使用すると、マテリアライズド・ビューの列を暗号化できます。列の暗号化の詳細は、「CREATE
TABLE
」の句「encryption_spec」を参照してください。
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
を使用すると、PCTFREE
、PCTUSED
、INITRANS
パラメータの値、およびマテリアライズド・ビューの記憶特性の設定、表領域の割当て、ロギングが実行されるかどうかを指定できます。USING
INDEX
句では、PCTFREE
またはPCTUSED
は指定できません。
TABLESPACE句 マテリアライズド・ビューを作成する表領域を指定します。この句を指定しないと、マテリアライズド・ビューを含むスキーマのデフォルト表領域内にマテリアライズド・ビューが作成されます。
logging_clause LOGGING
またはNOLOGGING
を指定すると、マテリアライズド・ビュー・ログのロギング特性を設定できます。ロギング特性は、マテリアライズド・ビューの作成およびDBMS_REFRESH
パッケージによって開始される非アトミック・リフレッシュに影響します。デフォルトは、マテリアライズド・ビューが存在する表領域のロギング特性です。
関連項目: この句の詳細は、「logging_clause」を参照してください。アトミック・リフレッシュおよび非アトミック・リフレッシュの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。 |
table_compression
句を使用すると、ディスクおよびメモリーの使用量を削減するために、データ・セグメントを圧縮するかどうかを指定できます。
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
句を使用すると、マテリアライズド・ビューのデフォルトのリフレッシュ方法、リフレッシュ・モードおよびリフレッシュ時刻を指定できます。マテリアライズド・ビューのマスター表が変更された場合、マテリアライズド・ビューのデータを更新し、その時点でマスター表にあるデータを正確に反映させる必要があります。この句によって、自動的にマテリアライズド・ビューをリフレッシュする日時をスケジューリングし、リフレッシュの方法およびモードを指定できます。
注意: この句では、デフォルトのリフレッシュ・オプションのみを設定します。リフレッシュを実際に行う手順は、『Oracle Databaseアドバンスト・レプリケーション』および『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。 |
関連項目:
|
FAST
を指定すると、増分リフレッシュ方法が使用されます。この方法では、マスター表に対して行われた変更に従ってリフレッシュを実行します。従来型DML変更の場合、変更は、マスター表に関連付けられたマテリアライズド・ビュー・ログに格納されます。ダイレクト・パスINSERT
操作の変更は、ダイレクト・ローダー・ログに格納されます。
REFRESH
FAST
を指定すると、マテリアライズド・ビューのマスター表のマテリアライズド・ビュー・ログが存在していない場合に、CREATE
文は正常に実行されません。ダイレクト・パスINSERT
が行われると、ダイレクト・ローダー・ログが自動的に作成されます。手動での操作は必要ありません。
従来型DMLの変更の場合も、ダイレクト・パスINSERT
操作の場合も、他の条件によって、高速リフレッシュへのマテリアライズド・ビューの適応性が制限されることがあります。
定義する問合せに分析ファンクションまたはXMLTable
ファンクションが含まれている場合、マテリアライズド・ビューは高速リフレッシュに適応しません。
関連項目:
|
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ポリシーにより、マテリアライズド・ビューを作成できなくなります。
注意: USING TRUSTED CONSTRAINTS 句を指定すると、データベース管理者が信頼できると宣言したが、データベースで検証されていないディメンションおよび制約の情報を、Oracle Databaseで使用できます。ディメンションおよび制約の情報が有効であると、パフォーマンスを向上できる場合があります。ただし、この情報が無効であると、正常な状態が戻されても、リフレッシュ・プロシージャによってマテリアライズド・ビューが破損する場合があります。 |
この句を指定しない場合、USING
ENFORCED
CONSTRAINTS
がデフォルトになります。
NEVER REFRESH句
NEVER
REFRESH
を指定すると、Oracle Databaseのリフレッシュ・メカニズムまたはパッケージ・プロシージャを使用したマテリアライズド・ビューのリフレッシュを回避できます。このようなプロシージャから発行された、マテリアライズド・ビューに対するREFRESH
文は、無視されます。この句を指定すると、マテリアライズド・ビューでDML操作を実行できます。この句を無効にするには、ALTER
MATERIALIZED
VIEW
... REFRESH
文を発行する必要があります。
FOR
UPDATE
を指定すると、副問合せ、主キー、オブジェクトまたはROWIDマテリアライズド・ビューを更新できます。アドバンスト・レプリケーションと組み合せて使用した場合、更新はマスターにも影響します。
QUERY
REWRITE
句を使用すると、マテリアライズド・ビューがクエリー・リライトで使用できるかどうかを指定できます。
ENABLE句 ENABLE
を指定すると、クエリー・リライトでマテリアライズド・ビューを使用可能にできます。
クエリー・リライトを使用可能にする場合の制限事項: クエリー・リライトを使用可能にする処理には、次の制限事項があります。
マテリアライズド・ビューのすべてのユーザー定義ファンクションがDETERMINISTIC
である場合のみ、クエリー・リライトを使用可能にできます。
文内の式が反復可能な場合のみ、クエリー・リライトを使用可能にできます。たとえば、CURRENT_TIME
、USER
、順序値(たとえば、CURRVAL
またはNEXTVAL
疑似列)、またはSAMPLE
句(マテリアライズド・ビューの変更内容と異なる行をサンプルとして抽出します)を含めることはできません。
注意:
|
関連項目:
|
DISABLE句 DISABLE
を指定すると、マテリアライズド・ビューをクエリー・リライトで使用禁止にできます。使用禁止にしたマテリアライズド・ビューはリフレッシュ可能です。
マテリアライズド・ビューを定義する問合せを指定します。マテリアライズド・ビューの作成時に、この副問合せが実行され、実行結果がマテリアライズド・ビューに格納されます。この副問合せは、有効なSQL副問合せである必要があります。ただし、すべての副問合せに高速リフレッシュを適用できるわけではなく、すべての副問合せがクエリー・リライトに使用できるわけでもありません。
マテリアライズド・ビューを定義する問合せに関する注意事項:マテリアライズド・ビューには、次の注意事項があります。
BUILD
DEFERRED
を指定する場合、定義する問合せはすぐには実行されません。
マテリアライズド・ビューを定義する問合せのFROM
句に指定する各表およびビューを、それを含むスキーマで修飾することをお薦めします。
仮想プライベート・データベース(VPD)ポリシーを持つマスター表から定義問合せが選択するマテリアライズド・ビューを作成するには、REFRESH
USING
TRUSTED
CONSTRAINTS
句を指定する必要があります。
マテリアライズド・ビューを定義する問合せに関する制限事項: マテリアライズド・ビュー問合せには、次の制限事項があります。
マテリアライズド・ビューを定義する問合せでは、ユーザーSYS
が所有する表、ビューまたはマテリアライズド・ビューから選択できますが、このようなマテリアライズド・ビューに対してQUERY
REWRITE
は使用できません。
マテリアライズド・ビューを定義するとき、定義する問合せの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に対する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;