`

Oracle中诊断阻塞session的方法 blocking error

 
阅读更多
Oracle中诊断阻塞session的方法 blocking error
由于锁的机制,当某一条DML或者DDL SQL语句执行被阻塞的时候,需要找出是什么原因导致这条SQL被阻塞了,下面介绍一下通常的诊断方法:

假设有这样一个表: table t(id int primary key,val int);数据为:

id  val
1   1
2    2
1,在一个Session,这里把它叫做Session A,做了如下的update语句,没有提交或者回滚.
SQL> update t set val = 3 where id=1; 

2,在一另一个Session,这里把它叫做Session B,做了如下的update语句,Session B会被阻塞.
SQL> update t set val = 4 where id=1;

但有活动事务对对象加锁的时候,会在v$locked_object视图中有记录如object_id,session_id等,通常被阻塞的session的XIDUSN,XIDSLOT,XIDSQN字段都为空.下图中session_id为139的是被阻塞的session.

select * from v$locked_object;



select dbo.* from  v$locked_object lo ,dba_objects dbo  where lo.object_id = dbo.object_id and lo.xidusn=0



通过查询v$lock可以看到是哪一个session阻塞了哪一个session:142阻塞了139

with blkedsess as (select * from v$lock where request !=0)
select  blkingsess.sid blockingsid, blkedsess.sid blockedsid
from v$lock blkingsess,blkedsess
where blkingsess.id1 = blkedsess.id1
and blkingsess.id2 = blkedsess.id2
and blkingsess.sid != blkedsess.sid



在通过v$session可以查到session相关的信息,被阻塞的status一般为ACTIVE,还可以通过sql_address联合v$sql找到被阻塞的SQL语句.  

select sid,serial#,status,sql_address from v$session where sid in(139,142)



select * from V$sql where address='6BE7D33C'

or
select sql_text, sql_fulltext, sql_id from v$sqlarea where sql_id='6BE7D33C';

or
select sql_text from v$sqltext where sql_id = '6BE7D33C';



这时候DBA可以联系造成阻塞的session结束事务或者根据情况用命令终止session

alter system kill session '142,7'; 其中142为sid,7为serial#

session 142会收到如下错误,而session139往下执行后续步骤.
ERROR:
ORA-03114: not connected to Oracle

转自:http://www.linuxidc.com/Linux/2012-07/65135.htm
有相关截图
分享到:
评论

相关推荐

    oracle RAC查看blocking的脚本

    Oracle RAC(Real ...通过运行上述脚本和查询视图,可以有效地诊断和解决Oracle RAC环境中的阻塞问题,确保数据库的高效运行。在实际操作中,还需要结合数据库的架构、配置以及应用逻辑来综合分析和解决问题。

    清除Oracle中长时间持锁的session

    - **BLOCKING_SESSION**: 阻塞该会话的其他会话的SID。 #### 终止锁定会话 一旦找到具体的SID,就可以采取进一步措施来终止该会话。这通常涉及使用操作系统级别的命令,如`kill -9`等,来强制结束进程。但在执行...

    如何定位Oracle数据库被锁阻塞会话的根源?

    1. 使用`v$session`视图:通过查询`v$session`视图,特别是关注`blocking_session`字段,可以找出当前被阻塞的会话。例如: ```sql SELECT sid, username, blocking_session FROM v$session WHERE blocking_...

    oracle blocking check script

    检查当前oracle数据库中的阻塞情况。

    Oracle RAC环境下的阻塞(blocking blocked)介绍和实例演示

    有关阻塞的概念以及单实例环境下的阻塞请参考:Oracle 阻塞(blocking blocked) 1、演示环境 scott@DEVDB> select * from v$version where rownum<2; BANNER -------------------------------------------------...

    Oracle 阻塞(blocking blocked)介绍和实例演示

    Oracle数据库中的阻塞(blocking)现象是指在一个会话因持有特定资源的锁,导致其他试图访问该资源的会话被挂起,无法继续执行的情况。这种情况通常发生在并发操作中,特别是当多个会话同时尝试修改同一数据时。了解并...

    Oracle中查看引起Session阻塞的2个脚本分享

    在Oracle数据库管理中,Session阻塞是一个常见的性能问题,它发生在一个会话(Session)等待另一个会话释放资源时。这种情况通常会导致系统响应速度变慢,甚至可能导致事务无法完成。解决此类问题的关键在于快速定位...

    SDMA阻塞率仿真blocking probability

    在SDMA阻塞率的仿真实现中,Erlang模型可以帮助我们理解系统如何处理并发请求,以及如何有效地分配资源以减少阻塞。** **在压缩包文件"sdma1"中,很可能包含了实现SDMA阻塞率仿真的源代码。这些代码可能包括了系统...

    数据库阻塞监控工具(SQLSERVER和ORACLE)

    转向Oracle数据库,Oracle提供了许多内置的诊断和性能监控工具,例如V$SESSION视图、V$BLOCKING_SESSION视图以及SQL Trace和TKPROF。这些视图可以提供阻塞会话的实时信息,但同样,对于长期的阻塞监控,可能需要更...

    blocking mode socket(阻塞模式socket-windows)

    本篇文章将主要探讨阻塞模式Socket在Windows环境下的工作原理、特点以及使用方法。 ### 1. 阻塞模式Socket的基本概念 阻塞模式的Socket是默认的工作模式,当一个Socket调用如`recv()`或`send()`这样的I/O操作时,...

    阻塞队列(Blocking Queue)是一个支持两个附加操作的队列.txt

    3. 特殊的阻塞操作(put(e)、take()):put方法会向队列中添加元素,如果队列已满,线程会被阻塞直到队列中有空间。take方法会从队列中取出元素,如果队列为空,线程会被阻塞直到队列中出现新元素。 Java提供了多种...

    verilog中的阻塞和非阻塞区别

    ### Verilog中的阻塞与非阻塞赋值详解 #### 一、引言 Verilog是一种广泛应用于硬件设计的语言,特别是在数字逻辑电路的设计与验证领域。阻塞赋值与非阻塞赋值是Verilog语言中两个重要的概念,它们直接影响着程序的...

    Oracle阻塞(blockingblocked)实例详解

    Oracle阻塞(blocking/blocked)现象是数据库管理中...总之,理解Oracle中的阻塞现象并掌握诊断和解决方法是DBA必备的技能。通过监控、分析和优化,可以有效地防止和解决阻塞问题,提高数据库系统的整体性能和稳定性。

    ORACLE解锁方法的一点资料

    本文将详细介绍Oracle解锁方法的相关知识点,包括如何识别锁定的会话(session)、如何查看锁定的SQL语句以及如何解除锁定。 #### 二、识别锁定的会话 在Oracle数据库中,当一个会话被另一个会话锁定时,通常会遇到...

    深入理解Verilog阻塞非阻塞

    在Verilog HDL中,对于变量赋值有两种主要的方式:阻塞赋值(blocking assignment)和非阻塞赋值(non-blocking assignment)。这两种赋值方式的区别及其适用场景对于理解和编写高效的Verilog代码至关重要。 #### 1...

    同步异步阻塞非阻塞

    在 Linux 环境下的网络 IO 中,有五种基本的 IO 模型:阻塞 IO、非阻塞 IO、IO 多路复用、信号驱动 IO 和异步 IO。其中,信号驱动 IO 不常用,因此主要介绍其余四种 IO 模型。 1. 阻塞 IO(Blocking IO) 阻塞 IO ...

    Verilog中阻塞赋值和非阻塞赋值的正确使用

    在Verilog的设计中,正确使用阻塞赋值( Blocking Assignment)和非阻塞赋值(Non-blocking Assignment)是至关重要的。这两种赋值方式对硬件的时序行为和功能仿真有直接影响,因此了解它们的区别和正确的使用场合...

Global site tag (gtag.js) - Google Analytics