何小豆儿在此 发表于 2025-4-19 18:33:25

Oracle日志系统之附加日志

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;

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Oracle日志系统之附加日志