---
title: "Oracle 数据库补充日志说明 | OceanBase 文档中心"
description: Oracle 数据库补充日志说明 本文为您介绍 Oracle 数据库补充日志（Supplemental Logging）的配置方式。 背景信息 OceanBase 迁移服务（OceanBase Migration Service，OMS）在进行 Oracle 数据库至 OceanBase 数据库 Oracle 兼容模…
---
切换语言

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

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*L03BS6f-o40AAAAAAAAAAAAADiGDAQ/original) 迁移服务 OMSV 4.3.1 企业版

# Oracle 数据库补充日志说明

更新时间：2026-04-14 15:36:02

本文为您介绍 Oracle 数据库补充日志（Supplemental Logging）的配置方式。

## 背景信息

OceanBase 迁移服务（OceanBase Migration Service，OMS）在进行 Oracle 数据库至 OceanBase 数据库 Oracle 兼容模式的增量数据同步时，依赖于 Oracle 数据库具备必要的日志，才能实现对数据的正确处理和同步。Oracle 数据库在默认场景下，仅记录基本的日志信息。所以在 Oracle 数据库增量同步的场景下，您必须开启相关迁移对象的补充日志。

#### 注意

补充日志需要在 Oracle 主库开启。

## 数据库级别补充日志

Oracle 数据库支持在数据库（DataBase）级别开启补充日志，类型如下。

- 全体字段补充日志（All）

     - 功能说明

      数据库所有字段均开启补充日志。开启该类型补充日志后，Oracle 数据库将记录除 LOB 和 LONG 类型之外的所有字段的日志，会显著增加日志量。
     - 开启要求

      不强制要求开启该类型补充日志，但开启后，您**无需额外**进行其他的补充日志设置。
     - 开启方式

      ```SQL
      ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

      ```
 - 最小补充日志（Minimal Supplemental Logging）

     - 功能说明

      数据库记录行链接（Chained Rows）、聚簇表、索引组织表等特殊结构的变更信息，是其他补充日志的基础。
     - 开启要求

      Oracle 数据库的增量同步场景下，**必须开启**该类型补充日志。
     - 开启方式

      ```SQL
      ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

      ```
 - 主键补充日志（Primary Key）

     - 功能说明

      无条件记录被修改行的主键字段旧值。如果目标表无主键，则记录非空唯一约束字段。如果目标表既无主键也无非空唯一约束字段，则记录除 LOB 和 LONG 类型之外的所有字段。
     - 开启要求

      建议开启该类型补充日志。如果未开启，则**必须开启表级别主键补充日志**。
     - 开启方式

      ```SQL
      ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

      ```
 - 唯一键补充日志（Unique Key）

     - 功能说明

      当唯一键字段被修改时，记录该唯一键的所有字段旧值（适用于复合唯一约束）。
     - 开启要求

      建议开启该类型补充日志。如果未开启，则**必须开启表级别唯一键补充日志**。
     - 开启方式

      ```SQL
      ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;

      ```

您可以执行下述语句，查看数据库级别补充日志的配置情况。

```SQL
SELECT supplemental_log_data_min, supplemental_log_data_pk,
       supplemental_log_data_ui, supplemental_log_data_fk,
       supplemental_log_data_all
FROM v$database;

```

## 表级别补充日志

Oracle 数据库支持在表（Table）级别开启补充日志，类型如下。

     - 功能说明

      无条件记录表所有字段的日志。
     - 开启要求

      有唯一键表不强制要求开启该类型补充日志。但开启后，您**无需额外**进行表或列级别其他的补充日志设置。
     - 开启方式

      ```SQL
      ALTER TABLE schema.table_name ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

     - 功能说明

      无条件记录被修改行的主键字段旧值。如果目标表无主键，则使用非空唯一约束或记录所有字段。
     - 开启要求

      如果数据库级别未开启主键补充日志，则**必须开启表级别主键补充日志**。
     - 开启方式

      ```SQL
      ALTER TABLE schema.table_name ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

     - 功能说明

      如果数据库级别未开启唯一键补充日志，则**必须开启表级别唯一键补充日志**。
     - 开启方式

      ```SQL
      ALTER TABLE schema.table_name ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;

      ```

## 列级别补充日志

OMS 在特定的使用场景下，需要开启 Oracle 数据库对应的列级别补充日志。

- 具体列的补充日志

     - 如果迁移的对象设置了 [SQL 过滤条件](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000004023209)，则对应行过滤条件列需要设置补充日志。
     - 如果目标端是分区表，则对应分区表的分区列需要设置补充日志。
     - 如果源端和目标端存在多个唯一键，则所有唯一键涉及的列需要设置补充日志。如果不设置，会导致数据同步出现数据质量风险。

      如果源端和目标端存在主键和唯一键，则所有唯一键涉及的列需要设置补充日志。如果不设置，会导致数据同步出现数据质量风险。

  您可以执行下述语句，添加具体列至补充日志。

  ```SQL
  ALTER TABLE <table_name> ADD SUPPLEMENTAL LOG GROUP <table_name_group> (c1, c2) ALWAYS;

  ```
 - 全体字段补充日志（All）

  如果目标端是无非空唯一键表，并且未在目标端创建附加的[隐藏列](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000004023213)，则要求在对应的表对象开启全字段补充日志。

  ```SQL
  ALTER TABLE <schema.table_name> ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

  ```

## 增量 DDL 处理方式

下表为数据迁移任务在运行过程中，如果进行 DDL 操作，可能会遇到的风险及解决方式。

| 操作 | 风险 | 解决方式 |
| --- | --- | --- |
| CREATE TABLE（且该表需要同步） | 如果该表存在目标端是分区表，源和目标端的索引不一致，需要进行 ETL 等情况，可能影响数据迁移性能，导致 ETL 不符合预期。 | 必须开启 DataBase 级别的 PK、UK 补充日志。手动添加涉及的列至补充日志。 |
| 增加、删除和修改 PK/UK/分区列，或修改 ETL 列 | 会不满足启动时要求添加补充日志的规则，可能导致数据不一致或数据迁移性能降低的问题。 | 根据上述补充日志的规则进行相应的添加。 |

## 开启补充日志后的操作

启动 Store 组件时，为了确保数据的完整性，会对增量数据进行回拉操作（重启 Store 组件回拉 5 分钟，新启动 Store 组件回拉 15 分钟）。为了避免 Store 组件回拉到开启补充日志之前的增量日志，您需要手动切换归档，并且等待 5 分钟或 15 分钟之后再启动任务。

开启补充日志后，您需要至少切换 2 次以上 Oracle 数据库的归档日志。

#### 注意

如果是 Oracle RAC，则需要多个实例交替切换。因为在 Oracle RAC 的情况下，如果一个实例切换多次后，再切换另外的实例，而非交替切换，则定位起始拉取文件时，后切换的实例将可能定位至开启补充日志前的日志。

```SQL
ALTER SYSTEM SWITCH LOGFILE;

```

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