当前位置: 首页 > news >正文

Oracle锁处理

背景:

随着数据库版本不断迭代更新, v$session

视图的内容越来越丰富,可以直接使用blocking_session、blocking_instance、final_blocking_instance和final_blocking_session字段进行定位。对于锁层次的排查可以重复查询v$session来确定,但如果锁层次有100层,那么通过人工遍历100次的方式,显然不合适。
自Oracle 9i开始,DBA就可以使用SYS_CONNECT_BY_PATH函数将父节点到当前行的内容以路径或层次的形式显示出来。

可以使用如下语句查询锁信息:

select a.inst_id,a.PROCESS,a.SID,a.serial#,a.SQL_ID,a.EVENT,a.status,a.program,connect_by_isleaf as isleaf,sys_connect_by_path(a.SID || '@' || a.INST_ID, '<-') tree,level as tree_level
from gv$session a
start with a.blocking_session is not null
connect by (a.sid || '@' || a.INST_ID)=prior(a.BLOCKING_SESSION || '@' || a.blocking_instance);

参数说明:
INST_ID:会话所在的节点号
PROCESS:客户端进程号,v$process中的spid不是同一个
ISLEAF:是否为源头,0代表否,1代表是
TREE:树形结构,锁的层次,例如,<-152@2<-153@2<-161@1,从左到右表示节点2的会话152被节点2的会话153堵塞,而节点2的会话153又被节点1的会话161堵塞。所以节点1的会话161是锁的源头。
TREE_LEVEL:树形层次

源头的查杀方式有两种

1.通过ISLEAF进行筛选,直接查杀锁源头

select 'alter system kill session ''' || sid || '' || ',' || serial# || ',@' ||
inst_id || ''' immediate;' db_kill_session
from (
select a.inst_id,a.PROCESS,a.SID,a.serial#,a.SQL_ID,a.EVENT,a.status,a.program,connect_by_isleaf as isleaf,sys_connect_by_path(a.SID || '@' || a.INST_ID, '<-') tree,level as tree_level
from gv$session a
start with a.blocking_session is not null
connect by (a.sid || '@' || a.INST_ID)=prior(a.BLOCKING_SESSION || '@' || a.blocking_instance)
) where isleaf = 1 order by tree_level asc;
select inst_id, 'kill -9 ' || spid os_kill_session
from (select p.inst_id,p.spid,a.SID,a.serial#,a.SQL_ID,a.EVENT,a.status,a.program,a.MACHINE,connect_by_isleaf as isleaf,sys_connect_by_path(a.SID || '@' || a.INST_ID, '<-') tree,level as tree_level
from gv$session a,gv$process p
where a.inst_id = p.INST_ID and a.paddr = p.addr
start with a.blocking_session is not null
connect by (a.sid || '@' || a.INST_ID) = prior(a.BLOCKING_SESSION || '@' || a.blocking_instance))
where isleaf = 1
order by tree_level asc;

2.借助v$session中的final_blocking_instance和final_blocking_session定位锁源头

select 'alter system kill session ''' || ss.sid || '' || ',' || ss.serial# || ',@' || ss.inst_id || ''' immediate;' db_kill_session
from gv$session s, gv$session ss
where s.final_blocking_session is not null
and s.FINAL_BLOCKING_INSTANCE = ss.inst_id
and s.final_blocking_session = ss.SID
and s.sid <> ss.sid
select p.INST_ID, 'kill -9 ' || p.spid os_kill_session
from gv$session s,gv$session ss,gv$process p
where s.final_blocking_session is not null
and s.FINAL_BLOCKING_INSTANCE = ss.INST_ID
and s.FINAL_BLOCKING_SESSION = ss.sid
and ss.PADDR = p.ADDR
and ss.inst_id = p.INST_ID
and s.sid <> ss.sid
http://www.lryc.cn/news/221218.html

相关文章:

  • 持续集成交付CICD:安装Jenkins Slave(从节点)
  • Dart(一):Dart入门
  • [动态规划] (十一) 简单多状态 LeetCode 面试题17.16.按摩师 和 198.打家劫舍
  • 【EI会议投稿】第三届计算机、人工智能与控制工程国际学术会议 (CAICE 2024)
  • python 之 列表推导式
  • 【左程云算法全讲2】链表、栈、队列、递归、哈希表和有序表
  • SQL第三次上机作业
  • 前端事件案例补充
  • 3.8 Android eBPF HelloWorld调试(二)
  • xss如何快速提取cookies
  • 在 ASP.NET C# 中用Aspose.PDF将 PDF 页面转换为 JPG 图像
  • Docker Compose安装milvus向量数据库单机版-milvus基本操作
  • 极致性能优化:前端SSR渲染利器Qwik.js | 京东云技术团队
  • ES6~ES13新特性(二)
  • soildwork2022怎么样添加螺纹孔?
  • 【t5 pytorch版源码学习】t5-pegasus-pytorch源码学习
  • 【springboot】spring的Aop结合Redis实现对短信接口的限流
  • 【MedusaSTears】怎么禁用edge浏览器截图功能?
  • 【计算机网络】(谢希仁第八版)第三章课后习题答案
  • 批量异步任务处理
  • 宜昌市公安局、点军区政府与中科升哲达成战略合作,共建视频图像联合创新实验室
  • java版小程序商城免费搭建-直播商城平台规划及常见的营销模式有哪些?电商源码/小程序/三级分销
  • Linux下yum源配置实战
  • JSONP 跨域访问(2), JSONP劫持
  • 【java】实现自定义注解校验——方法一
  • JavaScript基础入门03
  • P1903 [国家集训队] 数颜色 / 维护队列
  • uniapp 请求接口的方式
  • 怎么查看当前vue项目,要求的node.js版本
  • QT5自适应