RAC环境中的阻塞 查找锁
发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,RAC环境下的阻塞不同于单实例情形,因为我们需要考虑到位于不同实例的session。也就是说之前查询的v$session,v$lock相应的应变化为全局范围来查找。本文提供了2个查询脚本,并给出实例演
千家信息网最后更新 2025年11月14日RAC环境中的阻塞 查找锁
RAC环境下的阻塞不同于单实例情形,因为我们需要考虑到位于不同实例的session。也就是说之前查询的v$session,v$lock相应的应变化为全局范围来查找。本文提供了2个查询脚本,并给出实例演示那些session为阻塞者,哪些为被阻塞者。有关阻塞的概念以及单实例环境下的阻塞请参考:Oracle 阻塞(blocking blocked)
1、演示环境
[sql] view plain copy print?- scott@DEVDB> select * from v$version where rownum<2;
- BANNER
- --------------------------------------------------------------------------------
- Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
- --在scott session中发布SQL语句,并未提交
- scott@DEVDB> begin
- 2 update emp set sal=sal+100 where empno=7788;
- 3 update dept set dname='DBA' where deptno=10;
- 4 end;
- 5 /
- PL/SQL procedure successfully completed.
- --在leshami session中更新emp对象
- leshami@DEVDB> update scott.emp set sal=sal-200 where empno=7788;
- --在usr1 session中更新emp对象
- usr1@DEVDB> update scott.dept set dname='DEV' where deptno=10;
2、寻找阻塞
[sql] view plain copy print?- scott@DEVDB> @block_session_rac
- USER_STATUS SID_SERIAL CONN_INSTANCE SID PROGRAM OSUSER MACHINE LOCK_TYPE LOCK_MODE CTIME OBJECT_NAME
- --------------- --------------- ---------------- ---- ------------------------------ ------- --------------- --------------- ----------- ---------- -------------------------
- Blocking -> '20,1545' devdb1 20 sqlplus@Linux-01 (TNS V1-V3) oracle Linux-01 Transaction Exclusive 666 DEPT
- Blocking -> '20,1545' devdb1 20 sqlplus@Linux-01 (TNS V1-V3) oracle Linux-01 Transaction Exclusive 666 EMP
- Waiting '49,1007' devdb1 49 sqlplus@Linux-01 (TNS V1-V3) oracle Linux-01 Transaction None 618 EMP
- Waiting '933,11691' devdb2 933 sqlplus@Linux-02 (TNS V1-V3) oracle Linux-02 Transaction None 558 DEPT
- --通过上述脚本我们可以看到session '20,1545' 锁住了对象DEPT以及EMP,而此时session '49,1007'与'933,11691'处于等待状态。
- --下面是另外的一种方式来获取阻塞的情形
- scott@DEVDB> @block_session_rac2
- BLOCKING_STATUS
- ----------------------------------------------------------------------------------------------------------------------------
- SCOTT@Linux-01 ( INST=1 SID=20 Serail#=1545 ) IS BLOCKING USR1@Linux-02 ( INST=2 SID=933 Serial#=11691 )
- SCOTT@Linux-01 ( INST=1 SID=20 Serail#=1545 ) IS BLOCKING LESHAMI@Linux-01 ( INST=1 SID=49 Serial#=1007 )
- --Author : Leshami
- --Blog : http://blog.csdn.net/leshami
3、演示中用到的脚本
[sql] view plain copy print?- [oracle@Linux-01 ~]$ more block_session_rac.sql
- set linesize 180
- col user_status format a15
- col sid_serial format a15
- col program format a30 wrapped
- col machine format a15 wrapped
- col osuser format a15 wrapped
- col conn_instance format a15
- col object_name format a25 wrapped
- SELECT DECODE (l.block, 0, 'Waiting', 'Blocking ->') user_status,
- CHR (39) || s.sid || ',' || s.serial# || CHR (39) sid_serial,
- (SELECT instance_name
- FROM gv$instance
- WHERE inst_id = l.inst_id)
- conn_instance,
- s.sid,
- s.program,
- s.osuser,
- s.machine,
- DECODE (l.TYPE,
- 'RT', 'Redo Log Buffer',
- 'TD', 'Dictionary',
- 'TM', 'DML',
- 'TS', 'Temp Segments',
- 'TX', 'Transaction',
- 'UL', 'User',
- 'RW', 'Row Wait',
- l.TYPE)
- lock_type--,id1
- --,id2
- ,
- DECODE (l.lmode,
- 0, 'None',
- 1, 'Null',
- 2, 'Row Share',
- 3, 'Row Excl.',
- 4, 'Share',
- 5, 'S/Row Excl.',
- 6, 'Exclusive',
- LTRIM (TO_CHAR (lmode, '990')))
- lock_mode,
- ctime--,DECODE(l.BLOCK, 0, 'Not Blocking', 1, 'Blocking', 2, 'Global') lock_status
- ,
- object_name
- FROM gv$lock l
- JOIN gv$session s ON (l.inst_id = s.inst_id AND l.sid = s.sid)
- JOIN gv$locked_object o
- ON (o.inst_id = s.inst_id AND s.sid = o.session_id)
- JOIN dba_objects d ON (d.object_id = o.object_id)
- WHERE (l.id1, l.id2, l.TYPE) IN (SELECT id1, id2, TYPE
- FROM gv$lock
- WHERE request > 0)
- ORDER BY id1, id2, ctime DESC;
- [oracle@Linux-01 ~]$ more block_session_rac2.sql
- SELECT DISTINCT
- s1.username
- || '@'
- || s1.machine
- || ' ( INST='
- || s1.inst_id
- || ' SID='
- || s1.sid
- || ' Serail#='
- || s1.serial#
- || ' ) IS BLOCKING '
- || s2.username
- || '@'
- || s2.machine
- || ' ( INST='
- || s2.inst_id
- || ' SID='
- || s2.sid
- || ' Serial#='
- || s2.serial#
- || ' ) '
- AS blocking_status
- FROM gv$lock l1,
- gv$session s1,
- gv$lock l2,
- gv$session s2
- WHERE s1.sid = l1.sid
- AND s2.sid = l2.sid
- AND s1.inst_id = l1.inst_id
- AND s2.inst_id = l2.inst_id
- AND l1.block > 0
- AND l2.request > 0
- AND l1.id1 = l2.id1
- AND l1.id2 = l2.id2;
阻塞
实例
环境
对象
脚本
演示
情形
更新
查询
不同
中用
也就是
也就是说
全局
方式
概念
状态
范围
语句
参考
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
乌鲁木齐市网络安全保卫
研究型数据库
网络安全半边天
三维可视化手机软件开发
专业服务器安全防护
网络安全法制宣传日
福州英才软件开发公司
学校多个年级数据库
商丘市烟草局网络安全改造
网络安全大学生职业规划范文
华为网络安全的目标
网络安全会成为热点吗
数据库设计期末感想
香港云服务器维护步骤
海安湛谴网络技术有限公司
锐思数据库怎么查审计费用
oracle数据库提示库名
linux加固网络安全
学软件开发大一
为什么无尽对决一直在连接服务器
宾馆管理系统数据库设计安全性
网络安全员怎么做
护苗网络安全绘画作品
视频主播软件开发
环保局网络安全检查总结报告
网络安全应急预案工作指南
收费公路网络安全测试报告
三级网络技术模拟上机软件
局多措并举强化网络安全
复制数据库HTML5