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

相关推荐
cyt涛1 小时前
MyBatis 学习总结
数据库·sql·学习·mysql·mybatis·jdbc·lombok
Rookie也要加油1 小时前
01_SQLite
数据库·sqlite
liuxin334455661 小时前
教育技术革新:SpringBoot在线教育系统开发
数据库·spring boot·后端
看山还是山,看水还是。2 小时前
MySQL 管理
数据库·笔记·mysql·adb
fishmemory7sec2 小时前
Koa2项目实战2(路由管理、项目结构优化)
数据库·mongodb·koa
momo小菜pa2 小时前
【MySQL 09】表的内外连接
数据库·mysql
Jasonakeke3 小时前
【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化
数据库·mysql
程序猿小D3 小时前
第二百六十九节 JPA教程 - JPA查询OrderBy两个属性示例
java·开发语言·数据库·windows·jpa
小宇成长录3 小时前
Mysql:数据库和表增删查改基本语句
数据库·mysql·数据库备份
团儿.4 小时前
解锁MySQL高可用新境界:深入探索MHA架构的无限魅力与实战部署
数据库·mysql·架构·mysql之mha架构