---
title: "物化视图日志概述 - OceanBase 数据库 V4.3.2 | OceanBase 文档中心"
description: 物化视图日志概述 物化视图日志（Materialized View Log，mlog）用于记录用户表（基表）的增量更新数据，以支持物化视图的快速刷新功能。mlog 是一个记录表，追踪基表的变化，并将这些变化应用于相应的物化视图，实现快速刷新。 使用限制 只能在普通用户表上创建物化视图日志，无法在其他类型的表上创建。 …
---
切换语言

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

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

# 物化视图日志概述

更新时间：2025-06-20 17:11:38

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.2/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/200.materialized-views-log-of-oracle-mode/100.materialized-views-log-overview-of-oracle-mode.md)  

物化视图日志（Materialized View Log，mlog）用于记录用户表（基表）的增量更新数据，以支持物化视图的快速刷新功能。mlog 是一个记录表，追踪基表的变化，并将这些变化应用于相应的物化视图，实现快速刷新。

## 使用限制

- 只能在普通用户表上创建物化视图日志，无法在其他类型的表上创建。
 - 一张基表只与一个物化视图日志做绑定。
 - 在创建物化视图日志时，如果基表正在运行事务，则创建操作将被阻塞，直到该事务结束。
 - 物化视图日志暂不支持 `LOB` 列。
 - 物化视图日志暂不支持以下四种类型的数据：JSON、XML、GIS 和 UDT。
 - 物化视图日志暂不支持生成列（包括虚拟列和非虚拟列）。
 - 物化视图日志暂不支持指定分区，其分区和基表的分区是绑定关系。
 - 物化视图日志的名称长度上限与普通表相同，不能超过 64 个字符。由于物化视图日志的名称会加上 `mlog$_` 前缀，因此创建物化视图日志的基表名称不能超过 58 个字符。
 - 物化视图日志不支持表级恢复。
 - 物化视图日志在单独删除时不会进入回收站。
 - 物化视图日志在创建后不支持 `ALTER` 操作。
 - 物化视图日志上不支持建立索引。
 - 物化视图日志不支持进行 DML 操作，会报错。

## 使用权限

- 创建物化视图日志需要对基表的 `SELECT` 权限和 `CREATE TABLE` 的权限。
 - 删除物化视图日志需要 `DROP TABLE` 的权限。
 - 物化视图日志只能赋予 `SELECT` 权限，不支持其他的 DML 操作。

## 物化视图日志 Schema 定义

一个表只能有一个物化视图日志，其 Schema 名称为 `mlog$_table`，其中 `table` 为基表的名称。

物化视图日志的 Schema 定义如下：

| **列名** | **类型** | **说明** |
| --- | --- | --- |
| sequence$$ | in64_t | 自增列，为物化视图日志（mlog）的主键列。   #### 说明    mlog 的主键由基表的主键、所有分区键（如果存在）以及自增列 `sequence$$` 组成，形成复合主键。 |
| primary key | 跟随基表 | 基表是有主键表时，mlog 中会记录基表的主键列（如果是复合主键，则会包含多列）。 |
| dmltype$$ | char(1) | 记录 DML 类型。有三种取值，`I`、`D` 和 `U`，分别表示 `INSERT`、`DELETE` 和 `UPDATE`。 |
| old_new$$ | char(1) | 用于 `UPDATE` 语句中标记旧值和新值，`UPDATE` 一行会往物化视图日志中写入两行数据，一行是 `UPDATE` 前的旧值，另一行是 `UPDATE` 后的新值，分别用 `O` 和 `N` 进行标记。 |
| column 1 | 跟随基表 | 基表普通列 1。 |
| ... | N/A | N/A |
| column N | 跟随基表 | 基表普通列 N。 |
| ora_rowscn | N/A | 伪列，记录在存储层的一个隐藏列中，可以读取。 |
| m_row$$ | uint64_t | 基表是无主键表时，mlog 中才会记录该值。mlog 中必须包含基表的主键列。如果基表是无主键表，那么基表隐藏主键的名称在 mlog 中的名称为 `M_ROW$$`。 |

## 操作已有的物化视图日志

- 您可以直接查询物化视图日志所在的 Schema 的结构和其中的数据。
 - 您可以通过 [DBMS_MVIEW.PURGE_LOG(table_name)](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001053960) 来对某个基表的物化视图日志执行 `PURGE` 操作。
 - 如果物化视图日志的大小增长到超过可用的磁盘容量，将会报错。此时，您必须先删除该物化视图日志并重新创建，才能继续使用它。

## 基表操作对物化视图日志的影响

### 基表 DML 操作

物化视图日志表的定义就是负责记录对基表 DML 操作，因此对基表进行 `INSERT`、`DELETE` 和 `UPDATE` 操作最终都会记录到物化视图日志中，具体如下：

- 对基表进行 `INSERT` 操作，则插入的每行数据也会生成一条记录插入在物化视图日志中；该记录的 `dmltype$$` 列值为 `I`，`old_new$$` 列值为 `N`。
 - 对基表进行 `DELETE` 操作，则删除的每行数据也会生成一条记录插入在物化视图日志中；该记录的 `dmltype$$` 列值为 `D`，`old_new$$` 列值为 `O`。
 - 对基表进行 `UPDATE` 操作，则修改的每行数据也会生成两条记录插入在物化视图日志中；第一行记录的是被 `UPDATE` 行的旧值，`dmltype$$` 列值为 `U`，`old_new$$` 列值为 `O`；第二行记录的是 `UPDATE` 后的新值，`dmltype$$` 列值为 `U`，`old_new$$` 列值为 `N`。

### 基表 DDL 操作

在删除基表之前，需要先删除相应的物化视图日志，否则会报错，因为物化视图日志与基表有一一绑定关系，所以不支持直接删除基表只保留物化视图日志。

更多有关基表支持的 DDL 操作信息，请参见 [Online DDL 和 Offline DDL 操作](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001053384)。

## 相关文档

- [创建物化视图日志](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001053741)
 - [删除物化视图日志](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001053742)

 上一篇 下一篇 ![有帮助](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) 咨询热线
