Oracle日志系统之附加日志
在 Oracle 数据库中,附加日志(Supplemental Log)是一种增强日志记录的机制,用于在数据库的 redo log 中记录更多的变更信息,尤其是在进行数据迁移、复制和同步等任务时,能够确保捕获更多的数据库变更信息。
从生效范围划分,可以分为表级附加日志和库级附加日志,其SQL语句的不同之处在于前者是ALTER TABLE
,而后者为ALTER DATABASE
;
从补充日志的内容上可以分为两大类:最小补充日志和标识键补充日志;标识键补充日志又分为ALL、PK、UNIQUE、FK四个级别。
NONE(默认级别)
NONE是补充日志的默认开启级别,在此级别下,Oracle只会记录对数据的基本DML操作的必要信息,并且不会记录任何额外的细节(如主键或唯一约束的信息)。
- 适用于普通的数据库操作,不会额外消耗存储空间。
- 适合对复制或数据库变更同步要求较低的应用场景。
启用SQL如下:
-- 在数据库级别开启最小补充日志
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALL(所有列补充日志)
ALL补充日志级别是最全面的设置,它记录了表中所有列的变更信息,无论这些列是否是主键、唯一约束、索引等。这意味着,无论是哪一列发生变更,Oracle 都会将这些变更记录到 redo log 中,提供最详细的日志信息。
- 适用于严格的数据复制和同步场景,确保捕获每个数据变更的详细信息。
- 但需注意,ALL补充日志会给存储系统带来较大压力,导致 redo log 的占用空间快速增加。
启动SQL如下:
--在数据库级别开启所有列的补充日志:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
PRIMARY KEY(主键补充日志)
当启用主键补充日志级别时,Oracle 会记录涉及表主键的 DML 操作的变更信息。这意味着,即使没有显式更新主键列,Oracle 也会在 redo log 中记录主键信息。
- 适用于需要基于主键进行数据同步或主键驱动的复制系统。
启动SQL如下:
--在数据库级别开启主键的补充日志:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
UNIQUE(唯一键补充日志)
当启用唯一键补充日志级别时,Oracle 会记录涉及表唯一键的 DML 操作的变更信息,即只有当唯一索引字段被修改时,才会记录该字段的旧值。使数据库将行的复合唯一键或位图索引的所有列放入重做日志文件中。唯一键可以是由唯一约束或唯一索引引起的。
启动SQL如下:
--在数据库级别开启唯一索引的补充日志:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
FOREIGN KEY(外键补充日志)
当启用外键补充日志级别时,Oracle 会记录涉及表外键的 DML 操作的变更信息,即只有当外键被字段被修改时,才会记录该字段的旧值。
启动SQL如下:
--在数据库级别开启外键的补充日志:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS;