説明
このステートメントは、マテリアライズドビューのログを作成するために使用されます。
マテリアライズドビューのログ(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 の再作成処理は、マテリアライズドビューおよびベーステーブルへの通常の読み書きに影響しません。 |
| 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 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 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