文章缩略图

Oracle锁表解决方法的详细记录详解

2022-08-18 00:00:00 技术教程 8853 阅读需45分钟
图标

本文最后更新于2022-08-18 00:00:00已经过去了982天 请注意内容时效性

热度 112 评论 0 点赞66
钞能力。你在哪?此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“钞能力。你在哪?”或者“mdyc919293”或者微信扫描右侧二维码关注公众号。

一淘模板给大家带来了关于Oracle的相关知识,在开发Oracle数据库时,我们常遇到频繁操作的Oracle数据表,会出现Oracle锁表,下面给大家介绍了关于Oracle锁表解决方法的相关资料,希望对大家有帮助。

锁表或锁超时相信大家都不陌生,经常发生在DML语句中,产生的原因就是数据库的独占式封锁机制,当执行DML语句时对表或行数据进行锁住,直到事务提交或回滚或者强制结束当前会话。

对于我们的应用系统而言锁表大概率会发生在SQL执行慢并且没有超时的地方(一条SQL由于某种原因(Spoon工具做数据抽取与推送)一直执行不成功并且一直不释放资源)因此写出高效率SQL也尤为重要!还有另外情况也会发生锁表,就是高并发场景,高并发会带来的问题就是Spring事务会造成数据库事务未提交产生死锁(当前事务等待其他事务释放锁资源)!从而抛出异常java.sql.SQLException: Lock wait timeout exceeded;。

那么如何解决锁表或锁超时呢?临时性解决方案就是找出锁资源竞争的表或语句,直接结束当前会话或sesstion,强制释放锁资源。例如

解决方法如下:

1、session1修改某条数据但是不提交事务,session2查询未提交事务的那条记录

 Oracle锁表解决方法的详细记录详解 技术教程

2、session2尝试修改

 Oracle锁表解决方法的详细记录详解 技术教程

我们可以看到修改未提交事务的记录会处于一直等待状态,直到对方释放锁资源或强制关闭session1。这里也说明了Oracle做到了行级锁!

这里只是简单的模拟了出现锁表情况,可以一眼看出就是session1导致的锁表。实际开发中遇到这种情况一般都是使用SQL直接查出锁资源竞争的表或语句然后进行资源的强制释放!!

3、session3查询竞争资源的表或语句,强制释放资源

  1. -- 查询未提交事务的session信息,注意执行以下SQL,用户需要有DBA权限才行
  2. SELECT
  3.     L.SESSION_ID,
  4.     S.SERIAL#,
  5.     L.LOCKED_MODE AS 锁模式,
  6.     L.ORACLE_USERNAME AS 所有者,
  7.     L.OS_USER_NAME AS 登录系统用户名,
  8.     S.MACHINE AS 系统名,
  9.     S.TERMINAL AS 终端用户名,
  10.     O.OBJECT_NAME AS 被锁表对象名,
  11.     S.LOGON_TIME AS 登录数据库时间
  12. FROM V$LOCKED_OBJECT L
  13.     INNER JOIN ALL_OBJECTS O ON O.OBJECT_ID = L.OBJECT_ID
  14.     INNER JOIN V$SESSION S ON S.SID = L.SESSION_ID
  15. WHERE 1 = 1

查询结果如下

 Oracle锁表解决方法的详细记录详解 技术教程

对我们强制释放资源有用的只有前面两个字段,例如

  1. -- 强制 结束/kill 锁表会话语法
  2. ALTER SYSTEM KILL SESSION 'SESSION_ID, SERIAL#';
  3.  
  4. -- 强制杀死session1,让session2可以修改id=5的那条记录
  5. ALTER SYSTEM KILL SESSION '34, 111';

强制杀死session1后,注意观察session2的执行情况!我们会发现session2的等待会立即终止并执行!相信小伙伴们都有一个疑惑,session_id有29和34,如何确定他们属于session1还是session2,保证杀死的是session1让session2成功执行DML语句?

其实也很简单,这里的判断方式就是session1执行更新但不提交事务,可先用以上SQL查询未提交事务的session信息,此时查到的就是session1的信息。

你可能想看:
继续阅读本文相关话题
更多推荐
发表评论

共有[ 0 ]人发表了评论

🥰 😎 😀 😘 😱 🤨 🥵 😔 😤 😡 😭 🥱 🤡 ☠️ 💖 🤖 💢 💥

评论列表
暂无评论

暂时没有评论,期待您的声音!

品牌认证 W3C认证 MYSSL认证 TrustAsia 安全签章
扫码访问手机版
二维码图片