Oracle开启Supplemental Logging补充日志

Oracle开启Supplemental Logging补充日志

Flink CDC应用需要开启数据库附加日志(Supplemental Logging)。CDC(Change Data Capture)即数据变更抓取,通过为源端数据源开启CDC,作业可实现数据源的实时数据同步。

开启数据库归档

开启数据库归档:

sql 复制代码
archive log list;
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;

数据库级别配置

开启最小补充日志:

sql 复制代码
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

最小补充日志开启后可以使得logmnr工具支持链式行、簇表和索引组织表。

在数据库级别开启下列补充日志会导致REDO日志量明显增加。

sql 复制代码
--在数据库级别开启所有列的补充日志:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

--在数据库级别开启主键的补充日志:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

--在数据库级别开启唯一索引的补充日志:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;

--在数据库级别开启外键的补充日志:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS;

注意事项:

  • 在数据库级别开启列的补充日志会隐式开启最小补充日志。
  • 数据库打开时,开启数据库补充日志命令执行非常慢,强烈建议在MOUNT状态下执行完成后打开数据库。
  • 在数据库打开时开启补充日志会导致游标缓存中的DML游标失效,短期内SQL硬解析显著增加,对数据库性能会有暂时性的影响。

关闭补充日志:

sql 复制代码
ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS;
ALTER DATABASE DROP SUPPLEMENTAL LOG DATA;

单表级别配置

开启表级补充日志前,先开启数据库级最小补充日志:

sql 复制代码
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

对单个表的所有列开启补充日志:

sql 复制代码
ALTER TABLE hr.employees ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

对单个表的主键开启补充日志:

sql 复制代码
ALTER TABLE hr.employees ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

对单个表的唯一索引开启补充日志:

sql 复制代码
ALTER TABLE hr.employees ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;

关闭补充日志:

sql 复制代码
ALTER TABLE hr.employees DROP SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
ALTER TABLE hr.employees DROP SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
ALTER TABLE hr.employees DROP SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

检查补充日志配置

检查数据库级别的补充日志配置:

sql 复制代码
SQL> select SUPPLEMENTAL_LOG_DATA_MIN,
SUPPLEMENTAL_LOG_DATA_PK,
SUPPLEMENTAL_LOG_DATA_UI,
SUPPLEMENTAL_LOG_DATA_FK,
SUPPLEMENTAL_LOG_DATA_ALL,
SUPPLEMENTAL_LOG_DATA_PL from v$database;  

SUPPLEME SUP SUP SUP SUP SUP
-------- --- --- --- --- ---
NO	 NO  NO  NO  NO  NO

其中:

  • SUPPLEMENTAL_LOG_DATA_MIN:是否在数据库级别开启了最小补充日志;
  • SUPPLEMENTAL_LOG_DATA_ALL:是否在数据库级别开启了所有列的补充日志;
  • SUPPLEMENTAL_LOG_DATA_PK:是否在数据库级别开启了主键的补充日志;
  • SUPPLEMENTAL_LOG_DATA_UI:是否在数据库级别开启了唯一索引的补充日志;
  • SUPPLEMENTAL_LOG_DATA_FK:是否在数据库级别开启了外键的补充日志;
  • SUPPLEMENTAL_LOG_DATA_PL:是否在数据库级别开启了Oracle包程序调用的补充日志。

查询日志组中某列是否开启了补充日志:

sql 复制代码
SQL> select * from ALL_LOG_GROUP_COLUMNS;

OWNER			       LOG_GROUP_NAME		      TABLE_NAME		     COLUMN_NAME	    POSITION LOGGIN
------------------------------ ------------------------------ ------------------------------ -------------------- ---------- ------
SYS			       SEQ$_LOG_GRP		      SEQ$			     OBJ#			   1 LOG
SYS			       ENC$_LOG_GRP		      ENC$			     OBJ#			   1 LOG
SYS			       ENC$_LOG_GRP		      ENC$			     OWNER#			   2 LOG

其中LOGGING_PROPERTY指定日志组中某列是否开启了补充日志:

  • LOG:该列已开启补充日志。
  • NO LOG:该列未开启补充日志。

查询日志组的补充日志类型:

sql 复制代码
SQL> select * from ALL_LOG_GROUPS;

OWNER			       LOG_GROUP_NAME		      TABLE_NAME		     LOG_GROUP_TYPE		  ALWAYS      GENERATED
------------------------------ ------------------------------ ------------------------------ ---------------------------- ----------- --------------
SYS			       SEQ$_LOG_GRP		      SEQ$			     USER LOG GROUP		  ALWAYS      USER NAME
SYS			       ENC$_LOG_GRP		      ENC$			     USER LOG GROUP		  ALWAYS      USER NAME
HR			       SYS_C0069023		      D_ROLE_INFO		     PRIMARY KEY LOGGING	  ALWAYS      GENERATED NAME
HR			       SYS_C0069022		      D_USER_INFO		     PRIMARY KEY LOGGING	  ALWAYS      GENERATED NAME

其中LOG_GROUP_TYPE表示日志组的补充日志类型:

  • ALL COLUMN LOGGING
  • FOREIGN KEY LOGGING
  • PRIMARY KEY LOGGING
  • UNIQUE KEY LOGGING
  • USER LOG GROUP

其中ALWAYS表示日志组记录补充日志的条件:

  • ALWAYS:表中任意一列被更新时都记录补充日志。
  • CONDITIONAL:表中指定一列被更新时才记录补充日志。

References

【1】https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-logminer-utility.html#GUID-48D9DB83-BBC0-45EE-A81E-7CD047C908C1

【2】https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-logminer-utility.html#GUID-E3E015C4-B0EB-4072-92A6-FD3079C68242

【3】https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/V-DATABASE.html#GUID-C62A7B96-2DD4-4E70-A0D9-26EE4BFBE256

相关推荐
隔窗听雨眠42 分钟前
OceanBase旁路导入与自增主键冲突深度解析:原理、排查与解决方案
java·服务器·数据库
ZCBUS实时计算43 分钟前
政务海量分库分表汇聚实战:基于 3 节点 ZCBUS 集群完成医保 10TB 数据实时整合
大数据·数据库·数据仓库·sql·dba·etl·政务
名不经传的养虾人1 小时前
从0到1:企业级AI项目迭代日记 Vol.81|工具调用前,先过一道审批门
数据库·人工智能·ai编程·ai工作流·企业ai
Databend1 小时前
Databend 产品更新:从 Spatial Index Join 到 Eval 数据管道
大数据·数据库·sql
数据知道1 小时前
SQL 注入从入门到精通:手工注入 + sqlmap 自动化
网络·数据库·sql·网络安全·自动化
lilian2331 小时前
Harmony os 技术实战|拼豆制图06:收藏 ID、生成记录与重启恢复怎么不打架
android·java·数据库·harmonyos
2601_955759621 小时前
ClaudeAPI成本中心与业务标签设计指南
android·java·数据库
仙人球部落 揞殺1 小时前
Sql Server查询性能优化之走出索引的误区
数据库·性能优化
Bryce学亮1 小时前
FileLine,基于 Qt 6 + QML 构建的跨平台文件传输与即时通讯工具
数据库·c++·人工智能·python·qt·github
轻揉小乔 真新人2 小时前
T-SQL查询进阶—理解SQL Server中的锁
服务器·数据库·sql