用途
マテリアライズド・ビューは、問合せ結果を含むデータベース・オブジェクトです。問合せのFROM
句には、表、ビューおよびその他のマテリアライズド・ビューを指定できます。これらをあわせて、マスター表(レプリケーション用語)またはディテール表(データ・ウェアハウス用語)といいます。このマニュアルでは、マスター表という用語を使用します。マスター表が格納されているデータベースをマスター・データベースといいます。
ALTER
MATERIALIZED
VIEW
文を使用すると、既存のマテリアライズド・ビューを次の方法で変更できます。
記憶特性を変更します。
リフレッシュ方法、モードまたは時間を変更します。
別のタイプのマテリアライズド・ビューになるように構造を変更します。
クエリー・リライトを使用可能または使用禁止にします。
注意: 下位互換性を保つために、MATERIALIZED VIEW のかわりにキーワードSNAPSHOT もサポートされています。 |
関連項目:
|
前提条件
マテリアライズド・ビューを変更するために必要な権限は、次のように直接付与される必要があります。
マテリアライズド・ビューが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、ALTER
ANY
MATERIALIZED
VIEW
システム権限が必要です。
クエリー・リライトでマテリアライズド・ビューを使用可能にする場合、次の条件が必要です。
マテリアライズド・ビュー内のすべてのマスター表が自分のスキーマ内にある場合、QUERY
REWRITE
権限が必要です。
いずれかのマスター表が別のスキーマ内にある場合、GLOBAL
QUERY
REWRITE
権限が必要です。
マテリアライズド・ビューが別のユーザーのスキーマ内にある場合、ユーザーおよびそのスキーマ所有者の両方に、前述の適切なQUERY
REWRITE
権限が必要です。また、マテリアライズド・ビューの所有者は、マテリアライズド・ビュー所有者が所有しないすべてのマスター表へのSELECT
権限を持っている必要があります。
構文
alter_materialized_view::=
(physical_attributes_clause::=、modify_mv_column_clause::=、table_compression::=、LOB_storage_clause::=、modify_LOB_storage_clause::=、alter_table_partitioning ::=(「ALTER
TABLE
」の項)、parallel_clause::=、logging_clause::=、allocate_extent_clause::=、deallocate_unused_clause::=、shrink_clause::=、alter_iot_clauses::=、scoped_table_ref_constraint::=、alter_mv_refresh::=を参照)
(storage_clause::=を参照)
(LOB_storage_parameters::=を参照)
LOB_storage_parameters::=
(LOB_parameters::=、storage_clause::=を参照)
LOB_parameters::=
(storage_clause::=、logging_clause::=を参照)
modify_LOB_parameters::=
(storage_clause::=、LOB_retention_clause::=、LOB_compression_clause::=、logging_clause::=、allocate_extent_clause::=、shrink_clause::=、deallocate_unused_clause::=を参照)
logging_clause::=
(size_clause::=を参照)
(size_clause::=を参照)
(index_org_table_clause::=、alter_overflow_clause::=を参照。alter_mapping_table_clauses
は、マテリアライズド・ビューではサポートされていません。)
index_org_table_clause::=
(mapping_table_clause
およびkey_compression
は、マテリアライズド・ビューではサポートされていません。index_org_overflow_clause::=を参照)
index_org_overflow_clause::=
(segment_attributes_clause::=(「ALTER
TABLE
」の項)を参照)
alter_overflow_clause::=
(allocate_extent_clause::=、shrink_clause::=、deallocate_unused_clause::=を参照)
add_overflow_clause::=
(segment_attributes_clause::=(「ALTER
TABLE
」の項)を参照)
scoped_table_ref_constraint::=
セマンティクス
schema
マテリアライズド・ビューが含まれているスキーマを指定します。schema
を指定しない場合、このマテリアライズド・ビューは自分のスキーマ内にあるとみなされます。
materialized_view
変更するマテリアライズド・ビューの名前を指定します。
PCTFREE
、PCTUSED
、INITRANS
パラメータの値(USING
INDEX
句で使用する場合は、INITRANS
パラメータ値のみ)、およびマテリアライズド・ビューの記憶特性を指定します。PCTFREE、PCTUSED
およびINITRANS
パラメータの詳細は「ALTER TABLE」
、記憶特性の詳細は「storage_clause」を参照してください。
modify_mv_column_clause
この句を使用すると、マテリアライズド・ビューのこの列を暗号化または復号化できます。この句の詳細は、「CREATE
TABLE
」の句「encryption_spec」を参照してください。
table_compression
句を使用すると、ディスクおよびメモリーの使用量を削減するために、データ・セグメントを圧縮するかどうかを指定できます。この句のセマンティクスの詳細は、「CREATE TABLE」の句「table_compression
」
を参照してください。
LOB_storage_clause
を使用すると、新しいLOBの記憶特性を指定できます。マテリアライズド・ビューのLOB記憶域は、表の場合と同様に動作します。LOB記憶域パラメータの詳細は、「CREATE TABLE」の「LOB_storage_clause
」
を参照してください。
modify_LOB_storage_clause
を使用すると、LOB属性LOB_item
の物理属性またはLOBオブジェクト属性を変更できます。マテリアライズド・ビューのLOB記憶域の変更は、表の場合と同様に動作します。
マテリアライズド・ビューのパーティション化の句の構文および一般的な機能は、パーティション表と同じです。「ALTER
TABLE
」の「alter_table_partitioning」を参照してください。
マテリアライズド・ビューのパーティション変更の制限事項: partitioning_clauses
では、LOB_storage_clause
またはmodify_LOB_storage_clause
を指定できません。
注意: マテリアライズド・ビューの内容をマスター表の内容と同期させて保持するには、表パーティションを削除または切り捨てた後、表に依存しているすべてのマテリアライズド・ビューを手動で完全リフレッシュすることをお薦めします。 |
MODIFY PARTITION UNUSABLE LOCAL INDEXES この句を使用すると、partition
に関連付けられたすべてのローカル索引パーティションに、UNUSABLE
のマークが付きます。
MODIFY PARTITION REBUILD UNUSABLE LOCAL INDEXES この句を使用すると、partition
に関連付けられた、使用禁止のローカル索引パーティションを再構築できます。
parallel_clause
を使用すると、マテリアライズド・ビューのデフォルトの並列度を変更できます。
この句の詳細は、「CREATE TABLE」の「parallel_clause
」
を参照してください。
この句を使用すると、マテリアライズド・ビューのロギング特性を指定または変更できます。この句の詳細は、「logging_clause」を参照してください。
allocate_extent_clause
allocate_extent_clause
を使用すると、マテリアライズド・ビューの新しいエクステントを明示的に割り当てることができます。この句の詳細は、「allocate_extent_clause」を参照してください。
deallocate_unused_clause
deallocate_unused_clause
句を使用すると、マテリアライズド・ビューの末尾にある未使用領域の割当てを明示的に解除でき、解放された領域を他のセグメントに使用できるようになります。この句の詳細は、「deallocate_unused_clause」を参照してください。
この句を使用すると、マテリアライズド・ビューのセグメントを縮小化できます。この句の詳細は、「CREATE TABLE」の「shrink_clause
」
を参照してください。
アクセス頻度の高いデータについて、CACHE
は、全表スキャンの実行時にこの表に対して取り出された各ブロックを、バッファ・キャッシュのLRUリストの最高使用頻度側に入れることを指定します。この属性は、小規模な参照表で有効です。NOCACHE
は、ブロックをLRUリストの最低使用頻度側に入れることを指定します。この句の詳細は、「CREATE TABLE
」の「CACHE | NOCACHE | CACHE READS」
を参照してください。
alter_iot_clauses
alter_iot_clauses
を使用すると、索引構成マテリアライズド・ビューの特性を変更できます。alter_iot_clauses
のコンポーネントのキーワードおよびパラメータのセマンティクスは、ALTER
TABLE
と同じですが、次の制限事項があります。
索引構成マテリアライズド・ビューの変更の制限事項: index_org_table_clause
のmapping_table_clause
またはkey_compression
句は指定できません。
この句を使用すると、マテリアライズド・ビューのデータをメンテナンスするために使用される索引のINITRANS
パラメータおよびSTORAGE
パラメータの値を変更できます。
USING INDEX句の制限事項: この句では、PCTUSED
またはPCTFREE
パラメータは指定できません。
MODIFY scoped_table_ref_constraint
MODIFY
scoped_table_ref_constraint
句を使用すると、新しい表または新しい列の別名にREF
列または属性の有効範囲を再指定できます。
REF列の有効範囲の再指定の制限事項: ALTER
MATERIALIZED
VIEW
文では、1つのREF
列または属性の有効範囲のみを再指定することができます。この句は、この文以外では使用できません。
alter_mv_refresh
句を使用すると、自動リフレッシュの方法、モードおよび日時のデフォルト値を変更できます。マテリアライズド・ビューのマスター表の内容が変更された場合、マテリアライズド・ビューのデータを更新し、現在マスター表にあるデータを正確に反映させる必要があります。この句によって、自動的にマテリアライズド・ビューをリフレッシュする日時をスケジューリングし、リフレッシュの方法およびモードを指定できます。
注意: この句では、デフォルトのリフレッシュ・オプションのみを設定します。リフレッシュを実際に行う手順は、『Oracle Databaseアドバンスト・レプリケーション』および『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。 |
FAST
を指定すると、増分リフレッシュ方法を指定できます。これはマスター表に対して行った変更に従ってリフレッシュを行います。この変更は、マスター表に関連付けられたマテリアライズド・ビュー・ログ(従来型DML変更の場合)またはダイレクト・ローダー・ログ(ダイレクト・パスINSERT
操作の場合)に格納されます。
従来型DMLの変更の場合も、ダイレクト・パスINSERT
操作の場合も、他の条件によって、高速リフレッシュへのマテリアライズド・ビューの適応性が制限されることがあります。
関連項目:
|
FASTリフレッシュの制限事項: FAST
リフレッシュには、次の制限事項があります。
作成時にFAST
リフレッシュを指定した場合、作成するマテリアライズド・ビューは高速リフレッシュに適応することが検証されています。ALTER
MATERIALIZED
VIEW
文でリフレッシュ方法をFAST
に変更した場合、これは検証されていません。マテリアライズド・ビューが高速リフレッシュに適応しない場合、このビューをリフレッシュしようとするとエラーが戻されます。
定義する問合せに分析ファンクションまたはXMLTable
ファンクションが含まれている場合、マテリアライズド・ビューは高速リフレッシュに適応しません。
暗号化されている列がある場合は、マテリアライズド・ビューを高速リフレッシュできません。
COMPLETE
を指定すると、完全リフレッシュ(マテリアライズド・ビューを定義する問合せを実行することによって実装)が実行されます。完全リフレッシュを指定すると、高速リフレッシュが実行可能であっても、完全リフレッシュが実行されます。
FORCE
を指定すると、リフレッシュ時に、高速リフレッシュが可能な場合は高速リフレッシュを実行し、そうでない場合は完全リフレッシュを実行できます。
ON
COMMIT
を指定すると、マテリアライズド・ビューのマスター表に対するトランザクションをコミットするときに必ずリフレッシュが実行されます。
ON
COMMIT
およびON
DEMAND
の両方を指定することはできません。ON
COMMIT
を指定した場合、START
WITH
またはNEXT
を指定できません。
ON COMMITの制限事項: この句は、マテリアライズド結合ビューおよび単一表マテリアライズド集計ビューにのみサポートされます。
関連項目: 『Oracle Databaseアドバンスト・レプリケーション』および『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。 |
ON
DEMAND
を指定すると、マテリアライズド・ビューは、3つのDBMS_MVIEW
リフレッシュ・プロシージャのいずれかのコールによる要求でリフレッシュされます。ON
COMMIT
およびON
DEMAND
のどちらも指定しなかった場合、ON
DEMAND
がデフォルトになります。
ON
COMMIT
およびON
DEMAND
の両方を指定することはできません。START
WITH
およびNEXT
は、ON
DEMAND
より優先されます。このため、START
WITH
またはNEXT
を指定したときは、ほとんどの場合、ON
DEMAND
を指定しても意味がありません。
関連項目:
|
START
WITH
date
を指定すると、最初の自動リフレッシュ時間を表す日付を指定できます。
NEXT
を指定すると、自動リフレッシュの間隔を計算するための日付式を指定できます。
START
WITH
値およびNEXT
値は、将来の時刻に評価される値です。START
WITH
値を省略した場合、Oracle Databaseはマテリアライズド・ビューの作成時刻に対してNEXT
式を評価することによって、最初の自動リフレッシュ時刻を判断します。START
WITH
値を指定し、NEXT
値を指定しない場合、Oracle Databaseは1回のみマテリアライズド・ビューをリフレッシュします。START
WITH
値およびNEXT
値のどちらも指定しない場合、またはalter_mv_refresh
を指定しない場合、Oracle Databaseはマテリアライズド・ビューを自動リフレッシュしません。
WITH
PRIMARY
KEY
を指定すると、ROWIDマテリアライズド・ビューを主キー・マテリアライズド・ビューに変更できます。主キー・マテリアライズド・ビューを使用すると、高速リフレッシュを継続できるマテリアライズド・ビューの機能に影響せずに、マテリアライズド・ビュー・マスター表を再編成できます。
この句を指定するには、マスター表に、使用可能な主キー制約が定義され、この制約に基づき、主キー情報を記録するマテリアライズド・ビュー・ログが定義されている必要があります。
自動UNDOモードではロールバック・セグメントではなくUNDO表領域が使用されるため、データベースが自動UNDOモードの場合、この句は無効です。自動UNDOモードを使用することをお薦めします。この句は、ロールバック・セグメントが使用される以前のバージョンのOracle Databaseが含まれるレプリケーション環境との下位互換性のためにサポートされています。
この句の詳細は、「CREATE
MATERIALIZED
VIEW
」の「USING ROLLBACK SEGMENT句」を参照してください。
USING ... CONSTRAINTS句
この句のセマンティクスは、CREATE
MATERIALIZED
VIEW
およびALTER
MATERIALIZED
VIEW
文で同じです。詳細は、「CREATE MATERIALIZED
VIEW
」の「USING ... CONSTRAINTS句」
を参照してください。
この句を使用すると、マテリアライズド・ビューをクエリー・リライトで使用できるかどうかを指定できます。
ENABLE句
ENABLE
を指定すると、クエリー・リライトでマテリアライズド・ビューを使用可能にできます。
マテリアライズド・ビューを使用可能にする場合の制限事項: マテリアライズド・ビューを使用可能にする処理には、次の制限事項があります。
マテリアライズド・ビューが無効または使用禁止の場合、ENABLE
モードでもクエリー・リライトに適応しません。
マテリアライズド・ビューの全体または一部がビューから作成されている場合、クエリー・リライトを使用可能にできません。
マテリアライズド・ビューのすべてのユーザー定義ファンクションがDETERMINISTIC
である場合のみ、クエリー・リライトを使用可能にできます。
文内の式が反復可能な場合のみ、クエリー・リライトを使用可能にできます。たとえば、CURRENT_TIME
またはUSER
を含めることはできません。
関連項目: クエリー・リライトの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。 |
DISABLE句
DISABLE
を指定すると、クエリー・リライトでマテリアライズド・ビューを使用禁止にできます。マテリアライズド・ビューが無効な場合、使用禁止であるかどうかにかかわらず、クエリー・リライトの使用には適応しません。ただし、使用禁止にされたマテリアライズド・ビューをリフレッシュすることはできます。
COMPILE
を指定すると、マテリアライズド・ビューを明示的に再検証できます。マテリアライズド・ビューが依存するオブジェクトを削除または変更した場合、マテリアライズド・ビューはアクセス可能のままですが、クエリー・リライトに対しては無効です。再度、明示的にマテリアライズド・ビューの妥当性チェックを行い、クエリー・リライトの使用に適応させるには、この句を使用します。
マテリアライズド・ビューの再妥当性チェックに失敗すると、リフレッシュできなくなるか、またはクエリー・リライトに使用できなくなります。
この句を使用すると、マスター表が変更された後のマテリアライズド・ビューの失効状態を管理することができます。CONSIDER
FRESH
は、マテリアライズド・ビューが最新であり、TRUSTED
またはSTALE_TOLERATED
モードでのクエリー・リライトに適応するとみなされるように指定します。
注意: CONSIDER FRESH 句は、CONSIDER FRESH 句を発行する前にマテリアライズド・ビュー・ログの行を適用したり、パーティション・チェンジ・トラッキングの変更をマテリアライズド・ビューに適用しないようにデータベースに指示します。つまり、保留中の変更は無視され削除されます。これらはマテリアライズド・ビューに適用されません。これにより、マテリアライズド・ビューに、実表とほぼ同じ量のデータが含まれる可能性があります。 |
Oracle Databaseは、マテリアライズド・ビューが最新であるかどうかを保証できないため、ENFORCED
モードでのクエリー・リライトはサポートしません。また、この句はマテリアライズド・ビューの失効状態をUNKNOWN
に設定します。失効状態は、ALL_MVIEWS
、DBA_MVIEWS
およびUSER_MVIEWS
の各データ・ディクショナリ・ビューのSTALENESS
列に表示されます。
いずれかのマスター表の内容が変更された場合、マテリアライズド・ビューは失効します。この句は、Oracle Databaseに対して、マテリアライズド・ビューが最新で、変更されていないものと仮定するように指示します。そのため、リフレッシュが保留されているこれらの表に対する実際の更新内容は、マテリアライズド・ビューから削除されます。
関連項目:
|
例
自動リフレッシュの例: 次の文は、マテリアライズド・ビューsales_by_month_by_state
(「マテリアライズド集計ビューの作成例:」で作成)のリフレッシュ方法のデフォルトをFAST
に変更します。
ALTER MATERIALIZED VIEW sales_by_month_by_state REFRESH FAST;
これ以降のマテリアライズド・ビューの自動リフレッシュは、高速リフレッシュになります。これは、単純なマテリアライズド・ビューであり、そのマスター表には、マテリアライズド・ビューの作成前または最後のリフレッシュ前に作成されたマテリアライズド・ビュー・ログがあります。
REFRESH
句にSTART
WITH
またはNEXT
の値が指定されていないため、マテリアライズド・ビューsales_by_month_by_state
を作成したとき、または最後に変更したときにREFRESH
句で設定されたリフレッシュ間隔がそのまま使用されます。
次の文は、マテリアライズド・ビューsales_by_month_by_state
の新しい自動リフレッシュ間隔を設定します。
ALTER MATERIALIZED VIEW sales_by_month_by_state REFRESH NEXT SYSDATE+7;
REFRESH
句にSTART
WITH
の値が指定されていないため、マテリアライズド・ビューsales_by_month_by_state
が作成されたとき、または最後に変更されたときに指定されたSTART
WITH
とNEXT
の値によって設定された日時に次の自動リフレッシュが行われます。
次回の自動リフレッシュのときに、このマテリアライズド・ビューがリフレッシュされるとともに、NEXT
の式SYSDATE
+7が評価されて次回の自動リフレッシュの日時が決定し、それ以降もこのマテリアライズド・ビューのリフレッシュは自動的に週1回行われます。REFRESH
句ではリフレッシュ方法が明示的には指定されていないため、CREATE
MATERIALIZED
VIEW
文または最後に実行されたALTER
MATERIALIZED
VIEW
文のREFRESH
句で指定されたリフレッシュ方法が引き続き使用されます。
CONSIDER FRESHの例: 次の文は、Oracle Databaseがマテリアライズド・ビューsales_by_month_by_state
を最新であるとみなすように指定します。この文を使用すると、sales_by_month_by_state
のマスター表に対してパーティション・メンテナンス操作を実行した後でも、sales_by_month_by_state
に対してTRUSTED
モードでのクエリー・リライトが可能です。
ALTER MATERIALIZED VIEW sales_by_month_by_state CONSIDER FRESH;
前の文の結果として、マテリアライズド・ビューの最後のリフレッシュ以降に実表に加えられたパーティション管理操作は、マテリアライズド・ビューには適用されません。たとえば、マテリアライズド・ビューの次のリフレッシュの前にCONSIDER
FRESH
が使用されると、実表内のパーティションの中のデータに対する追加、削除または変更はマテリアライズド・ビューに反映されません。詳細は、CONSIDER FRESHを参照してください。
完全リフレッシュの例: 次の文は、マテリアライズド・ビューemp_data
(「マテリアライズド・ビューの定期的リフレッシュ例:」
で作成)の新しいリフレッシュ方法、NEXTで示す新しいリフレッシュ日時および新しい自動リフレッシュ間隔を指定します。
ALTER MATERIALIZED VIEW emp_data REFRESH COMPLETE START WITH TRUNC(SYSDATE+1) + 9/24 NEXT SYSDATE+7;
START
WITH
句の値によって、このマテリアライズド・ビューの次回の自動リフレッシュは翌日の午前9時に行うように設定されます。この時刻になると、マテリアライズド・ビューの完全リフレッシュが実行されるとともに、NEXT
の式が評価されて、それ以降はこのマテリアライズド・ビューのリフレッシュが毎週実行されます。
クエリー・リライトを使用可能にする例: 次の文は、マテリアライズド・ビューemp_data
のクエリー・リライトを使用可能にし、暗黙的に再妥当性チェックを行います。
ALTER MATERIALIZED VIEW emp_data ENABLE QUERY REWRITE;
主キー・マテリアライズド・ビューの例: 次の文は、ROWIDマテリアライズド・ビューorder_data
(「ROWIDマテリアライズド・ビューの作成例:」で作成)を主キー・マテリアライズド・ビューに変更します。この例では、order_data
に主キーを持つマテリアライズド・ビュー・ログを定義していることが必要です。
ALTER MATERIALIZED VIEW order_data REFRESH WITH PRIMARY KEY;
マテリアライズド・ビューのコンパイル例: 次の文は、マテリアライズド・ビューstore_mv
を再検証します。
ALTER MATERIALIZED VIEW order_data COMPILE;