説明
このステートメントは、マテリアライズドビューのログを作成するために使用されます。
マテリアライズドビューのログ(Materialized View Log、mlog)は、ベーステーブル(通常のテーブルまたはマテリアライズドビュー)の増分更新データを記録し、マテリアライズドビューの高速リフレッシュ機能をサポートします。mlog は、ベーステーブルの変更を追跡し、これらの変更を対応するマテリアライズドビューに適用して高速なリフレッシュを実現するためのレコードテーブルです。
説明
OceanBaseデータベースでは、mlog でパーティションを指定することは現在サポートされておらず、mlog のパーティションはベーステーブルのパーティションとバインドされています。
権限要件
マテリアライズドビューのログを作成するには、CREATE TABLE とベーステーブルの SELECT 権限が必要です。OceanBaseデータベースの権限の詳細については、MySQLモードの権限分類を参照してください。
構文
CREATE [OR REPLACE] 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
}
パラメータの説明
| パラメータ | 説明 |
|---|---|
| OR REPLACE | オプション。OR REPLACE を指定すると、対応する mlog が既に存在している場合、定義に従って新しい mlog を作成し、既存の mlog を新しい mlog に置き換えます。mlog の再作成処理は、マテリアライズドビューおよびベーステーブルの通常の読み書きに影響を与えません。
説明OceanBaseデータベースV4.3.5では、V4.3.5 BP3バージョンから |
| 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を作成します。CREATE TABLE test_tbl1 (col1 INT PRIMARY KEY, col2 VARCHAR(20), col3 INT);test_tbl1テーブルにマテリアライズドビューのログを作成します。マテリアライズドビューのログをパラレル処理するパラレル度を5に指定し、マテリアライズドビューのログがcol2列の変更情報を記録するように設定します。また、変更前後の新しい値も記録されます。さらに、マテリアライズドビューのログは現在の日付から始まり、1日ごとに期限切れのマテリアライズドビューのログレコードをクリーンアップするように設定します。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のマテリアライズドビューのログ情報を確認します。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 settest_tbl1テーブルのマテリアライズドビューのログを変更して、col2とcol3列の変更情報を記録するようにします。CREATE OR REPLACE MATERIALIZED VIEW LOG ON test_tbl1 PARALLEL 5 WITH SEQUENCE(col2 ,col3) INCLUDING NEW VALUES PURGE START WITH sysdate() NEXT sysdate() + INTERVAL 1 DAY;テーブル
test_tbl1のマテリアライズドビューのログ情報を確認します。DESC mlog$_test_tbl1;実行結果は次のとおりです:
+------------+-------------+------+------+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+------+---------+-------+ | col1 | int(11) | NO | PRI | NULL | | | col2 | varchar(20) | YES | | NULL | | | col3 | int(11) | YES | | NULL | | | SEQUENCE$$ | bigint(20) | NO | PRI | NULL | | | DMLTYPE$$ | varchar(1) | YES | | NULL | | | OLD_NEW$$ | varchar(1) | YES | | NULL | | +------------+-------------+------+------+---------+-------+ 6 rows in set