-- 死锁查询语句

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)用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))

四、死锁的解决方法      一般情况下,只要将产生死锁的语句提交就可以了,但是在实际的执行过程中。用户可 能不知道产生死锁的语句是哪一句。可以将程序关闭并重新启动就可以了。  经常在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死锁的检测查询及处理的更多相关文章

  1. Oracle 死锁的检测查询及处理

    来源于: http://www.cnblogs.com/hoojo/archive/2012/08/31/2665583.html -- 死锁查询语句 SELECT bs.username " ...

  2. Oracle死锁

    当两个或多个用户相互等待锁定的数据时就会发生死锁,这时这些用户被卡在不能继续处理业务,oracle可以自动检测死锁并解决他们,通过回滚一个死锁中的语句,释放锁定的数据,回滚的话会遇到ora-00060 ...

  3. 【锁】Oracle死锁(DeadLock)的分类及其模拟

    [锁]Oracle死锁(DeadLock)的分类及其模拟 1  BLOG文档结构图 2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不 ...

  4. oracle 死锁和锁等待的区别

    所谓的锁等待:就是一个事务a对一个数据表进行ddl或是dml操作时,系统就会对该表加上表级的排它锁,此时其他的事务对该表进行操作的时候会等待a提交或是回滚后,才可以继续b的操作 所谓的死锁:当两个或多 ...

  5. Oracle死锁处理实例

    Oracle死锁常规语句 1.查询Oracle死锁常规语句 SELECT l.session_id sid, s.serial#, l.locked_mode,l.oracle_username, l ...

  6. 仅4步,就可通过SQL进行分布式死锁的检测与消除

    摘要:本文主要介绍在 GaussDB(DWS) 中,如何通过 SQL 语句,对分布式死锁进行检测和恢复. 分布式数仓应用场景中,我们经常遇到数据库系统 hang 住的问题,所谓 hang 是指虽然数据 ...

  7. ASP.NET操作ORACLE数据库之模糊查询

    ASP.NET操作ORACLE数据库之模糊查询 一.ASP.NET MVC利用OracleHelper辅助类操作ORACLE数据库 //连接Oracle数据库的连接字符串 string connect ...

  8. 【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题

    记录通过执行Oracle的执行计划查询SQL脚本中的效率问题   问题现象: STARiBOSS5.8.1R2版本中,河北对帐JOB执行时,无法生成发票对帐文件.   首先,Quartz表达式培植的启 ...

  9. 教您如何检查oracle死锁,决解死锁

    oracle死锁问题一直困扰着我们,下面就教您一个oracle死锁的检查方法,如果您之前遇到过oracle死锁方面的问题,不妨一看…… oracle死锁问题一直困扰着我们,下面就教您一个oracle死 ...

随机推荐

  1. 定时任务管理之python篇celery使用

    一.为什么要用celery celery是一个简单.灵活.可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必须工具.他是一个专注于实时处理的任务队列,同时也支持任务调度. celery是异 ...

  2. GC overhead limit exceeded,tomcat修改jvm内存

    tomcat修改jvm内存 内存大小:-Xms256M -Xmx512M -XX:PermSize=256m -XX:MaxNewSize=256m -XX:MaxPermSize=512m -Dja ...

  3. 标准C程序设计七---72

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  4. Linux 之 用户及用户组

    用户及用户组 参考教程:[千峰教育] 命令: whoami: 作用:查看当前登录的用户. 格式:whoami /etc/passwd: 说明:该文件存放了系统中所有的用户,每一行的每一列如下: 用户名 ...

  5. js-input file 文件上传(照片,视频,音频)

    在此做一个笔记 <input type="file" accept="image/*" capture="camera"> &l ...

  6. 在centos7环境下建立MariaDB多实例

    环境全部基于vmware player 12 os: centos7 mariadb: mariadb-10.1.12-linux-x86_64.tar.gz 主要根据MariaDB给出的帮助文档,以 ...

  7. Java 经典笔试题

    这些题目对我的笔试帮助很大,有需要的朋友都可以来看看,在笔试中能遇到的题目基本上下面都会出现,虽然形式不同,当考察的基本的知识点还是相同的. 在分析中肯定有不足和谬误的地方还请大虾们能够给予及时的纠正 ...

  8. MySQL通用编程

    第一阶段:基础入门 第一章:关系模型 第二章:基本查询 第三章:复杂查询 第四章:权限控制 第五章:查询优化 第二阶段:模型设计 第六章:设计选择 第七章:函数依赖 第八章:分解算法 第九章:设计过程 ...

  9. Elasticsearch分词导致的查找错误

    这周在做视频搜索的过程中遇到一个问题,就是用下面的查询表达式去Elasticsearch检索,检索不到想要的结果.查询语句如下: 而查询的字段的值为: "mergeVideoName&quo ...

  10. Java中的文件上传2(Commons FileUpload:commons-fileupload.jar)

    相比上一篇使用Servlet原始去实现的文件上传(http://www.cnblogs.com/EasonJim/p/6554669.html),使用组件去实现相对来说功能更多,省去了很多需要配置和处 ...