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;