oracle 查阻塞日志,通过Oracle补充日志,找到锁阻塞源头的SQL
问题背景:
有时会考虑一件事情,如果在Oracle环境下出现了锁阻塞的情况,如何定位到SQL源头(通过session、lock、transaction等视图仅能定位到会话)?或许有人会想有没有可能通过AWR相关的数据库性能历史视图找到有用的信息呢?答案是否定的,因为AWR仓库中的历史性能数据都是收集的有性能问题的会话、语句、活动,而最初加锁的那个update语句执行速度非常快,往往根本达不到AWR收集的阀值,不被Oracle注意到。而Oracle注意到的都是被“它”给阻塞的那些会话。
是不是没方法,找到那个始作俑者?有的,只不过比较麻烦,有一个地方是始终会忠实记录DML活动-----日志(打开Oracle的补充日志)
补充日志
补充日志不是独立的日志,而是对重做日志变更矢量的补充。LogMiner、闪回事务、闪回事务查询等功能需要开启补充日志才能正常工作。
在启动数据库补充日志的时候,会使得所有缓存的游标变得无效,突如其来的大量硬解析将对数据库的性能带来影响。启动数据库补充日志将等待当前所有的事务结束,使得该操作之后记录的所有Redo数据都有补充日志的属性,如果数据库有长事务或事务过于频繁将导致该操作出现Hang住的情况,由此可见启动数据库的补充日志应尽量避开数据库高峰期。
补充日志分为:数据库级补充日志、 表级补充日志
若结果返回YES或IMPLICIT则说明已开启最小补全日志,当使用ALL,PRIMARY,UNIQUE或FOREIGN补全日志时最小补全日志默认开启(即检查结果为IMPLICIT)。
标识关键字段补充日志:分为 主键、外键、唯一索引、全体字段 补充日志 4种
其他补充日志都是基于数据库级最小补充日志之上的,启用数据库级的其他日志(主键、外键、唯一索引、ALL)会自动开启最小补充日志;
如果希望启用表级的其他类型补充日志,需要先手工开启数据库级的最小补充日志。
启用最小补充日志命令:
ALTER DATABASE ADD Supplemental Log Data;
关闭最小补充日志命令:
ALTER DATABASE DROP Supplemental Log Data;
启用其他类型的日志:
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;
alter database add supplemental log data (all) columns;
表级补充日志:
分为: 主键、唯一索引、外键、全体字段、用户自定义字段 5种。
前 4 种 同数据库级 标识关键字段补充日志效果用法一样。只不过是在特定表上启用补充日志
1、 alter table tb_name add supplemental log data (primary key) columns;
2、 alter table tb_name add supplemental log data (unique) columns;
3、 alter table tb_name add supplemental log data (foreign key) columns;
4、 alter table tb_name add supplemental log data (all) columns;
5、 alter table tb_name add supplemental log group group_name (col01, col02, col05, col09) always;
--自定义字段表级补充日志 用户可以任意指定哪些字段的旧值需要被补充日志记录。
有条件记录式:记载是指 无论 update 那个字段 这组中的其他字段都的记录其旧值
无条件记录式:记载是指 有无条件记录式记载 命令末尾 加 always 关键字,然后无论 update 该行那个字段,都记录该组中的字段的旧值。
表级补充日志的情况 通过 dba_log_groups 和 dba_log_group_columns 视图查询获得
通过补充日志定位阻塞源头:
1、启用补充日志
select log_mode, open_mode, flashback_on, supplemental_log_data_min from v$database;
alter database add supplemental log data;
2、将redo日志文件添加到logmnr分析日志列表
exec sys.dbms_logmnr.add_logfile(logfilename=>'redo日志1', options=>sys.dbms_logmnr.new);
exec sys.dbms_logmnr.add_logfile(logfilename=>'redo日志2', options=>sys.dbms_logmnr.addfile);
exec sys.dbms_logmnr.add_logfile(logfilename=>'redo日志n', options=>sys.dbms_logmnr.addfile);
3、重现问题后,启动并分析redo日志
exec sys.dbms_logmnr.start_logmnr(options => sys.dbms_logmnr.dict_from_online_catalog);
4、查看分析结果
spool c:\log.txt
-- 根据阻塞源头及被阻塞会话的sid,注意观察对应的XID和table_name
select t.SCN, t.SESSION#, t.SERIAL#, t.XID, t.table_name, t.SQL_REDO, t.SQL_UNDO from v$logmnr_contents t where t.SESSION# IN (xxx)
spool off
5、停止logmnr
exec sys.dbms_logmnr.end_logmnr;
6、取消补充日志
alter database drop supplemental log data (primary key) columns;
alter database drop supplemental log data (unique) columns;
alter database drop supplemental log data;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31448824/viewspace-2139366/,如需转载,请注明出处,否则将追究法律责任。
oracle 查阻塞日志,通过Oracle补充日志,找到锁阻塞源头的SQL相关推荐
- oracle 11g 数据库恢复技术 ---03 补充日志
三 补充日志(supplemental logging) 补充日志是对重做记录中变更矢量的补充信息,增加了变更矢量记载的记录量.Oracle某些功能要求启用补充日志才能正常或更好的工作,比如logmi ...
- oracle 删除补全日志组_Oracle 补充日志(Supplemental Logging)说明
补充日志:只要是针对 UPDATE 命令的,是对重做日志记录中 变更矢量块的补充信息,增加了变更矢量记载的记录量.日志挖掘器(LogMiner).闪回事务查询.闪回事务等都需要 补充日志的支持.尤其是 ...
- oracle查zw001密码,【Oracle错误集锦】:ORA-00119amp;ORA-00132-一团网
有时候老天就是爱和你开玩笑,昨天好不容易配置好Oracle,能够用PL/SQL正常登录使用,今天突然就不行了.并且错误十分诡异,没有提示什么错误代码.输入用户名密码,点击登录后PL/SQL没有反映,直 ...
- oracle查有哪些数据库,oracle查询数据库(oracle查询所有数据库)
oracle查询数据库(oracle查询所有数据库) 2020-07-24 12:01:17 共10个回答 PLsql查询工具便可查询 你指所有的表吗?如果你想查数据库中所有的表的话,可以查询sele ...
- oracle查对象创建时间,oracle:查询某个时间之后,指定用户,指定对象类型,并创建的表的个数...
SQL> select COUNT(*) from dba_objects where created< to_date('17-01-14','dd-mm-y y') AND owne ...
- oracle查视图字段类型,oracle,如何查看视图结构,获得视图中的字段名称、字段类型、字段长度等。...
需要获得一个视图中的字段名称.字段类型.字段长度等信息,该如何编写sql语句. 通过select * from user_views可以获得给定用户下所有的视图名称了,但是没找到如何获取视图结构的解决 ...
- Oracle数据库开启归档日志和补充日志
文章目录 Oracle数据库开启归档日志和补充日志 重做日志的概念 归档日志 ARCHIVELOG模式 启动归档日志 归档日志的清理 补充日志 Oracle数据库开启归档日志和补充日志 项目中要对Or ...
- oracle补充日志
简介 概述 Oracle 补充日志(supplemental log)又叫附加日志,可以指示数据库在日志中添加额外信息到日志流中,以支持基于日志的工具,如逻辑standby.streams.Golde ...
- oracle补充日志条件,Oracle补充日志-Oracle
Oracle补充日志 -–补充日志 Supplemental Logging 补充日志只要是针对 UPDATE 命令的,是对重做日志记录中 变更矢量块的补充信息,增加了变更矢量记载的记录量. 日志挖掘 ...
最新文章
- jquery Fancybox插件的应用
- 修改进程权限(转载)
- 的电路接法_放大电路的三种基本接法分享
- pytorch 笔记:torch.distributions 概率分布相关(更新中)
- 测试Windows Live Writer对cnBlog的支持
- 设计算法时要确保分类讨论的完备性
- 牛客网【每日一题】4月29日题目精讲 Symmetric Matrix
- 嵌入式面试中常见的问答题(线程进程、TCP等)
- 【中生代技术】1024程序员节快跑,提需求的来了
- python爬虫模拟浏览器的两种方法_python爬虫模拟浏览器访问-User-Agent过程解析
- mybatis 复习笔记03
- sourceMap到底是个啥玩意?
- python图书库存管理系统的需求分析_图书库存管理系统方案.doc
- 手提计算机10发现不到打印机,笔记本电脑搜索不到打印机怎么样解决
- python语言turtle库画图代码示例_5分钟轻松搞定,Python开发之turtle库的基本操作...
- OpenCV/kornia/Pillow/Halcon/NI Vision/MIL/*计算机视觉资料汇总
- 计算机怎样保存文件格式,word文档怎样保存为pdf格式
- 洛谷 P1606 [USACO07FEB]荷叶塘Lilypad Pond(spfa+最短路计数) 题解
- 知识图谱构建(入门)
- asp网站微信登录源码
热门文章
- 网易青果后端系统设计窥探(含直播方案踩坑往事)
- Win7下VS2008升级补丁
- Java调用SQL Server的存储过程详解
- php自定义中文分词方法,一个用PHP写的中文分词函数_php
- 妙用 background 实现花式文字效果
- redis sentinel哨兵配置及日志分析(grep -v)
- 使用sealos安装K8S集群时,需确保节点的swap是关闭的
- 【收藏】mydockfinder下载地址
- 【收藏】win10将wsl升级到wsl2
- Scala基于Akka模拟Spark Master Worker进程间通信(一):Worker向Master注册