説明
このステートメントは、マテリアライズドビューのログを作成するために使用されます。
マテリアライズドビューのログ(Materialized View Log、mlog)は、ベーステーブルの増分更新データを記録し、マテリアライズドビューの高速更新機能をサポートします。mlogは変更を追跡するレコードテーブルであり、ベーステーブルの変更を対応するマテリアライズドビューに適用することで、高速更新を実現します。
説明
OceanBaseデータベースでは、mlogでパーティションを指定することは現在サポートされていません。mlogのパーティションとベーステーブルのパーティションはバインドされています。
権限要件
マテリアライズドビューのログを作成するには、CREATE TABLE 権限とベーステーブルに対する SELECT 権限が必要です。OceanBaseデータベースの権限の詳細については、Oracleモードの権限分類を参照してください。
構文
CREATE [OR REPLACE] MATERIALIZED VIEW LOG ON [schema.] table
[parallel_clause]
[with_clause]
[mv_log_purge_clause];
parallel_clause:
NOPARALLEL
| PARALLEL integer
with_clause:
WITH [ {PRIMARY KEY | ROWID | SEQUENCE}
[ { , PRIMARY KEY | , ROWID | , SEQUENCE }]... ]
(column_name [, column_name]...)
[new_values_clause]
new_values_clause:
{INCLUDING | EXCLUDING} NEW VALUES
mv_log_purge_clause:
PURGE {IMMEDIATE [ SYNCHRONOUS ]
| START WITH datetime_expr [NEXT datetime_expr]
| [START WITH datetime_expr] NEXT datetime_expr
}
パラメータ説明
パラメータ |
説明 |
|---|---|
| OR REPLACE | オプションです。OR REPLACE を指定すると、対応する mlog が既に存在する場合、定義に従って新しい mlog を作成し、既存の mlog を新しいものに置き換えます。mlog の再作成処理は、マテリアライズドビューおよびベーステーブルの通常の読み書きに影響しません。 |
| schema. | オプションです。マテリアライズドビューのログを保持するベーステーブルが属するスキーマを指定します。schema. を省略した場合、デフォルトでベーステーブルは作成者自身のスキーマに配置されます。 |
| table | マテリアライズドビューのログに対応するベーステーブル名を指定します。 |
| parallel_clause | オプションです。マテリアライズドビューテーブルのDOPを指定するために使用され、マテリアライズドビューのログを並列処理するレベルを指定します。詳細については、後述の parallel_clause を参照してください。 |
| with_clause | オプションです。マテリアライズドビューのログに含まれる補助列を指定します。これにより、ベーステーブルに変更が発生した際の主キー(PRIMARY KEY)と行識別子(ROWID)を記録するかどうかを指示できます。また、この句を使用してシーケンス(SEQUENCE)を追加し、マテリアライズドビューのログに追加のソート情報を提供することもできます。詳細については、後述の with_clause を参照してください。 |
| column_name | オプションです。すべての変更行のマテリアライズドビューのログに値を記録する列名を指定します。 |
| new_values_clause | オプションです。更新操作における古い値と新しい値をマテリアライズドビューのログに同時に記録するかどうかを指定します。詳細については、後述の new_values_clause を参照してください。 |
| mv_log_purge_clause | オプションです。マテリアライズドビューのログデータのクリア時間を指定します。詳細については、後述の mv_log_purge_clause を参照してください。 |
parallel_clause
NOPARALLEL:デフォルト設定で、並列度は1です。PARALLEL integer:並列度を指定します。integerの値は1以上である必要があります。
with_clause
PRIMARY KEY:マテリアライズドビューのログにベーステーブルの主キーカラムが記録されることを示します。主キーを持つテーブルにのみ適用されます。指定しない場合、システムはマテリアライズドビューのログにこの属性を自動的に追加し、マテリアライズドビューのログにはデフォルトで主キーカラムが含まれます。ROWID:マテリアライズドビューのログにベーステーブルの行識別子(ROWID)が記録されることを示します。指定しない場合、システムはマテリアライズドビューのログにこの属性を自動的に追加し、マテリアライズドビューのログにはデフォルトでM_ROW$$列が含まれます。SEQUENCE:マテリアライズドビューのログにトランザクション内の複数行の更新シーケンス番号(seq_no)が記録されることを示します。システムはマテリアライズドビューのログにこの属性を自動的に追加し、マテリアライズドビューのログにはデフォルトでSEQUENCE$$列が含まれます。
new_values_clause
INCLUDING:デフォルト設定で、マテリアライズドビューのログに新旧の値を保存できることを示します。マテリアライズドビューの高速なリフレッシュをサポートするには、INCLUDING NEW VALUESを指定する必要があります。EXCLUDING:マテリアライズドビューのログに新しい値を記録することを禁止することを示します。EXCLUDING NEW VALUESの使用は避けてください。使用するとエラーが発生します。
mv_log_purge_clause
注意
マテリアライズドビューのログから対応するデータがクリアされるのは、マテリアライズドビューが正常にリフレッシュされた後です。
IMMEDIATE:マテリアライズドビューがリフレッシュされるたびに、対応するマテリアライズドビューのログを直ちにクリアすることを示します。デフォルト値はSYNCHRONOUSです。SYNCHRONOUS:オプションです。クリアを同期実行することを示します。
START WITH datetime_expr [NEXT datetime_expr]:START WITH datetime_expr:マテリアライズドビューのログの最初のクリア時間を示します。[NEXT datetime_expr]:オプションです。次回のマテリアライズドビューのログのクリア時間を示します。次回のクリア時間を設定するために使用します。
[START WITH datetime_expr] NEXT datetime_expr:START WITH datetime_exprパラメータのみを指定し、NEXT datetime_exprパラメータを指定しなかった場合、マテリアライズドビューのログの最初のクリア時間はNEXT datetime_exprパラメータの値に設定されます。
注意
START WITH datetime_expr と NEXT datetime_expr の2つの時刻式を将来の時点に設定してください。そうでない場合、エラーが発生します。
現在のタイムゾーンの時間を表すには、current_date の使用を推奨します。時刻式の例:
現在の時間(
current_date)から、10秒ごとに期限切れのマテリアライズドビューのログレコードをクリーンアップします。START WITH current_date NEXT current_date + INTERVAL '10' SECOND現在の時間(
current_date)から、10時間ごとに期限切れのマテリアライズドビューのログレコードをクリーンアップします。START WITH current_date NEXT current_date + INTERVAL '10' HOUR現在の時間(
current_date)から、1日ごとに期限切れのマテリアライズドビューのログレコードをクリーンアップします。START WITH current_date NEXT current_date + 1
例
テーブル
test_tbl1を作成します。obclient> CREATE TABLE test_tbl1 (col1 NUMBER PRIMARY KEY, col2 VARCHAR2(20), col3 NUMBER);test_tbl1テーブルにマテリアライズドビューのログを作成します。マテリアライズドビューのログを並列処理する並列度を5に指定し、マテリアライズドビューのログがcol2列の変更情報を記録し、変更前後の新しい値も記録するように設定します。また、マテリアライズドビューのログを現在の日付から始めて、1日ごとに期限切れのマテリアライズドビューのログレコードをクリーンアップするように設定します。obclient> CREATE MATERIALIZED VIEW LOG ON test_tbl1 PARALLEL 5 WITH SEQUENCE(col2) INCLUDING NEW VALUES PURGE START WITH current_date NEXT current_date + 1;テーブル
test_tbl1のマテリアライズドビューのログ情報を確認します。obclient> DESC mlog$_test_tbl1;実行結果は次のとおりです:
+------------+--------------+------+------+---------+-------+ | FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA | +------------+--------------+------+------+---------+-------+ | COL1 | NUMBER | NO | PRI | NULL | NULL | | COL2 | VARCHAR2(20) | YES | NULL | NULL | NULL | | SEQUENCE$$ | BIGINT(20) | NO | PRI | NULL | NULL | | DMLTYPE$$ | VARCHAR2(1 ) | YES | NULL | NULL | NULL | | OLD_NEW$$ | VARCHAR2(1 ) | YES | NULL | NULL | NULL | +------------+--------------+------+------+---------+-------+ 5 rows in settest_tbl1テーブルのマテリアライズドビューのログを変更し、col2列とcol3列の変更情報を記録するようにします。obclient> CREATE OR REPLACE MATERIALIZED VIEW LOG ON test_tbl1 PARALLEL 5 WITH SEQUENCE(col2, col3) INCLUDING NEW VALUES PURGE START WITH current_date NEXT current_date + 1;テーブル
test_tbl1のマテリアライズドビューのログ情報を確認します。obclient> DESC mlog$_test_tbl1;実行結果は次のとおりです:
+------------+--------------+------+------+---------+-------+ | FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA | +------------+--------------+------+------+---------+-------+ | COL1 | NUMBER | NO | PRI | NULL | NULL | | COL2 | VARCHAR2(20) | YES | NULL | NULL | NULL | | COL3 | NUMBER | YES | NULL | NULL | NULL | | SEQUENCE$$ | BIGINT(20) | NO | PRI | NULL | NULL | | DMLTYPE$$ | VARCHAR2(1 ) | YES | NULL | NULL | NULL | | OLD_NEW$$ | VARCHAR2(1 ) | YES | NULL | NULL | NULL | +------------+--------------+------+------+---------+-------+ 6 rows in set