Oracle-suppelmental log
概述
附加日志(suppelmental log)是指在数据库的redo记录中添加额外的信息,以支持基于日志类工具正常工作,如:logminer, streams, goldengate, logical standby。
附加日志主要针对update命令,避免因update命令造成行迁移和行移动。
按设置对象分类
- 数据库级设置
- 表级设置
数据库级设置
最小附加日志(minimal supplemental logging)
-- 语法:
alter database {add|drop} supplemental log data;
启用或禁用最小附加日志
标识键日志(identification key logging)
标识键有如下类型:all, primary key, unique key, foreign key
标识键日志是对指定columns启用或关闭最小日志及列数据日志。当开启 all, primary, unique和foreign 附加日志时,若最小补充日志尚未启用,则oracle会隐式开启最小补充日志,其状态为IMPLICIT。
-- 语法
alter database {add|drop} supplemental log {data(all,primary key,unique,foreign key) columns};
alter database add supplemental log data(primary key) columns;
查看当前设置
SELECT supplemental_log_data_min min,
supplemental_log_data_pk pk,
supplemental_log_data_ui ui,
supplemental_log_data_fk fk,
supplemental_log_data_all allc
FROM v$database;
如果某一列的值为"YES",表明开启了对应的附加日志。如果开启标识键日志时,对应列的值为"YES",同时
supplemental_log_data_min列的值为"IMPLICIT"
注意事项
- 启用或关闭数据库级别的附加日志时,都会导致共享池中SQL语句的游标失效,从而导致短期解析明显增加
- 可能导致日志量暴增,建议每张表有主键或至少一个非空的唯一键
表级附加日志设置
设置命名日志组
alter table table_name
{add|drop} supplemental log group group_a(column_a [no log],column_b,...) [always];
- no log:用于指定在日志中排除的列,在命名日志组中,至少存在一个无"no log"选项的定长列
- always:在更新时,日志组中的所有列都会记录在日志中。也称为“无条件”日志组。如果不指定always选项,只有在日志组中任何列被修改时,才会记录到日志中,称为“有条件”日志组。
设置所有列或主键/外键/唯一键组合日志组
alter table table_name
{add|drop} supplemental log data(all,primary key,unique,foreign key) columns;
- ALL:日志中将包含所有的最大长度固定的列
- PRIMARY KEY:只要有更新,组成主键的所有列都会记录在日志中
查看日志组信息
set lines 168 pages 99
col owner for a16
col log_group_name for a16
col table_name for a16
col log_group_type for a16
col always for a8
col generated for a12
col column_name for a32
select lg.owner, lg.log_group_name, lg.table_name, lg.log_group_type, lg.always, lg.generated, lgcs.column_name, lgcs.position, lgcs.logging_property
from dba_log_groups lg, dba_log_group_columns lgcs
where lg.LOG_GROUP_NAME = lgcs.LOG_GROUP_NAME(+)
and lg.TABLE_NAME = lgcs.TABLE_NAME(+)
and lg.owner = lgcs.owner
;
测试
组合日志组
drop table test;
create table test(x int,y int);
--增加附加日志
alter table test
add supplemental log data(all,primary key,unique,foreign key) columns;
--删除附加日志
alter table test
drop supplemental log data(all,primary key,unique,foreign key) columns;
命名日志组
--增加命名附加日志
alter table test
add supplemental log group group_a(x,y);
--删除命名附加日志
alter table test
drop supplemental log group group_a;
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