説明
このステートメントは、マテリアライズドビューのログを作成するために使用されます。
マテリアライズドビューのログ(Materialized View Log、mlog)は、ベーステーブルの増分更新データを記録し、マテリアライズドビューの高速更新機能をサポートします。mlogは変更を追跡するレコードテーブルであり、これらの変更を対応するマテリアライズドビューに適用することで、高速な更新を実現します。
説明
OceanBaseデータベースでは、mlogは現在パーティションの指定をサポートしていません。mlogのパーティションはベーステーブルのパーティションとバインドされています。
権限要件
マテリアライズドビューのログを作成するには、CREATE TABLE権限とベーステーブルに対するSELECT権限が必要です。OceanBaseデータベースの権限の詳細については、MySQLモードの権限分類を参照してください。
構文
CREATE MATERIALIZED VIEW LOG ON [database.] 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
}
パラメータ説明
パラメータ |
説明 |
|---|---|
| database. | オプション。マテリアライズドビューのログのベーステーブルが存在するデータベースを指定します。database.を省略した場合、デフォルトでベーステーブルは作成者自身のデータベースに存在します。 |
| 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つの時刻式が将来の時点を表すようにしてください。そうでない場合、エラーが発生します。
現在のタイムゾーンの時間を表すには、sysdate() の使用を推奨します。時刻式の例は以下のとおりです:
START WITH sysdate() NEXT sysdate() + INTERVAL 1 DAY
上記の句は、現在時刻(sysdate())から始まり、1日ごとに期限切れのマテリアライズドビューのログレコードをクリーンアップすることを示します。
例
テーブル
test_tbl1を作成します。obclient> CREATE TABLE test_tbl1 (col1 INT PRIMARY KEY, col2 VARCHAR(20), col3 INT);test_tbl1テーブルにマテリアライズドビューのログを作成します。マテリアライズドビューのログの並列処理の並列度を5に指定し、マテリアライズドビューのログがcol2列の変更情報を記録し、変更前後の新しい値も記録するようにします。また、マテリアライズドビューのログを、現在の日付から始まり、1日ごとに期限切れのマテリアライズドビューのログレコードをクリーンアップするように設定します。obclient> CREATE MATERIALIZED VIEW LOG ON test_tbl1 PARALLEL 5 WITH SEQUENCE(col2) INCLUDING NEW VALUES PURGE START WITH sysdate() NEXT sysdate() + INTERVAL 1 DAY;テーブル
test_tbl1のマテリアライズドビューのログ情報を確認します。obclient> DESC mlog$_test_tbl1;実行結果は次のとおりです:
+------------+-------------+------+------+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+------+---------+-------+ | col1 | int(11) | NO | PRI | NULL | | | col2 | varchar(20) | YES | | NULL | | | SEQUENCE$$ | bigint(20) | NO | PRI | NULL | | | DMLTYPE$$ | varchar(1) | YES | | NULL | | | OLD_NEW$$ | varchar(1) | YES | | NULL | | +------------+-------------+------+------+---------+-------+ 5 rows in set