ALTERMATERIALIZEDVIEWLOG
目的
マテリアライズド・ビュー・ログとは、マテリアライズド・ビューのマスター表に関連付けられる表です。ALTER
MATERIALIZED
VIEW
LOG
文を使用すると、既存のマテリアライズド・ビュー・ログの記憶特性またはタイプを変更できます。
ノート:
下位互換性を保つために、MATERIALIZED
VIEW
のかわりにキーワードSNAPSHOT
もサポートされています。
関連項目:
-
マテリアライズド・ビュー・ログの作成については、「CREATE MATERIALIZED VIEW LOG」を参照してください。
-
マテリアライズド・ビューのリフレッシュ方法など、マテリアライズド・ビューの詳細は、「ALTER MATERIALIZED VIEW」を参照してください。
-
マテリアライズド・ビューの様々なタイプの詳細は、「CREATE MATERIALIZED VIEW」を参照してください。
前提条件
マスター表の所有者であるか、またはマスター表に対するREAD
またはSELECT
権限およびマテリアライズド・ビュー・ログに対するALTER
権限が必要です。
関連項目:
ALTER
MATERIALIZED
VIEW
LOG
の前提条件の詳細は、『Oracle Database管理者ガイド』を参照してください。
構文
alter_materialized_view_log::=
(physical_attributes_clause::=、add_mv_log_column_clause::=、alter_table_partitioning::= (ALTER
TABLE
の)、parallel_clause::=、logging_clause::=、allocate_extent_clause::=、shrink_clause::=、move_mv_log_clause::=、mv_log_augmentation::=、mv_log_purge_clause::=、for_refresh_clause::=)
add_mv_log_column_clause::=
shrink_clause::=
move_mv_log_clause::=
new_values_clause::=
mv_log_purge_clause::=
for_refresh_clause::=
セマンティクス
IF EXISTS
IF EXISTS
は、既存の表を変更する場合に指定します。
ALTER VIEW
にIF NOT EXISTS
を指定すると、ORA-11544: Incorrect IF EXISTS clause for ALTER/DROP statement
が発生します。
FORCE
FORCE
を指定すると、ADD
句で指定したいずれかの項目がすでにマテリアライズド・ビュー・ログに指定されている場合、エラーは戻されませんが、既存の要素は無視され、マテリアライズド・ビュー・ログに存在しないすべての項目が追加されます。同様に、INCLUDING
NEW
VALUES
を指定すると、この属性がすでにマテリアライズド・ビュー・ログに指定されている場合、冗長は無視され、エラーも戻されません。
schema
マスター表が定義されているスキーマを指定します。schema
を指定しない場合、マテリアライズド・ビュー・ログは自分のスキーマ内にあるとみなされます。
table
変更するマテリアライズド・ビュー・ログに関連付けられたマスター表の名前を指定します。
physical_attributes_clause
physical_attributes_clause
を使用すると、PCTFREE
、PCTUSED
およびINITRANS
の各パラメータの値、マテリアライズド・ビュー・ログ、パーティションおよびオーバーフロー・データ・セグメントの記憶特性、またはパーティション・マテリアライズド・ビュー・ログのデフォルト特性を変更できます。
マテリアライズド・ビュー・ログの物理属性の制限事項
マテリアライズド・ビュー・ログがローカル管理表領域内に存在する場合は、storage_clause
を使用してエクステント・パラメータを変更することはできません。このパラメータについては、「CREATE TABLE」を参照してください。
add_mv_log_column_clause
マテリアライズド・ビュー・ログのマスター表に列を追加した場合、列はマテリアライズド・ビュー・ログに自動的には追加されません。そのため、この句を使用してマテリアライズド・ビュー・ログに列を追加します。マスター表の対応する列が暗号化されている場合、新規に追加された列はOracle Databaseによって暗号化されます。
alter_table_partitioning
パーティション化の句の構文および一般的な機能は、ALTER
TABLE
文の場合と同じです。「ALTER
TABLE
」の「alter_table_partitioning」を参照してください。
マテリアライズド・ビュー・ログのパーティションの変更の制限事項
マテリアライズド・ビュー・ログのパーティションの変更には、次の制限事項があります。
-
マテリアライズド・ビュー・ログのパーティションを変更する場合、
LOB_storage_clause
またはmodify_LOB_storage_clause
は使用できません。 -
マテリアライズド・ビュー・ログのパーティションを削除、切捨てまたは交換しようとすると、Oracle Databaseはエラーを戻します。
parallel_clause
parallel_clause
を使用すると、マテリアライズド・ビュー・ログへのパラレル操作がサポートされているかどうかを指定できます。
この句の詳細は、「CREATE
TABLE
」の「parallel_clause」を参照してください。
logging_clause
マテリアライズド・ビュー・ログに対するロギング属性を指定します。この句の詳細は、「logging_clause」を参照してください。
allocate_extent_clause
allocate_extent_clause
を使用すると、マテリアライズド・ビュー・ログの新しいエクステントを明示的に割り当てることができます。この句の詳細は、「allocate_extent_clause」を参照してください。
shrink_clause
この句を使用すると、マテリアライズド・ビュー・ログのセグメントを縮小化できます。この句の詳細は、「CREATE
TABLE
」の「shrink_clause」を参照してください。
move_mv_log_clause
MOVE
句を使用すると、マテリアライズド・ビュー・ログ表を他の表領域に移動して、マテリアライズド・ビュー・ログの他のセグメントまたは記憶域属性を変更したり、マテリアライズド・ビュー・ログのパラレル化を変更できます。
マテリアライズド・ビュー・ログの移動の制限事項
segment_attributes
のstorage_clause
のENCRYPT
句は、マテリアライズド・ビュー・ログでは無効です。
CACHE | NOCACHE句
アクセス頻度が高いデータについて、CACHE
は、全表スキャンの実行時にこのログ用に取り出された各ブロックを、バッファ・キャッシュ内のLRUリストの最高使用頻度側に入れることを指定します。この属性は、小規模な参照表で有効です。NOCACHE
は、ブロックをLRUリストの最低使用頻度側に入れることを指定します。この句の詳細は、CREATE
TABLE
のドキュメントの「CACHE | NOCACHE | CACHE READS」を参照してください。
mv_log_augmentation
ADD
句を使用すると、マテリアライズド・ビュー・マスター表内の行が変更される際に、主キー値、ROWID値、オブジェクトID値または順序も記録するようにマテリアライズド・ビュー・ログを拡張できます。また、この句は、新しく列を記録するためにも使用できます。
これらの情報の記録を停止する場合は、マテリアライズド・ビュー・ログを削除してから、再作成する必要があります。マテリアライズド・ビュー・ログを削除した後再作成した場合、マスター表に依存するすべての既存マテリアライズド・ビューが、次回のリフレッシュ時に強制的に完全リフレッシュされます。
マテリアライズド・ビュー・ログの拡張の制限事項
各マテリアライズド・ビュー・ログに指定できるのは、PRIMARY
KEY
、ROWID
、OBJECT
ID
、SEQUENCE
、および列リストの各列を1つずつです。このALTER
文にPRIMARY
KEY
、ROWID
、OBJECT
ID
、SEQUENCE
および列リストを指定できるのはそれぞれ1回のみです。また、FORCE
オプションを指定しないかぎり、これらの値のいずれかが作成時に(暗黙的または明示的に)指定された場合、このALTER
文にはそれらの値を指定できません。
OBJECT
ID
を指定すると、更新されるすべての行の適切なオブジェクト識別子をマテリアライズド・ビュー・ログに記録できます。
OBJECT ID句の制限事項
OBJECT
ID
はオブジェクト表のログに対してのみ指定でき、記憶表に対しては指定できません。
PRIMARY
KEY
を指定すると、更新されるすべての行の主キー値をマテリアライズド・ビュー・ログに記録できます。
ROWID
を指定すると、更新されるすべての行のROWID値をマテリアライズド・ビュー・ログに記録できます。
SEQUENCE
SEQUENCE
を指定すると、追加の順序情報を提供する順序値をマテリアライズド・ビュー・ログに記録できます。
column
更新されるすべての行に対して、マテリアライズド・ビュー・ログに記録する値を持つ新しい列を指定します。通常、フィルタ列(副問合せマテリアライズド・ビューが参照する主キー以外の列)および結合列(副問合せのWHERE
句で結合を定義する主キー以外の列)を指定します。
関連項目:
-
マテリアライズド・ビュー・ログに値を明示的および暗黙的に含める方法については、「CREATE MATERIALIZED VIEW」を参照してください。
-
フィルタ列および結合列の詳細は、『Oracle Database管理者ガイド』を参照してください。
NEW
VALUES
句を使用すると、更新DML操作で、古い値と新しい値の両方をマテリアライズド・ビュー・ログに保存するかどうかを指定できます。ALTER
MATERIALIZED
VIEW
LOG
文で追加した列のみでなく、ログのすべての列にこの句で設定した値を適用します。
INCLUDING
INCLUDING
を指定すると、新しい値と古い値の両方をログに保存できます。このログが単一表マテリアライズド集計ビューの表用で、マテリアライズド・ビューに高速リフレッシュを実行する場合、INCLUDING
を指定してください。
EXCLUDING
EXCLUDING
を指定すると、ログに新しい値が記録されなくなります。この句を使用すると、新しい値の記録によるオーバーヘッドを回避できます。
マテリアライズド・ビューのリフレッシュ・モードをFAST
以外のモードに変更した場合を除き、高速リフレッシュが可能な単一表マテリアライズド集計ビューが定義されている場合は、EXCLUDING
NEW
VALUES
を使用しないでください。
mv_log_purge_clause
この句を使用すると、次のようにマテリアライズド・ビュー・ログのパージ属性を変更できます。
-
パージを、
IMMEDIATE
SYNCHRONOUS
からIMMEDIATE
ASYNCHRONOUS
に、またはIMMEDIATE
ASYNCHRONOUS
からIMMEDIATE
SYNCHRONOUS
に変更します。 -
パージを
IMMEDIATE
からスケジュール実行に、またはスケジュール実行からIMMEDIATE
に変更します。 -
新しい開始時間と、新しい
next
時間およびinterval
を指定します。
パージをスケジュール実行からIMMEDIATE
に変更すると、そのマテリアライズド・ビュー・ログに関連付けられているスケジュール実行のパージ・ジョブは削除されます。パージをIMMEDIATE
からスケジュール実行に変更すると、指定した属性を持つパージ・ジョブが作成されます。スケジュール実行のパージ属性を変更すると、スケジューラ・パージ・ジョブ内では指定した属性のみが変更されます。
スケジュール実行のパージ属性を変更する場合を除いて、ログ・パージを現在の状態に変更する場合(つまり変更しない状態にする場合)は、FORCE
を指定する必要があります。
マテリアライズド・ビュー・ログに対してパージ時間または間隔がすでに設定されているかどうかを確認するには、*_MVIEW_LOGS
データ・ディクショナリ・ビューを問い合せます。この句のセマンティクスの詳細は、「CREATE
MATERIALIZED
VIEW
LOG
」の句「mv_log_purge_clause」を参照してください。
for_refresh_clause
この句を使用すると、マテリアライズド・ビュー・ログに使用するリフレッシュ方法を変更できます。
FOR SYNCHRONOUS REFRESH
この句を指定すると、高速リフレッシュまたは完全リフレッシュを同期リフレッシュに変更できます。ステージング・ログが作成されます。
高速リフレッシュを変更する場合は、この句を使用する前に、次の条件が満たされていることを確認してください。
-
マテリアライズド・ビュー・ログ内のすべての変更を使用している。
-
マスター表に関連付けられたREFRESH ON DEMANDモードのマテリアライズド・ビューがリフレッシュされている。
-
マスター表に関連付けられたREFRESH ON COMMITモードのマテリアライズド・ビューがREFRESH ON DEMANDモードのマテリアライズド・ビューに変換されている。
この句の使用後には、マスター表に対する直接のDML操作は実行できなくなります。データの変更操作の準備と実行には、DBMS_SYNC_REFRESH
パッケージに含まれるプロシージャを使用する必要があります。
FOR FAST REFRESH
この句を指定すると、同期リフレッシュまたは完全リフレッシュを高速リフレッシュに変更できます。マテリアライズド・ビュー・ログが作成されます。
同期リフレッシュを高速リフレッシュに変更する場合は、この句を使用する前に、ステージング・ログ内のすべての変更を使用していることを確認してください。
この句の使用後には、マスター表に対する直接のDML操作を実行できるようになります。
この句のセマンティクスの詳細は、CREATE
MATERIALIZED
VIEW
LOG
の句「for_refresh_clause」を参照してください。
例
ROWIDマテリアライズド・ビュー・ログ: 例
次の文は、既存の主キー・マテリアライズド・ビュー・ログを変更して、ROWID情報も記録されるようにします。
ALTER MATERIALIZED VIEW LOG ON order_items ADD ROWID;
マテリアライズド・ビュー・ログEXCLUDING NEW VALUES: 例
次の文は、フィルタ列を追加し、新規の値を除外することによって、hr.employees
のマテリアライズド・ビュー・ログを変更します。このログを使用するマテリアライズド集計ビューは、これ以降高速リフレッシュされません。ただし、高速リフレッシュが不要になる場合は、この処理によって新しい値の記録によるオーバーヘッドを回避できます。
ALTER MATERIALIZED VIEW LOG ON employees ADD (commission_pct) EXCLUDING NEW VALUES;