Oracle 死锁的检测查询及处理


Posted in Oracle onSeptember 25, 2021

死锁查询语句:

-- 死锁查询语句
SELECT    bs.username "Blocking User", bs.username "DB User",
          ws.username "Waiting User", bs.SID "SID", ws.SID "WSID",
          bs.serial# "Serial#", bs.sql_address "address",
          bs.sql_hash_value "Sql hash", bs.program "Blocking App",
          ws.program "Waiting App", bs.machine "Blocking Machine",
          ws.machine "Waiting Machine", bs.osuser "Blocking OS User",
          ws.osuser "Waiting OS User", bs.serial# "Serial#",
          ws.serial# "WSerial#",
          DECODE (wk.TYPE,
                  'MR', 'Media Recovery',
                  'RT', 'Redo Thread',
                  'UN', 'USER Name',
                  'TX', 'Transaction',
                  'TM', 'DML',
                  'UL', 'PL/SQL USER LOCK',
                  'DX', 'Distributed Xaction',
                  'CF', 'Control FILE',
                  'IS', 'Instance State',
                  'FS', 'FILE SET',
                  'IR', 'Instance Recovery',
                  'ST', 'Disk SPACE Transaction',
                  'TS', 'Temp Segment',
                  'IV', 'Library Cache Invalidation',
                  'LS', 'LOG START OR Switch',
                  'RW', 'ROW Wait',
                  'SQ', 'Sequence Number',
                  'TE', 'Extend TABLE',
                  'TT', 'Temp TABLE',
                  wk.TYPE
                 ) lock_type,
          DECODE (hk.lmode,
                  0, 'None',
                  1, 'NULL',
                  2, 'ROW-S (SS)',
                  3, 'ROW-X (SX)',
                  4, 'SHARE',
                  5, 'S/ROW-X (SSX)',
                  6, 'EXCLUSIVE',
                  TO_CHAR (hk.lmode)
                 ) mode_held,
          DECODE (wk.request,
                  0, 'None',
                  1, 'NULL',
                  2, 'ROW-S (SS)',
                  3, 'ROW-X (SX)',
                  4, 'SHARE',
                  5, 'S/ROW-X (SSX)',
                  6, 'EXCLUSIVE',
                  TO_CHAR (wk.request)
                 ) mode_requested,
          TO_CHAR (hk.id1) lock_id1, TO_CHAR (hk.id2) lock_id2,
          DECODE
             (hk.BLOCK,
              0, 'NOT Blocking',          /**//* Not blocking any other processes */
              1, 'Blocking',              /**//* This lock blocks other processes */
              2, 'Global',           /**//* This lock is global, so we can't tell */
              TO_CHAR (hk.BLOCK)
             ) blocking_others
     FROM v$lock hk, v$session bs, v$lock wk, v$session ws
    WHERE hk.BLOCK = 1
      AND hk.lmode != 0
      AND hk.lmode != 1
      AND wk.request != 0
      AND wk.TYPE(+) = hk.TYPE
      AND wk.id1(+) = hk.id1
      AND wk.id2(+) = hk.id2
      AND hk.SID = bs.SID(+)
      AND wk.SID = ws.SID(+)
      AND (bs.username IS NOT NULL)
      AND (bs.username <> 'SYSTEM')
      AND (bs.username <> 'SYS')
ORDER BY 1;

查询发生死锁的select语句

select sql_text from v$sql where hash_value in (
    select sql_hash_value from v$session where sid in (select session_id from v$locked_object)
)

一、关于数据库死锁的检查方法

1、数据库死锁的现象

程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。

2、死锁的原理

当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提交,另一条对于这一列数据做更新操作的语句在执行的时候就会处于等待状态,此时的现象是这条语句一直在执行,但一直没有执行成功,也没有报错。

3、死锁的定位方法

通过检查数据库表,能够检查出是哪一条语句被死锁,产生死锁的机器是哪一台。

 1)用dba用户执行以下语句

select username,lockwait,status,machine,program from v$session where sid 
in (select session_id from v$locked_object)

如果有输出的结果,则说明有死锁,且能看到死锁的机器是哪一台。字段说明:
Username:死锁语句所用的数据库用户;
Lockwait:死锁的状态,如果有内容表示被死锁。
Status: 状态,active表示被死锁
Machine: 死锁语句所在的机器。
Program: 产生死锁的语句主要来自哪个应用程序。

