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死锁表后处理" oracle死锁表后处理是指在oracle数据库中处理死锁表的各种方法和技巧。oracle死锁表后处理是数据库管理员和开发人员需要掌握的重要技能,旨在解决oracle数据库中出现的死锁问题,确保数据的...
本文将围绕“Oracle查询死锁表”的主题展开详细讨论,旨在帮助数据库管理员更好地理解和掌握如何检测及解除Oracle中的死锁现象。 ### 一、理解Oracle死锁 #### 1.1 定义 死锁通常发生在两个或更多的事务试图同时...
### Oracle死锁原因及解决办法 #### 一、Oracle死锁概述 在Oracle数据库系统中,死锁是一种常见的并发问题,它会导致多个事务之间互相等待对方释放资源而无法继续执行,最终导致整个系统的运行效率降低甚至停滞。...
【Oracle死锁的分类及其模拟】这篇博客主要探讨了Oracle数据库中的死锁问题,包括死锁的基本概念、分类以及如何进行模拟。以下是该主题的详细解释: **死锁概述** 死锁是数据库系统中常见的问题,它发生在两个或多...
处理Oracle死锁和killed session的过程虽然复杂,但遵循上述步骤可以有效地解决大多数问题。然而,更重要的是采取预防措施,避免死锁的发生。这包括优化SQL查询,减少复杂的事务,使用合适的锁定级别,以及定期监控...
### Oracle中关于死锁的处理 #### 死锁概述 在Oracle数据库中,死锁是一种常见但必须妥善处理的问题。当两个或多个事务互相等待对方释放资源时就会发生死锁。这种情况下,没有一个事务能够继续执行,直到系统采取...
Oracle数据库出现死锁的时候可以按照以下处理步骤加以解决: 第一步:尝试在sqlplus中通过sql命令进行删除,如果能够删除成功,则万事大吉!但通常情况下,出现死锁时,想通过命令行或者通过Oracle的管理工具删除有...
本文将深入探讨Oracle死锁的原因、诊断方法及解决方案。 #### 一、死锁的基本概念 死锁是数据库中两个或更多事务在等待对方释放锁定资源的情况下发生的僵局状态。每个事务都持有某些资源的锁定,并等待其他事务...
在Oracle数据库系统中,死锁是指两个或多个...综上所述,处理Oracle死锁需要深入了解数据库的内部机制,并结合适当的监控和预防措施。通过有效的诊断和管理,我们可以减少死锁的发生,从而提高数据库的性能和可用性。
要检测Oracle中的表死锁,可以使用以下SQL查询: 1. 查询锁定对象的详细信息: ```sql SELECT object_name, session_id, os_user_name, Oracle_username, process, locked_mode, status FROM v$locked_object l, ...
处理Oracle死锁的过程
#### 四、Oracle死锁检测与处理 1. **检测死锁**:Oracle数据库能够自动检测死锁,并在检测到死锁后采取措施。默认情况下,Oracle会随机选择一个事务作为受害者并回滚它,从而解决死锁问题。此外,还可以使用`V$...
### 教您如何检查Oracle死锁 #### 一、数据库死锁的现象 在日常工作中,当我们使用Oracle数据库进行数据操作时,可能会遇到一种特殊的情况——死锁。这种现象通常表现为程序在执行过程中突然停止响应,既无法继续...
在IT行业的数据库管理领域,ORACLE数据库因其强大的数据处理能力和高度的可靠性而被广泛使用。然而,在高并发的业务环境中,ORACLE表的死锁问题却时常困扰着数据库管理员(DBA)。死锁,作为数据库操作中的一种特殊...
Oracle数据库中的死锁是数据库...总之,处理Oracle死锁需要理解其原理,通过查询数据库状态信息来定位问题,并采取相应的解决措施。定期监控数据库状态,避免并发事务可能导致的死锁问题,是确保数据库高效运行的关键。
oracle数据库死锁查询并处理,被锁对象、引起死锁原因等查询及解决方法
下面将详细讨论Oracle死锁的原因、具体分析、示例以及解决办法。 1. **死锁原因分析** - 行级锁:Oracle数据库使用行级锁来支持并发操作,当两个事务同时尝试获取对方已持有的锁时,就可能导致死锁。 - 外键约束...
#### 三、Oracle死锁处理的具体步骤 ##### 3.1 使用`v$locked_object`视图查找锁定信息 可以通过以下SQL查询来查找可能造成死锁的锁定信息: ```sql SELECT b.username, b.sid, b.serial#, b.logon_time FROM v$...
### Oracle死锁时的进程处理方法 在Oracle数据库管理中,死锁是一个常见的问题,它通常发生在两个或多个事务互相等待对方释放资源的情况。当这种情况发生时,可能会导致应用程序响应变慢甚至完全停止运行。因此,...