---
title: "物化视图日志自动管理 - OceanBase 数据库 V4.6.0 | OceanBase 文档中心"
description: 物化视图日志自动管理 OceanBase 数据库支持物化视图日志（Materialized View Log，mlog）自动管理功能，该功能包含以下两方面： 在创建物化视图时，分析物化视图对于基表的依赖，自动创建所需要的 mlog。 在后台定期裁剪 mlog，删除不被依赖的 mlog，以及精简 mlog 中的列集合，…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.6.0

# 物化视图日志自动管理

更新时间：2026-07-15 15:27:38

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.6.0/zh-CN/700.reference/300.database-object-management/200.manage-object-of-oracle-mode/500.manage-views-of-oracle-mode/200.manage-materialized-views-of-oracle-mode/250.automatic-management-materialized-views-log-of-oracle-mode.md)  

OceanBase 数据库支持物化视图日志（Materialized View Log，mlog）自动管理功能，该功能包含以下两方面：

1. 在创建物化视图时，分析物化视图对于基表的依赖，自动创建所需要的 mlog。
 2. 在后台定期裁剪 mlog，删除不被依赖的 mlog，以及精简 mlog 中的列集合，从而降低 mlog 的维护代价。

## 使用限制

创建物化视图时，只有显式声明为增量刷新物化视图（即指定 `REFRESH FAST`）或实时物化视图（即指定 `ENABLE ON QUERY COMPUTATION`），才会自动创建 mlog 或自动更新 mlog 定义。

## 注意事项

- 在更新 mlog 定义时，OceanBase 数据库实际会创建一个新的 mlog 表并替换原 mlog，在替换过程中，需要对相关联的增量刷新物化视图做一次增量刷新，将原 mlog 中的增量数据刷入物化视图中，这样才能安全替换 mlog。因此，当一个基表关联的物化视图个数、增量数据量较多时，更新 mlog 定义可能会是一个很耗时的操作，需要提前有所感知。
 - 建议 `mlog_trim_interval` 的时间间隔不要设置的太小，否则可能导致 mlog 被误裁剪，创建物化视图时又需要重新创建或更新 mlog。

## 相关配置

OceanBase 数据库提供了两个配置项以控制 mlog 自动化的行为：

- [enable_mlog_auto_maintenance](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685384)：用于控制是否启用物化视图日志自动管理功能。
 - [mlog_trim_interval](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685414)：用于控制 mlog 后台自动裁剪任务的调度周期。

## 使用示例

开启 mlog 自动化管理。

#### 说明

在 OceanBase 数据库 V4.6.0 版本中：

- 对于新创建的租户，其配置项 `enable_mlog_auto_maintenance` 的默认值为 `True`，即默认启用 mlog 自动管理功能。
 - 对于由 OceanBase 数据库低版本（即 V4.6.0 之前的版本）升级而来的租户，其配置项 `enable_mlog_auto_maintenance` 的默认值为 `False`，即默认关闭 mlog 自动管理功能。

```shell
obclient> ALTER SYSTEM SET enable_mlog_auto_maintenance = True;

```

### 示例一：自动创建 mlog

1. 创建表 `test_tbl1`。

   ```shell
   obclient> CREATE TABLE test_tbl1(col1 INT, col2 INT, col3 INT);

   ```
 2. 直接在表 `test_tbl1` 上创建增量刷新物化视图 `mv_test_tbl1`。OceanBase 数据库会自动为 `test_tbl1` 表在所需的 `col2` 列上创建 mlog。

   ```shell
   obclient> CREATE MATERIALIZED VIEW mv_test_tbl1
       REFRESH FAST
       AS SELECT
              col2,
              count(*) cnt
          FROM test_tbl1
          GROUP BY col2;

   ```
 3. 查看表 `test_tbl1` 上物化视图日志的信息。

   ```shell
   obclient> DESC mlog$_test_tbl1;

   ```

   返回结果如下：

   ```shell
   +------------+-----------------+------+------+---------+-------+
   | FIELD      | TYPE            | NULL | KEY  | DEFAULT | EXTRA |
   +------------+-----------------+------+------+---------+-------+
   | COL2       | NUMBER(38)      | 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  |
   | M_ROW$$    | BIGINT UNSIGNED | NO   | PRI  | NULL    | NULL  |
   +------------+-----------------+------+------+---------+-------+
   5 rows in set

   ```

### 示例二：自动更新 mlog 定义

