查询Oracle中的阻塞锁(以及阻塞在哪个数据上)的SQL

数据库阻塞检查处理方法

当应用服务器发生阻塞时(特别是集群1),应先按下面方法检查数据库,以判明应用服务器阻塞是否由数据库阻塞引起。

如果 select * from dba_waiters 有输出,转 阻塞情形A ;

如果 SELECT * FROM v$session_wait WHERE event LIKE 'library%' 有输出,转 阻塞情形B ;

ELSE 马上联系DBA。

阻塞情形A:

1、查看dba_waiters

select * from dba_waiters

发现有大量的等待session。如果无输出,数据库应没有问题。

2、查看等待事件情况

select p.spid pid,

s.sid,

s.SERIAL#,

s.username,

event,

w.p1,

w.P1TEXT,

w.p2,

w.P2TEXT,

w.p3,

w.P3TEXT,

sq.SQL_TEXT,

w.WAIT_TIME,

w.SECONDS_IN_WAIT,

w.STATE

from v$session_wait w, v$session s, v$process p, v$sql sq

where event not like 'SQL%' and w.sid = s.sid and s.paddr = p.addr and

s.SQL_ADDRESS = sq.ADDRESS and s.SQL_HASH_VALUE = sq.HASH_VALUE

发现有大量EVENT列的值是enqueue的记录。

3、查看锁等待情况

SELECT lpad(' ', DECODE(request, 0, 0, 1)) || sid sess,

id1,

id2,

lmode,

request,

type

FROM V$LOCK

WHERE id1 IN (SELECT id1 FROM V$LOCK WHERE lmode = 0)

ORDER BY id1, request

检查是否存在lmode为3的记录,发现session 441把持着一个个DML级的三级锁(存在一条sess=441,lmode=3的记录)

4、查看sid 为441的session情况,记录以下输出并发出到公告版:

select p.SPID, s.*

from v$session s, v$process p

where sid in (441) and p.ADDR = s.PADDR

SPID SID SERIAL#

26358 441 47439

查看该session的用户名、机器名、程序名、执行的sql等信息:

SELECT a.username,

a.machine,

a.program,

a.sid,

a.serial#,

a.status,

c.piece,

c.sql_text

FROM v$session a,

v$sqltext c

WHERE a.sid =

and a.sql_address=c.address(+)

ORDER BY c.piece

查看该session锁住的对象:

select b.object_name, a.* from v$locked_object a, dba_objects b

where session_id = and a.object_id = b.object_id

and a.locked_mode = 3

--查看是否有其他进程block这些进程

select * from dba_waiters WHERE waiting_session IN (XXX)

--查看这些session在等待什么事件

SELECT * FROM v$session_wait WHERE sid IN (XXX)

SQL*Net message from client 为 等待和客户端的通讯

5、杀掉sid为441的session

