iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Oracle 死锁的检测查询及处理
  • 525
分享到

Oracle 死锁的检测查询及处理

2024-04-02 19:04:59 525人浏览 独家记忆
摘要

死锁查询语句: -- 死锁查询语句 SELECT bs.username "Blocking User", bs.username "DB User",

死锁查询语句:


-- 死查询语句
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',          
              1, 'Blocking',              
              2, 'Global',           
              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 死锁的检测查询及处理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Oracle 死锁的检测查询及处理

本文链接: https://www.lsjlt.com/news/136395.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle 死锁的检测查询及处理
    死锁查询语句: -- 死锁查询语句 SELECT bs.username "Blocking User", bs.username "DB User", ...
    99+
    2024-04-02
  • oracle死锁查询和处理的方法是什么
    Oracle数据库提供了多种方法来查询和处理死锁。以下是一些常用的方法: 查询死锁:可以使用以下SQL语句查询当前是否存在死锁: ...
    99+
    2024-04-09
    oracle
  • Oracle查询死锁和杀死会话的命令
    这篇文章主要介绍“Oracle查询死锁和杀死会话的命令”,在日常操作中,相信很多人在Oracle查询死锁和杀死会话的命令问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Orac...
    99+
    2024-04-02
  • MySQL InnoDB设置死锁检测的方法
    死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,可以认为如果一个资源被锁定,它总会在以后某个时间被释放。而死锁发生在当多个进程访问同一数据库时,其中每个进程拥有的锁都是其他进...
    99+
    2024-04-02
  • 死锁检测的常用3种方法
    什么是死锁 死锁(Dead Lock)是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程...
    99+
    2023-08-19
    java jvm android
  • mysql怎么查询死锁的表
    要查询死锁的表,可以使用以下步骤: 执行以下命令,查看当前的死锁情况: SHOW ENGINE INNODB STATUS; ...
    99+
    2024-04-09
    mysql
  • 数据库死锁:避免、检测和处理数据库中的“争吵”
    什么是数据库死锁? 数据库死锁是指两个或多个事务同时等待彼此释放资源的情况。这会导致数据库操作无法正常进行,并可能导致数据库系统故障。 数据库死锁的原因 数据库死锁通常是由以下原因引起的: 并发控制:并发控制机制旨在确保数据库中的数据...
    99+
    2024-02-05
    死锁 事务 数据库 并发控制
  • MySQL 死锁异常排查和处理
    场景 删除车辆信息同时异步通知查询服务更新 查询服务采用 insert into view 方式增加数据(导致行级锁) 查询服务和删除车辆 争夺车辆表的锁,造成死锁 服务报错日志 2022-...
    99+
    2023-09-28
    mysql java
  • MySQL的innoDB锁机制以及死锁的处理方法
    本篇内容主要讲解“MySQL的innoDB锁机制以及死锁的处理方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL的innoDB锁机制以及死锁的处理方法...
    99+
    2024-04-02
  • 查询锁状态与处理
    SELECT dob.object_name table_name,          lo.locked_mode,     ...
    99+
    2024-04-02
  • PostgreSQL死锁了怎么办及处理方法
    目录什么是数据库死锁如何确定死锁位置死锁的可能原因以及解决办法避免死锁的实战建议解决一:查询pg_stat_activity有没有记录解决二:查询pg_locks是否有这个对象的锁PS:PostgreSQL表死锁问题的排...
    99+
    2023-01-13
    PostgreSQL死锁 PostgreSQL死锁处理
  • 数据库常见死锁原因及处理
    目录 前言什么是死锁死锁产生的四个必要条件 1. 表锁死锁死锁场景解决方案建议 2. 行锁死锁2.1 两个事务分别想拿到对方持有的锁,互相等待,于是产生死锁死锁场景解决方案 2.2 共享锁转换为排他锁死锁场景解决方案 ...
    99+
    2023-08-16
    数据库 java mysql
  • Oracle中的死锁怎么理解
    本篇内容主要讲解“Oracle中的死锁怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle中的死锁怎么理解”吧!死锁Dead Lock 我们大家最早接触死锁这个概念可能是...
    99+
    2023-06-06
  • oracle查看死锁的方法是什么
    在Oracle数据库中,可以通过以下几种方法来查看死锁情况: 使用V$LOCK视图:可以查询V$LOCK视图来查看数据库中的锁信息...
    99+
    2024-04-09
    oracle
  • MySQL是怎么处理死锁的
    小编给大家分享一下MySQL是怎么处理死锁的,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、什么是死锁官方定义如下:两个事务都持有对方需要的锁,并且在等待对方释放,并且双方都不会释放自己...
    99+
    2024-04-02
  • 数据库死锁:预防、检测和修复的终极指南
    使用死锁检测和超时机制:数据库管理系统(DBMS)可以配置为检测死锁并自动回滚事务。设置适当的超时时间,以防止死锁长时间存在。 避免嵌套事务:嵌套事务会导致潜在的死锁场景。尽量使用单个事务来执行操作。 保持事务简短:较短的事务不太可能导...
    99+
    2024-03-10
    预防死锁
  • oracle怎么查询被锁的表
    要查询被锁的表,可以使用如下的SQL语句: SELECT c.owner, c.object_name, ...
    99+
    2024-04-09
    oracle
  • 死链检测工具Xenu的操作及使用方法
    Xenu是一款免费的死链检测工具,用于检测网站中的死链接。以下是Xenu的操作和使用方法:1. 下载和安装:在Xenu官方网站(ht...
    99+
    2023-09-20
    Xenu
  • 详解通过SQL进行分布式死锁的检测与消除
    目录概述分布式死锁和单节点死锁的比较单节点死锁分布式死锁分布式死锁的检测与消除收集各节点的锁信息构建等待关系等待关系判环消除死锁总结概述 分布式数仓应用场景中,我们经常遇到数据库系统...
    99+
    2024-04-02
  • mysql死锁排查及解决的方法是什么
    MySQL死锁是指两个或多个事务相互等待对方持有的资源,导致无法继续执行的情况。为了排查和解决MySQL死锁,可以采取以下方法:1....
    99+
    2023-08-16
    mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作