2)用dba用户执行以下语句,可以查看到被死锁的语句

select sql_text from v$sql where hash_value in
(select sql_hash_value from v$session where sid in
(select session_id from v$locked_object))

4、死锁的解决方法

     一般情况下,只要将产生死锁的语句提交就可以了,但是在实际的执行过程中。用户可能不知道产生死锁的语句是哪一句。可以将程序关闭并重新启动就可以了。经常在Oracle的使用过程中碰到这个问题,所以也总结了一点解决方法。

 1)查找死锁的进程:

sqlplus "/as sysdba" (sys/change_on_install)
SELECT s.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS 
FROM V$LOCKED_OBJECT l,V$SESSION S 
WHERE l.SESSION_ID=S.SID;

2)kill掉这个死锁的进程:

alter system kill session ‘sid,serial#'; (其中sid=l.session_id)

 3)如果还不能解决:

select pro.spid from v$session ses, v$process pro where ses.sid=XX and ses.paddr=pro.addr;

其中sid用死锁的sid替换:

exit
       ps -ef|grep spid

 其中spid是这个进程的进程号,kill掉这个Oracle进程。

到此这篇关于Oracle 死锁的检测查询及处理的文章就介绍到这了,更多相关Oracle 死锁的检测查询及处理内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Oracle 相关文章推荐
ORACLE数据库对long类型字段进行模糊匹配的解决思路
Apr 07 Oracle
Oracle 区块链表创建过程详解
May 15 Oracle
DBCA命令行搭建Oracle ADG的流程
Jun 11 Oracle
oracle连接ODBC sqlserver数据源的详细步骤
Jul 25 Oracle
oracle索引总结
Sep 25 Oracle
关于Oracle12C默认用户名system密码不正确的解决方案
Oct 16 Oracle
详解Oracle块修改跟踪功能
Nov 07 Oracle
Oracle表空间与权限的深入讲解
Nov 17 Oracle
使用Oracle命令进行数据库备份与还原
Dec 06 Oracle
Oracle数据库中通用的函数实例详解
Mar 25 Oracle
清空 Oracle 安装记录并重新安装
Apr 26 Oracle
RPM包方式安装Oracle21c的方法详解
oracle连接ODBC sqlserver数据源的详细步骤
Oracle以逗号分隔的字符串拆分为多行数据实例详解
快速学习Oracle触发器和游标
使用Oracle跟踪文件的问题详解
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
ORACLE查看当前账号的相关信息
You might like
php学习之数据类型之间的转换代码
2011/05/29 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
2015/08/27 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
2018/12/07 PHP
jquery $.ajax入门应用二
2008/11/19 Javascript
jquery 操作表格实现代码(多种操作打包)
2011/03/20 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
js实现简单登录功能的实例代码
2013/11/09 Javascript
Javasipt:操作radio标签详解
2013/12/30 Javascript
JavaScript中的继承方式详解
2015/02/11 Javascript
JQuery复制DOM节点的方法
2015/06/11 Javascript
noty ? jQuery通知插件全面解析
2016/05/18 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
微信小程序实现红包功能(后端PHP实现逻辑)
2018/07/11 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
2018/09/13 Javascript
JS获取本地地址及天气的方法实例小结
2019/05/10 Javascript
layui表单验证select下拉框实现验证的方法
2019/09/05 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
2020/09/12 Javascript
Vue3不支持Filters过滤器的问题
2020/09/24 Javascript
[14:20]刀塔大凶女神互压各路奇葩屌丝
2014/05/16 DOTA
[02:44]重置世界,颠覆未来——DOTA2 7.23版本震撼上线
2019/12/01 DOTA
理解Python中的类与实例
2015/04/27 Python
python简单实现刷新智联简历
2016/03/30 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
CSS3哪些新特性值得称赞
2016/03/02 HTML / CSS
英国皇室御用百货:福南梅森(Fortnum & Mason)
2017/12/03 全球购物
说出一些常用的类,包,接口
2014/09/22 面试题
社区安全生产月活动总结
2014/07/05 职场文书
上党课的心得体会
2014/09/02 职场文书