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(Real ...通过运行上述脚本和查询视图,可以有效地诊断和解决Oracle RAC环境中的阻塞问题,确保数据库的高效运行。在实际操作中,还需要结合数据库的架构、配置以及应用逻辑来综合分析和解决问题。
- **BLOCKING_SESSION**: 阻塞该会话的其他会话的SID。 #### 终止锁定会话 一旦找到具体的SID,就可以采取进一步措施来终止该会话。这通常涉及使用操作系统级别的命令,如`kill -9`等,来强制结束进程。但在执行...
1. 使用`v$session`视图:通过查询`v$session`视图,特别是关注`blocking_session`字段,可以找出当前被阻塞的会话。例如: ```sql SELECT sid, username, blocking_session FROM v$session WHERE blocking_...
检查当前oracle数据库中的阻塞情况。
有关阻塞的概念以及单实例环境下的阻塞请参考:Oracle 阻塞(blocking blocked) 1、演示环境 scott@DEVDB> select * from v$version where rownum<2; BANNER -------------------------------------------------...
Oracle数据库中的阻塞(blocking)现象是指在一个会话因持有特定资源的锁,导致其他试图访问该资源的会话被挂起,无法继续执行的情况。这种情况通常发生在并发操作中,特别是当多个会话同时尝试修改同一数据时。了解并...
在Oracle数据库管理中,Session阻塞是一个常见的性能问题,它发生在一个会话(Session)等待另一个会话释放资源时。这种情况通常会导致系统响应速度变慢,甚至可能导致事务无法完成。解决此类问题的关键在于快速定位...
在SDMA阻塞率的仿真实现中,Erlang模型可以帮助我们理解系统如何处理并发请求,以及如何有效地分配资源以减少阻塞。** **在压缩包文件"sdma1"中,很可能包含了实现SDMA阻塞率仿真的源代码。这些代码可能包括了系统...
转向Oracle数据库,Oracle提供了许多内置的诊断和性能监控工具,例如V$SESSION视图、V$BLOCKING_SESSION视图以及SQL Trace和TKPROF。这些视图可以提供阻塞会话的实时信息,但同样,对于长期的阻塞监控,可能需要更...
本篇文章将主要探讨阻塞模式Socket在Windows环境下的工作原理、特点以及使用方法。 ### 1. 阻塞模式Socket的基本概念 阻塞模式的Socket是默认的工作模式,当一个Socket调用如`recv()`或`send()`这样的I/O操作时,...
3. 特殊的阻塞操作(put(e)、take()):put方法会向队列中添加元素,如果队列已满,线程会被阻塞直到队列中有空间。take方法会从队列中取出元素,如果队列为空,线程会被阻塞直到队列中出现新元素。 Java提供了多种...
### Verilog中的阻塞与非阻塞赋值详解 #### 一、引言 Verilog是一种广泛应用于硬件设计的语言,特别是在数字逻辑电路的设计与验证领域。阻塞赋值与非阻塞赋值是Verilog语言中两个重要的概念,它们直接影响着程序的...
Oracle阻塞(blocking/blocked)现象是数据库管理中...总之,理解Oracle中的阻塞现象并掌握诊断和解决方法是DBA必备的技能。通过监控、分析和优化,可以有效地防止和解决阻塞问题,提高数据库系统的整体性能和稳定性。
本文将详细介绍Oracle解锁方法的相关知识点,包括如何识别锁定的会话(session)、如何查看锁定的SQL语句以及如何解除锁定。 #### 二、识别锁定的会话 在Oracle数据库中,当一个会话被另一个会话锁定时,通常会遇到...
在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的设计中,正确使用阻塞赋值( Blocking Assignment)和非阻塞赋值(Non-blocking Assignment)是至关重要的。这两种赋值方式对硬件的时序行为和功能仿真有直接影响,因此了解它们的区别和正确的使用场合...