首页 > 数据库 >[转帖]Oracle获取被锁的SQL源头

[转帖]Oracle获取被锁的SQL源头

时间:2024-01-30 14:11:23浏览次数:31  
标签:sid text SQL blocking 转帖 source sql Oracle id

https://blog.csdn.net/weixin_42233789

转载:https://blog.csdn.net/robinson1988/article/details/106204387

各位DBA,看到这篇文章是不是很开心,解决了你一个大麻烦,赶紧把它部署到实时监控程序吧

(咳咳,转载,抄袭不注明文章出处的人可耻哈)

session 1: update emp_bak set ename='沙雕' where empno=7369;

session 2: update emp_bak set ename='大长腿' where empno=7369;

session 3: update emp_bak set ename='矮丑穷' where empno=7369;

运行下面脚本可以抓到哪个SID,哪个SQL_ID,跑的SQL_TEXT锁住了哪个SID,哪个SQL_ID,哪个SQL语句

需要注意的是:如果V$SQLAREA没有保存SQL,可能抓不到,其次,如果系统并发很高,你可能需要再修改下脚本
 

  1. select sysdate,
  2. source_sid,
  3. source_sql_id,
  4. source_sql_text,
  5. blocking_sid,
  6. blocking_sql_id,
  7. blocking_sql_text
  8. from (select b.sid source_sid,
  9. d.sql_id source_sql_id,
  10. d.sql_text source_sql_text,
  11. a.sid blocking_sid,
  12. a.sql_id blocking_sql_id,
  13. e.sql_text blocking_sql_text,
  14. (select object_name
  15. from dba_objects
  16. where object_id = a.row_wait_obj#) object_name
  17. from v$session a,
  18. v$session b,
  19. v$transaction c,
  20. v$sqlarea d,
  21. v$sqlarea e
  22. where a.event = 'enq: TX - row lock contention'
  23. and a.blocking_session = b.sid
  24. and b.taddr = c.addr
  25. and to_date(c.start_time, 'mm/dd/yy hh24:mi:ss') =
  26. d.last_active_time
  27. and d.command_type in (2, 3, 6)
  28. and b.user# = d.parsing_schema_id
  29. and a.sql_id = e.sql_id)
  30. where instr(upper(source_sql_text), object_name) > 0;

脚本运行示例:

  1. SQL> select sysdate,
  2. 2 source_sid,
  3. 3 source_sql_id,
  4. 4 source_sql_text,
  5. 5 blocking_sid,
  6. 6 blocking_sql_id,
  7. 7 blocking_sql_text
  8. 8 from (select b.sid source_sid,
  9. 9 d.sql_id source_sql_id,
  10. 10 d.sql_text source_sql_text,
  11. 11 a.sid blocking_sid,
  12. 12 a.sql_id blocking_sql_id,
  13. 13 e.sql_text blocking_sql_text,
  14. 14 (select object_name
  15. 15 from dba_objects
  16. 16 where object_id = a.row_wait_obj#) object_name
  17. 17 from v$session a,
  18. 18 v$session b,
  19. 19 v$transaction c,
  20. 20 v$sqlarea d,
  21. 21 v$sqlarea e
  22. 22 where a.event = 'enq: TX - row lock contention'
  23. 23 and a.blocking_session = b.sid
  24. 24 and b.taddr = c.addr
  25. 25 and to_date(c.start_time, 'mm/dd/yy hh24:mi:ss') =
  26. 26 d.last_active_time
  27. 27 and d.command_type in (2, 3, 6)
  28. 28 and b.user# = d.parsing_schema_id
  29. 29 and a.sql_id = e.sql_id)
  30. 30 where instr(upper(source_sql_text), object_name) > 0;
  31. SYSDATE SOURCE_SID SOURCE_SQL_ID SOURCE_SQL_TEXT BLOCKING_SID BLOCKING_SQL_ID BLOCKING_SQL_TEXT
  32. ----------- ---------- ------------- ------------------------------------------------ ------------ --------------- ------------------------------------------------
  33. 2020/5/19 1 192 201c4xcdsjaj0 update emp_bak set ename='沙雕' where empno=7369 4 2hpm4yjuut7cg update emp_bak set ename='矮丑穷' where empno=7369
  34. 2020/5/19 1 192 201c4xcdsjaj0 update emp_bak set ename='沙雕' where empno=7369 221 36xb1pyv12k56 update emp_bak set ename='大长腿' where empno=7369

 

 

文章知识点与官方知识档案匹配,可进一步学习相关知识MySQL入门技能树内置函数锁相关78367 人正在系统学习中

标签:sid,text,SQL,blocking,转帖,source,sql,Oracle,id
From: https://www.cnblogs.com/jinanxiaolaohu/p/17996970

相关文章

  • MySQL建索引报错:BLOB/TEXT column used in key specification without a key length
    MySQL建索引报错:BLOB/TEXTcolumnusedinkeyspecificationwithoutakeylength因为text类型的字段值太长,没办法为全部内容建立索引,只能指定前多少位字符建立索引;就像这样createindex`索引名`on表名(字段名(600));所以能用varchar能放下的尽量使用varchar吧......
  • 在 Windows 平台下安装与配置 MySQL 5.7.36
    Windows一般使用两种MySQL安装方式,即MySQL二进制分发版(.msi安装文件)和免安装版(.zip压缩文件)。一般来讲,应当使用二进制分发版,因为该版本比其他的分发版使用起来要简单,不再需要其他工具来启动就可以运行MySQL。本次实验是在Windows10平台上选用图形化的二进制安装方式,其他W......
  • [转帖]SQL SERVER--- 排序规则、数据类型
    https://zhuanlan.zhihu.com/p/162933497 一、排序规则有时候我们向数据库插入文本时,会出现乱码“?”,这时有可能是我们创建数据库没有设置好排序规则以Chinese_PRC_CI_AS为例前半部分Chinese_PRC指的是针对大陆简体字unicode的排序规则后半部分的含义为:_BIN二进......
  • 必备SQL和表关系
    必备SQL和表关系1.必备SQL创建数据createtabledepart( idint(4)notnullauto_incrementprimarykey,titlevarchar(20)notnull);createtableinfo( idint(4)notnullauto_incrementprimarykey,namevarchar(20)notnull,emallvarcha......
  • python操作mysql
    python操作mysql1.数据库连接池在操作数据库时需要使用数据库连接池。pip3.9installpymysql#安装pymysqlpip3.9installdbutils#安装dbutilsimportthreadingimportpymysqlfromdbutils.pooled_dbimportPooledDBMYSQL_DB_POOL=PooledDB(creator=pym......
  • SQL变量数据加工在Java规则引擎中的应用案例分析
    SQL变量加工SQL加工背景,在决策配置过程中,一些复杂的逻辑或模型可通过自定义SQL脚本编写创建数据变量,通过SQL脚本可以便捷的从数据库中取数,并且自定义SQL支持传参,可满足更复杂多变的数据加工处理。注意,SQL变量加工和算子编排加工的方式不同,SQL变量加工依赖于对应数据源的服务器的性......
  • MySQL查看bin_log日志
    有这样一段业务逻辑,首先保存业务数据,然后发送报文,最后确认报文回来以后更新业务数据。伪代码大概是这样的:/***保存数据,并调用发送报文方法*/publicvoidsave(){//0.保存数据//调用send()方法send();}/***发送报文*/publicvoidsend(){/......
  • PLSQL Developer汉语设置
    PLSQLQDeveloper是由Oracle公司推出的数据库开发工具,具有很好的移植性和适应性.但是当我们安装完成Oracle11gPLSQLDeveloper工具后发现状态栏的显示是英文,对于大多数人来说都是看不懂,如果长期使用的话或许还能接受,对于小新真的十分困难,下面就是如何将PLSQLDeveloper工具设置为......
  • MySQL连接控制插件导致的连接数过多问题处理
    生产环境收到一波连接数告警,而该业务实际压力并不大。查看后发现有大量的waitinginconnection_controlplugin状态的连接等待。该等待连接数有一千多个。connection_control组件是由于前段时间的安全合规审查要求安装的。怕影响生产真实连接,将单个用户的登陆失败重试connectio......
  • 查询SQL SERVER 软件版本信息、授权许可等
    SQLSERVER软件授权许可查询概述在使用SQLServer数据库管理系统时,了解软件授权许可是非常重要的。SQLServer提供了多种许可方式,以满足不同用户的需求。本文将介绍SQLServer软件授权许可的查询方法,并提供相应的代码示例。许可方式SQLServer提供了多种许可方式,包括:企业......