alter system kill session '441,47439';(其中441,47439分别是第四步查出的SID和SERIAL#的值)

6、如果第五步不成功,就需要在操作系统下终止进程。

kill -9 26358 (其中26358 是第四步查出SPID的值)

处理完成后,select * from dba_waiters无记录返回,数据库恢复正常。

阻塞情形B:

[一、分析解决过程]

1。查询发现数据库中有大量的library cache pin等待

SELECT * FROM v$session_wait WHERE event LIKE 'library%'

SID SEQ# EVENT P1TEXT P1

49 10781 library cache pin

75 60508 library cache pin

71 56470 library cache pin

...

2。分析library cache pin在等待的对象,发现是p_zs_bdsp_gb

SELECT kglnaown "Owner", kglnaobj "Object",sw.P1RAW

FROM x$kglob p,v$session_wait sw

WHERE p.kglhdadr=sw.P1RAW and sw.SID=987

db_zgxt p_zs_bdsp_gb 00000008E9AC7710

3。随便选等待中的一个session,查找引起library cache pin等待的session。发现其他session都在等待173

SELECT s.sid, kglpnmod "Mode", kglpnreq "Req"

FROM x$kglpn p, v$session s,V$SESSION_WAIT SW

WHERE p.kglpnuse=s.saddr

AND P.kglpnhdl=sw.P1RAW AND Sw.SID=987 order by mode desc

SID Mode Req

173 3 0

1224 0 2

1322 0 2

692 0 2

...

4。查找173的等待情况,发现它也是在等待library cache pin。

SELECT * FROM v$session_wait WHERE sid= 173

173 5502 library cache pin handle address 38280132368 00000008E9AC7710

5。继续查找是哪个session引起173的等待,发现是121

SELECT s.sid, kglpnmod "Mode", kglpnreq "Req"

FROM x$kglpn p, v$session s,V$SESSION_WAIT SW

WHERE p.kglpnuse=s.saddr

AND P.kglpnhdl=sw.P1RAW AND Sw.SID=173

121 2 0

173 0 3

6。查找121的session等待情况,发现它是在等待SQL*Net message from client,这是客户端和服务器之间

的通讯。因此可判定121是引起一系列等待的原因。

SID SEQ# EVENT P1TEXT P1 P1RAW

121 22946 SQL*Net message from client

7。查看121session的情况

select p.spid,s.* from v$session s ,v$process p where s.paddr=p.addr and S.sid in (121)

25645 00000008D5364860 121 89 3844244 00000008D438D518 40 DB_ZGXT 2 2147483644 00000008E130CDA0 ACTIVE DEDICATED 40 DB_ZGXT weblogic app02

8。在操作系统中发现25645进程(也即是121session)已经运行了6个多小时。

[db2:oracle2]prstat

PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP

25645 oracle2 24G 13G cpu194 0 0 6:16:02 2.3% oracle/2

9946 oracle2 24G 13G sleep 60 0 0:24:33 2.1% oracle/2

9。杀掉session 121后,应用恢复正常。

SQL> alter system kill session '121,89';

alter system kill session '121,89'

*

ERROR at line 1:

ORA-00031: session marked for kill

[db2:oracle2]kill -9 25645

------------------------

----------------------------------------------------------

-- 查找使用了什么语句,这个不一定有用(对于等待commit/rollback)

-- 的操作失效

select st.SQL_TEXT

from v$sqltext st,

v$session si

where st.ADDRESS = si.SQL_ADDRESS

and st.HASH_VALUE = si.SQL_HASH_VALUE

and si.SID in ()

order by st.PIECE

----------------------------------------------------------

-- 查找锁的类型、锁住的对象

select distinct lk.TYPE,lk.LMODE,do.owner || '.' || do.object_name

from v$lock lk,

v$locked_object lo,

dba_objects do

where do.object_id = lo.OBJECT_ID

and lo.SESSION_ID = lk.SID

and lk.SID in ()

oracle dba_waiters中的lockid是什么,查询Oracle中的阻塞锁(以及阻塞在哪个数据上)的SQL...相关推荐

  1. oracle查询表空间和用户名,教你查询Oracle中的表空间

    教你查询Oracle中的表空间 提到表空间大家可能都不会陌生,它是数据库中最大的逻辑单位与存储空间单位,数据库系统通过表空间为数据库对象分配空间.表空间在物理上体现为磁盘数据文件,每一个表空间由一个或 ...

  2. 学校的校园景点平面图(校园景点迷你地图C++数据结构)(查询图中顶点间的最短路径查询图中任意两个顶点间的所有路径)

    学校的校园景点平面图(校园景点迷你地图C++&数据结构) 设计要求: (1)建图 以图中顶点表示主要景点,并存放景点的编号.名称.简介等信息: (2)查询 该系统可以查询景点的信息: 查询图中 ...

  3. oracle查表占的物理空间,查询Oracle表实际物理使用大小

    Oracle中有两种含义的表大小 一种是分配给一个表的物理空间数量,而不管空间是否被使用.可以这样查询获得字节数: select segment_name, bytes from user_segme ...

  4. oracle用升序索引去降序查询,Oracle工作札记

    Oracle工作笔记 oracle_hint_使用说明示例 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+AL ...

  5. oracle分页置顶,[置顶]       ibatis查询oracle分页

    开发采用spring+struts+ibatis+extjs,数据库用oracle ibtais配置分页 模糊查询 Java代码 bmzdm LIKE '%$objCondition.bmzdm$%' ...

  6. mysql中distinct删除_MySQL distinct查询返回具有重复信息的行,需要重复数据删除

    我有一个类似于MySQL数据库中下面显示的表格: +----------+----------+----------+----------+----------+ | Column_A | Colum ...

  7. linux oracle实例名查看,不同系统如何查询 ORACLE 实例名

    方法一: 1.windows 下查看注册表 开始 输入regedit 查看 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home1\ORACLE_S ...

  8. oracle查看表扩展,求助:如何查询oracle表空间允许自动扩展的最大值? - Oracle论坛 - 51CTO技术论坛_中国领先的IT技术社区...

    --表空间使用率检查脚本 --注:该脚本有个缺陷,无法检查使用率为100%的表空间,即dba_free_space中没有记录的表空间 SELECT UPPER(F.TABLESPACE_NAME) T ...

  9. oracle查询过程中卡住,查看Oracle中存储过程长时间被卡住的原因

    1:查V$DB_OBJECT_CACHE SELECT * FROM V$DB_OBJECT_CACHE WHERE name='CUX_OE_ORDER_RPT_PKG' AND LOCKS!='0 ...

最新文章

  1. cocos2d-x一些核心概念介绍
  2. vfp全国计算机二级,全国计算机二级VFP试题
  3. flink mysql connector_Flink JDBC Connector:Flink 与数据库集成最佳实践
  4. getDimension等区别
  5. 【软考之路】关于上周参加的软考的几点感想
  6. Java垃圾回收(3)
  7. python redis分布式锁_Python 使用 Redis 实现分布式锁
  8. 大数据_Spark框架_快速上手_word count 案例分析---Spark工作笔记0005
  9. 免费视频直播点播服务器系统,搭建一套完整的网络视频流媒体直播/点播服务系统需要具备哪些条件?...
  10. 使用react定义组件的两种方式
  11. 转: 参数修饰符ref,out ,params的区别
  12. Android PDF阅读
  13. 推荐个汇编语言编译器 XP系统
  14. 十二时辰及经络走向图
  15. ccf201503-1 ccf 图像旋转-内存限制问题
  16. 算24点的一般方法及例题
  17. Opencv2.4.9、VS2010配置及grabcut代码实例
  18. Neo4j图数据库 批量写入与查询
  19. MBT测试实例:做个“机器人”,使其随机、持续的对“web页面”做交互性测试(前奏)MBT整体思考
  20. 医疗:疫情下的人类高质量数据共享场景 | 2021隐私计算半年纪

热门文章

  1. php 可以将图片分类吗,PHP图片处理教程.ppt
  2. 如何使用SoapUI - Soap测试工具
  3. git创建本地仓库和github仓库
  4. IDM下载慢 没有权限下载如何解决?
  5. 使用MySQL可视化客户端,例如SQLyog,Navicat等,只编写SQL语句,使用2的N次方原理,快速初始化百万千万条数据
  6. 平面最近点对问题求解—基于Java语言
  7. VMware虚机备份和恢复原理及过程理解
  8. 阿里云函数计算使用教程
  9. 视觉SLAM十四讲读书笔记(2)P10-P27
  10. 彩灯循环控制系统 电路与电子技术 课程设计