1. 创建表 `test_tbl2`。

   ```shell
   obclient> CREATE TABLE test_tbl2(col1 INT, col2 INT, col3 INT);

   ```
 2. 直接在表 `test_tbl2` 上创建增量刷新物化视图 `mv1_test_tbl2`。OceanBase 数据库会自动为 `test_tbl2` 表在所需的 `col2` 列上创建 mlog。

   ```shell
   obclient> CREATE MATERIALIZED VIEW mv1_test_tbl2
       REFRESH FAST
       AS SELECT
              col2,
              count(*) cnt
          FROM test_tbl2
          GROUP BY col2;

   ```
 3. 查看表 `test_tbl2` 上物化视图日志的信息。

   ```shell
   obclient> DESC mlog$_test_tbl2;

   ```

   返回结果如下：

   ```
 4. 直接在表 `test_tbl2` 上创建增量刷新物化视图 `mv2_test_tbl2`。OceanBase 数据库检测到当前 mlog 表中只包含了 `col2` 列，因此会修改现有 mlog 定义，在 mlog 表中增加 `col3` 列。

   ```shell
   obclient> CREATE MATERIALIZED VIEW mv2_test_tbl2
       REFRESH FAST
       AS SELECT
           col3,
           count(*) cnt
       FROM test_tbl2
       GROUP BY col3;

   ```
 5. 再次查看表 `test_tbl2` 上物化视图日志的信息，可以观察到表 `test_tbl2` 的 mlog 表定义中包含了 `col2` 列和 `col3` 列。

   ```

   返回结果如下：

   ```shell
   +------------+-----------------+------+------+---------+-------+
   | FIELD      | TYPE            | NULL | KEY  | DEFAULT | EXTRA |
   +------------+-----------------+------+------+---------+-------+
   | COL2       | NUMBER(38)      | YES  | NULL | NULL    | NULL  |
   | COL3       | NUMBER(38)      | 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  |
   | M_ROW$$    | BIGINT UNSIGNED | NO   | PRI  | NULL    | NULL  |
   +------------+-----------------+------+------+---------+-------+
   6 rows in set

   ```

### 示例三：自动裁剪 mlog

1. 创建表 `test_tbl3`。

   ```shell
   obclient> CREATE TABLE test_tbl3(col1 INT, col2 INT, col3 INT);

   ```
 2. 直接在表 `test_tbl3` 上创建增量刷新物化视图 `mv1_test_tbl3`。OceanBase 数据库会自动为 `test_tbl3` 表在所需的 `col2` 列上创建 mlog。

   ```shell
   obclient> CREATE MATERIALIZED VIEW mv1_test_tbl3
       REFRESH FAST
       AS SELECT
              col2,
              count(*) cnt
          FROM test_tbl3
          GROUP BY col2;

   ```
 3. 直接在表 `test_tbl3` 上创建增量刷新物化视图 `mv2_test_tbl3`。OceanBase 数据库检测到当前 mlog 表中只包含了 `col2` 列，因此会修改现有 mlog 定义，在 mlog 表中增加 `col3` 列。

   ```shell
   obclient> CREATE MATERIALIZED VIEW mv2_test_tbl3
       REFRESH FAST
       AS SELECT
           col3,
           count(*) cnt
       FROM test_tbl3
       GROUP BY col3;

   ```
 4. 查看表 `test_tbl3` 上物化视图日志的信息，可以观察到表 `test_tbl3` 的 mlog 表定义中包含了 `col2` 列和 `col3` 列。

   ```shell
   obclient> DESC mlog$_test_tbl3;

   ```

   返回结果如下：

   ```
 5. 修改 mlog 裁剪间隔，以更快观察到裁剪结果。

   ```shell
   obclient> ALTER SYSTEM SET mlog_trim_interval = '5s';

   ```
 6. 删除物化视图 `mv1_test_tbl3`。

   ```shell
   obclient> DROP MATERIALIZED VIEW mv1_test_tbl3;

   ```
 7. 等待 5s，查看表 `test_tbl3` 上物化视图日志的信息，可以观察到表 `test_tbl3` 的 mlog 表定义中只剩下了 `col3` 列。

   ```

   返回结果如下：

   ```shell
   +------------+-----------------+------+------+---------+-------+
   | FIELD      | TYPE            | NULL | KEY  | DEFAULT | EXTRA |
   +------------+-----------------+------+------+---------+-------+
   | COL3       | NUMBER(38)      | 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  |
   | M_ROW$$    | BIGINT UNSIGNED | NO   | PRI  | NULL    | NULL  |
   +------------+-----------------+------+------+---------+-------+
   5 rows in set

   ```
 8. 删除物化视图 `mv2_test_tbl3`。

   ```shell
   obclient> DROP MATERIALIZED VIEW mv2_test_tbl3;

   ```
 9. 等待 5s，查看表 `test_tbl3` 上物化视图日志的信息，可以观察到表 `test_tbl3` 的 mlog 表已经不存在了。

   ```

   返回结果如下：

   ```shell
   OBE-04043: object TEST_USER001.MLOG$_TEST_TBL3 does not exist

   ```
 10. 还原 mlog 裁剪间隔。

    ```shell
    obclient> ALTER SYSTEM SET mlog_trim_interval = '1d';

    ```

## 相关文档

- [物化视图概述](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685834)
 - [物化视图日志](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685830)
 - [创建物化视图](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685829)
 - [删除物化视图](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685833)

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
