问题背景:

有时会考虑一件事情,如果在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相关推荐

  1. oracle 11g 数据库恢复技术 ---03 补充日志

    三 补充日志(supplemental logging) 补充日志是对重做记录中变更矢量的补充信息,增加了变更矢量记载的记录量.Oracle某些功能要求启用补充日志才能正常或更好的工作,比如logmi ...

  2. oracle 删除补全日志组_Oracle 补充日志(Supplemental Logging)说明

    补充日志:只要是针对 UPDATE 命令的,是对重做日志记录中 变更矢量块的补充信息,增加了变更矢量记载的记录量.日志挖掘器(LogMiner).闪回事务查询.闪回事务等都需要 补充日志的支持.尤其是 ...

  3. oracle查zw001密码,【Oracle错误集锦】:ORA-00119amp;ORA-00132-一团网

    有时候老天就是爱和你开玩笑,昨天好不容易配置好Oracle,能够用PL/SQL正常登录使用,今天突然就不行了.并且错误十分诡异,没有提示什么错误代码.输入用户名密码,点击登录后PL/SQL没有反映,直 ...

  4. oracle查有哪些数据库,oracle查询数据库(oracle查询所有数据库)

    oracle查询数据库(oracle查询所有数据库) 2020-07-24 12:01:17 共10个回答 PLsql查询工具便可查询 你指所有的表吗?如果你想查数据库中所有的表的话,可以查询sele ...

  5. oracle查对象创建时间,oracle:查询某个时间之后,指定用户,指定对象类型,并创建的表的个数...

    SQL> select COUNT(*) from dba_objects where created< to_date('17-01-14','dd-mm-y y')  AND owne ...

  6. oracle查视图字段类型,oracle,如何查看视图结构,获得视图中的字段名称、字段类型、字段长度等。...

    需要获得一个视图中的字段名称.字段类型.字段长度等信息,该如何编写sql语句. 通过select * from user_views可以获得给定用户下所有的视图名称了,但是没找到如何获取视图结构的解决 ...

  7. Oracle数据库开启归档日志和补充日志

    文章目录 Oracle数据库开启归档日志和补充日志 重做日志的概念 归档日志 ARCHIVELOG模式 启动归档日志 归档日志的清理 补充日志 Oracle数据库开启归档日志和补充日志 项目中要对Or ...

  8. oracle补充日志

    简介 概述 Oracle 补充日志(supplemental log)又叫附加日志,可以指示数据库在日志中添加额外信息到日志流中,以支持基于日志的工具,如逻辑standby.streams.Golde ...

  9. oracle补充日志条件,Oracle补充日志-Oracle

    Oracle补充日志 -–补充日志 Supplemental Logging 补充日志只要是针对 UPDATE 命令的,是对重做日志记录中 变更矢量块的补充信息,增加了变更矢量记载的记录量. 日志挖掘 ...

最新文章

  1. jquery Fancybox插件的应用
  2. 修改进程权限(转载)
  3. 的电路接法_放大电路的三种基本接法分享
  4. pytorch 笔记:torch.distributions 概率分布相关(更新中)
  5. 测试Windows Live Writer对cnBlog的支持
  6. 设计算法时要确保分类讨论的完备性
  7. 牛客网【每日一题】4月29日题目精讲 Symmetric Matrix
  8. 嵌入式面试中常见的问答题(线程进程、TCP等)
  9. 【中生代技术】1024程序员节快跑,提需求的来了
  10. python爬虫模拟浏览器的两种方法_python爬虫模拟浏览器访问-User-Agent过程解析
  11. mybatis 复习笔记03
  12. sourceMap到底是个啥玩意?
  13. python图书库存管理系统的需求分析_图书库存管理系统方案.doc
  14. 手提计算机10发现不到打印机,笔记本电脑搜索不到打印机怎么样解决
  15. python语言turtle库画图代码示例_5分钟轻松搞定,Python开发之turtle库的基本操作...
  16. OpenCV/kornia/Pillow/Halcon/NI Vision/MIL/*计算机视觉资料汇总
  17. 计算机怎样保存文件格式,word文档怎样保存为pdf格式
  18. 洛谷 P1606 [USACO07FEB]荷叶塘Lilypad Pond(spfa+最短路计数) 题解
  19. 知识图谱构建(入门)
  20. asp网站微信登录源码

热门文章

  1. 网易青果后端系统设计窥探(含直播方案踩坑往事)
  2. Win7下VS2008升级补丁
  3. Java调用SQL Server的存储过程详解
  4. php自定义中文分词方法,一个用PHP写的中文分词函数_php
  5. 妙用 background 实现花式文字效果
  6. redis sentinel哨兵配置及日志分析(grep -v)
  7. 使用sealos安装K8S集群时,需确保节点的swap是关闭的
  8. 【收藏】mydockfinder下载地址
  9. 【收藏】win10将wsl升级到wsl2
  10. Scala基于Akka模拟Spark Master Worker进程间通信(一):Worker向Master注册