首批通过分布式安全可靠测评,为关键业务系统打造
CREATE MATERIALIZED VIEW LOG
更新时间:2026-03-04 15:08:10
描述
该语句用来创建物化视图日志。
物化视图日志(Materialized View Log,mlog)用于记录基表的增量更新数据,以支持物化视图的快速刷新功能。mlog 是一个记录表,追踪基表的变化,并将这些变化应用于相应的物化视图,实现快速刷新。
说明
OceanBase 数据库 mlog 暂时不支持指定 Partition,mlog 的 Partition 和基表的 Partition 是绑定关系。
权限要求
创建物化视图日志需要有 CREATE TABLE 和基表的 SELECT 权限。更多有关 OceanBase 数据库权限的详细介绍,请参见 Oracle 模式下的权限分类。
语法
CREATE 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
}
参数说明
| 参数 | 描述 |
|---|---|
| schema. | 可选项,指定物化视图日志基表所在的 Schema。如果省略 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 这两个时间表达式设定在未来的时间点,否则会引发错误。
建议使用 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。CREATE TABLE test_tbl1 (id NUMBER PRIMARY KEY, name VARCHAR2(20), age NUMBER);在
test_tbl1表上创建物化视图日志。指定并行处理物化视图日志的并行度为5和物化视图日志记录name和age列的变更信息,并且会记录变更前后的新值;配置物化视图日志从当前日期开始,每隔1天清理一次过期的物化视图日志记录。CREATE MATERIALIZED VIEW LOG ON test_tbl1 PARALLEL 5 WITH SEQUENCE(name ,age) INCLUDING NEW VALUES PURGE START WITH current_date NEXT current_date + 1;查看表
test_tbl1上物化视图日志的信息。DESC mlog$_test_tbl1;返回结果如下:
+------------+--------------+------+------+---------+-------+ | FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA | +------------+--------------+------+------+---------+-------+ | ID | NUMBER | NO | PRI | NULL | NULL | | NAME | VARCHAR2(20) | YES | NULL | NULL | NULL | | AGE | NUMBER | YES | NULL | NULL | NULL | | SEQUENCE$$ | BIGINT | NO | PRI | NULL | NULL | | DMLTYPE$$ | VARCHAR2(1 ) | YES | NULL | NULL | NULL | | OLD_NEW$$ | VARCHAR2(1 ) | YES | NULL | NULL | NULL | +------------+--------------+------+------+---------+-------+ 6 rows in set