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笔记
Apr 05 Oracle
oracle索引总结
Sep 25 Oracle
Oracle 临时表空间SQL语句的实现
Sep 25 Oracle
Oracle 触发器trigger使用案例
Feb 24 Oracle
Oracle 多表查询基本语法实例
Apr 18 Oracle
详解SQL的窗口函数
Apr 21 Oracle
分析SQL窗口函数之排名窗口函数
Apr 21 Oracle
SQL试题 使用窗口函数选出连续3天登录的用户
Apr 24 Oracle
Oracle锁表解决方法的详细记录
Jun 05 Oracle
在Oracle表中进行关键词搜索的过程
Jun 10 Oracle
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
Jun 28 Oracle
Oracle删除归档日志及添加定时任务
Jun 28 Oracle
RPM包方式安装Oracle21c的方法详解
oracle连接ODBC sqlserver数据源的详细步骤
Oracle以逗号分隔的字符串拆分为多行数据实例详解
快速学习Oracle触发器和游标
使用Oracle跟踪文件的问题详解
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
ORACLE查看当前账号的相关信息
You might like
PHP在XP下IIS和Apache2服务器上的安装
2006/09/05 PHP
实测在class的function中include的文件中非php的global全局环境
2013/07/15 PHP
laravel-admin自动生成模块,及相关基础配置方法
2019/10/08 PHP
可以将word转成html的js代码
2010/04/11 Javascript
Javascript弹出窗口的各种方法总结
2013/11/11 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
2015/12/02 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
2017/01/04 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
通过示例彻底搞懂js闭包
2017/08/10 Javascript
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
2019/10/28 jQuery
javascript设计模式之迭代器模式
2020/01/30 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
JavaScript动态生成表格的示例
2020/11/02 Javascript
Python Web框架Tornado运行和部署
2020/10/19 Python
Python爬取网页中的图片(搜狗图片)详解
2017/03/23 Python
分享一个简单的python读写文件脚本
2017/11/25 Python
基于Python中capitalize()与title()的区别详解
2017/12/09 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
全球性的在线时尚男装零售商:boohooMAN
2016/12/17 全球购物
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
JBL加拿大官方商店:扬声器、耳机等
2020/10/23 全球购物
三年级音乐教学反思
2014/01/28 职场文书
公司口号大全
2014/06/11 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
2014年体育工作总结
2014/11/24 职场文书
离婚协议书范本(通用篇)
2014/11/30 职场文书
销售员岗位职责
2015/02/10 职场文书
让人瞬间清醒的句子,句句经典,字字如金
2019/07/08 职场文书
历史名人教你十五个读书方法,赶快Get起来!
2019/07/18 职场文书
用position:sticky完美解决小程序吸顶问题的实现方法
2021/04/24 HTML / CSS
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
2021/06/21 MySQL