首批通过分布式安全可靠测评,为关键业务系统打造
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 类型之外的所有字段的日志,会显著增加日志量。
开启要求
不强制要求开启该类型补充日志,但开启后,您无需额外进行其他的补充日志设置。
开启方式
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
最小补充日志(Minimal Supplemental Logging)
功能说明
数据库记录行链接(Chained Rows)、聚簇表、索引组织表等特殊结构的变更信息,是其他补充日志的基础。
开启要求
Oracle 数据库的增量同步场景下,必须开启该类型补充日志。
开启方式
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
主键补充日志(Primary Key)
功能说明
无条件记录被修改行的主键字段旧值。如果目标表无主键,则记录非空唯一约束字段。如果目标表既无主键也无非空唯一约束字段,则记录除 LOB 和 LONG 类型之外的所有字段。
开启要求
建议开启该类型补充日志。如果未开启,则必须开启表级别主键补充日志。
开启方式
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
唯一键补充日志(Unique Key)
功能说明
当唯一键字段被修改时,记录该唯一键的所有字段旧值(适用于复合唯一约束)。
开启要求
建议开启该类型补充日志。如果未开启,则必须开启表级别唯一键补充日志。
开启方式
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
您可以执行下述语句,查看数据库级别补充日志的配置情况。
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)级别开启补充日志,类型如下。
全体字段补充日志(All)
功能说明
无条件记录表所有字段的日志。
开启要求
有唯一键表不强制要求开启该类型补充日志。但开启后,您无需额外进行表或列级别其他的补充日志设置。
开启方式
ALTER TABLE schema.table_name ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
主键补充日志(Primary Key)
功能说明
无条件记录被修改行的主键字段旧值。如果目标表无主键,则使用非空唯一约束或记录所有字段。
开启要求
如果数据库级别未开启主键补充日志,则必须开启表级别主键补充日志。
开启方式
ALTER TABLE schema.table_name ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
唯一键补充日志(Unique Key)
功能说明
当唯一键字段被修改时,记录该唯一键的所有字段旧值(适用于复合唯一约束)。
开启要求
如果数据库级别未开启唯一键补充日志,则必须开启表级别唯一键补充日志。
开启方式
ALTER TABLE schema.table_name ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
列级别补充日志
OMS 在特定的使用场景下,需要开启 Oracle 数据库对应的列级别补充日志。
具体列的补充日志
如果迁移的对象设置了 SQL 过滤条件,则对应行过滤条件列需要设置补充日志。
如果目标端是分区表,则对应分区表的分区列需要设置补充日志。
如果源端和目标端存在多个唯一键,则所有唯一键涉及的列需要设置补充日志。如果不设置,会导致数据同步出现数据质量风险。
如果源端和目标端存在主键和唯一键,则所有唯一键涉及的列需要设置补充日志。如果不设置,会导致数据同步出现数据质量风险。
您可以执行下述语句,添加具体列至补充日志。
ALTER TABLE <table_name> ADD SUPPLEMENTAL LOG GROUP <table_name_group> (c1, c2) ALWAYS;全体字段补充日志(All)
如果目标端是无非空唯一键表,并且未在目标端创建附加的隐藏列,则要求在对应的表对象开启全字段补充日志。
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 的情况下,如果一个实例切换多次后,再切换另外的实例,而非交替切换,则定位起始拉取文件时,后切换的实例将可能定位至开启补充日志前的日志。
ALTER SYSTEM SWITCH LOGFILE;