ORACLE数据库巡检SQL脚本--23、检查Oracle数据库中被锁定的数据库对象

该脚本用于检查Oracle数据库中被锁定的数据库对象(表、索引等),并关联获取持有锁的会话信息,是定位死锁、锁阻塞问题,排查业务操作卡顿的核心工具。

一、sql脚本

sql 复制代码
SELECT S.SID,
       S.SERIAL#,
       S.USERNAME,
       S.SCHEMANAME,
       S.OSUSER,
       S.MACHINE,
       S.TERMINAL,
       S.PROGRAM,
       O.OWNER,
       O.OBJECT_NAME,
       O.OBJECT_TYPE,
       O.OBJECT_ID
  FROM DBA_OBJECTS O, V$LOCKED_OBJECT L, V$SESSION S
 WHERE O.OBJECT_ID = L.OBJECT_ID
       AND S.SID = L.SESSION_ID;

二、脚本说明

1、使用场景

  • 故障排查:业务操作卡顿、超时,或出现"ORA-00054: 资源正忙"错误时,定位锁持有会话;
  • 日常巡检:定期检查锁状态,提前发现潜在的锁阻塞风险;
  • 变更验证:批量数据操作后,确认是否存在残留锁;
  • 性能优化:分析锁持有模式,优化业务SQL的锁竞争问题。

2、字段说明

字段名 说明
SID 持有锁的会话ID,用于后续终止异常会话
SERIAL# 会话序列号,与SID配合唯一标识会话
USERNAME 持有锁的数据库用户名,定位业务归属
SCHEMANAME 会话对应的Schema名称
OSUSER 会话对应的操作系统用户,定位客户端来源
MACHINE 会话所在的客户端主机名,定位锁的物理来源
PROGRAM 会话对应的客户端程序(如应用服务器、PL/SQL Developer)
OWNER 被锁定对象的所有者
OBJECT_NAME 被锁定的对象名称(如业务表、索引)
OBJECT_TYPE 被锁定对象的类型(如TABLEINDEX
OBJECT_ID 被锁定对象的唯一ID,用于关联查询

三、注意事项

查询结果有记录返回即表示存在锁持有情况,以下情况代表存在问题:

  1. 核心业务对象(如交易表、订单表)被长时间锁定(超过10分钟);
  2. 同一对象被多个会话持有锁,或存在锁等待链 (需结合V$LOCK视图进一步排查);
  3. 持有锁的会话处于非活跃状态(如客户端已断开,但会话未释放锁);
  4. 锁持有时间与业务操作预期不符(如简单查询持有锁超过1分钟)。

四、补充说明

1、异常的影响

  • 业务阻塞:被锁定对象无法执行写入操作,导致业务操作超时、失败;
  • 性能下降:锁竞争会增加CPU、内存消耗,引发数据库整体响应变慢;
  • 死锁风险 :多个会话互相持有对方需要的锁时,会引发死锁(ORA-00060错误),导致事务回滚;
  • 资源浪费:非活跃会话持有锁会占用数据库资源,无法被其他会话使用。

2、处理建议

  1. 验证锁的合理性:确认锁持有是否为正常业务操作(如批量数据更新),若为正常操作可等待任务完成;

  2. 终止异常会话 :若为异常锁(如客户端断开未释放的锁),可通过SIDSERIAL#终止会话:

    sql 复制代码
    ALTER SYSTEM KILL SESSION 'SID, SERIAL#' IMMEDIATE;
  3. 优化业务SQL:减少锁持有时间(如缩短事务范围、避免全表锁定),使用行级锁替代表级锁;

  4. 排查锁等待链 :结合V$LOCK视图定位锁阻塞的源头:

    sql 复制代码
    SELECT BLOCKING_SESSION, SID, TYPE, ID1, ID2 FROM V$LOCK WHERE BLOCK = 1;
  5. 配置锁告警:对核心业务对象的锁持有时间配置告警(如超过5分钟触发告警)。

相关推荐
正儿八经的少年6 分钟前
Spring 事务保证数据一致性
java·数据库·spring
foo1st11 分钟前
MySQL 8.0(Windows)升级笔记
数据库·笔记·mysql
张人玉13 分钟前
基于 Vue 3 + ECharts + Express + SQLite 的可视化大屏与业务管理系统——YOLOv8 高精度车辆行人检测与计数系统
数据库·vue.js·yolo·sqlite·echarts·express
吴声子夜歌23 分钟前
MongoDB 4.x——高级特性(Change Stream和事务)
数据库·mongodb
是店小二呀23 分钟前
NanoPi R4S怎么搭私人云盘?iStoreOS与WebDAV完整教程
数据库·人工智能
Database_Cool_34 分钟前
云数据库备份是怎么实现的、支持时间点恢复吗:阿里云 RDS MySQL 备份与 PITR 详解
数据库·mysql·阿里云
2501_942389551 小时前
为支撑持续攀升的AI资本开支
人工智能·oracle·hbase·database·storm
名字还没想好☜1 小时前
Go 的 select 实战:超时、非阻塞收发与优雅退出的三个套路
开发语言·数据库·golang·go·并发
NWU_LK1 小时前
【WebFlux】第六篇 —— 全链路响应式与数据库交互
java·数据库
叶总没有会1 小时前
3.2 构建AI智能体项目扩展知识
java·数据库·人工智能·spring·ai