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

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

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

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

解决方法如下:

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

2、session2尝试修改

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

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

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

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

查询结果如下

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

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

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

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

Oracle锁表解决方法的详细记录详解相关推荐

  1. Oracle变异表解决方法--ORA-04091错误

    Oracle变异表解决方法--ORA-04091错误 原因:触发器(或者被语句中引用的用户自定义PL/SQL函数)视图去查询(或修改)一个被另一语句修改而触发的表. 解决方法:重写触发器(或函数)避免 ...

  2. MySQL锁表解决方法(转)

    MySQL锁表解决方法 一.我的处理过程 1.查进程,主要是查找被锁表的那个进程的ID SHOW PROCESSLIST; 2.kill掉锁表的进程ID KILL 10866;//后面的数字即时进程的 ...

  3. ORACLE锁表解决办法

    ORACLE锁表解决办法 [61000][54] ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效 报错原因:对表的操作短时间内太过快速和频繁而导致的数据库锁表. ...

  4. MySQL锁表解决方法

    MySQL锁表解决方法 参考文章: (1)MySQL锁表解决方法 (2)https://www.cnblogs.com/xiaoL/p/11099291.html 备忘一下.

  5. mysql可重复读和间隙锁_解决MySQL可重复读——详解间隙锁

    间隙锁(Gap Lock)是Innodb在可重复读提交下为了解决幻读问题时引入的锁机制,(下面的所有案例没有特意强调都使用可重复读隔离级别)幻读的问题存在是因为新增或者更新操作,这时如果进行范围查询的 ...

  6. Fragment has not been attached yet 解决方法及源码详解

    前言 在使用Fragment的时候,在内存重启的后,很容易出现一些难以预期的bug,下面将继续一边分析源码,一边看看这个bug是怎么产生的. 这个报错的原因,可能和你的情况并不尽然相同.但是你可以通过 ...

  7. 【转】mysql锁表解决方法

    1.SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; 获取到blocking_trx_id 2.SELECT * FROM INFORMATION ...

  8. 电视机wifi显示服务器未连接,为什么电视连上wifi却用不了 电视连上wifi解决方法介绍【图文详解】...

    随着科技发展越来越迅速了,很多电子产品以及 家电 设备功能变得越来越多了.尤其是电视的功能变化的最为明显.之前的电视之内看基本的节目,而现在电视的种类也是非常的多的,不但可以看电视,而且还可以上网.而 ...

  9. MySql锁表-解锁方法

    -- 锁表解决方法 show full processlist; -- 显示完整的进程列表 select * from information_schema.innodb_trx; -- 查看有是哪些 ...

最新文章

  1. 大咖云集!航天智慧物流创意组-技术培训第三期
  2. [leetcode]101.对称二叉树
  3. 为什么大公司一定要使用DevOps
  4. 《大道至简》 第一章 读后感
  5. 小程序 ---- (存在登录功能不符合运营规范问题)
  6. win7 gho封装教程
  7. 为什么管理创新总是发生在汽车行业?
  8. STM32的Flash地址空间的数据读取
  9. Linux常用命令-时刻更新
  10. 上半年要写的博客文章26
  11. Gin渲染html模板报错:ends in a non-text context: {stateHTMLCmt delimNone urlPartNone jsCtxRegexp attrNone
  12. 15行代码轻松绕过淘宝反爬虫机制
  13. 【9秒实验室自研】FLA文件资源导出工具 源码开放
  14. 神经网络预测指标是什么,神经网络怎么预测数据
  15. 第九次作业(输出杨辉三角形)
  16. CS 常用LaTex符号
  17. 计算机专业学生的7个建议
  18. HTK解码代码分析(二)
  19. 十大“元宇宙”电影,元宇宙科幻影视,其中一部为国产文学改编
  20. 洞悉数据分析之驾驶领导舱

热门文章

  1. Qt 测量函数运行耗时
  2. 体系结构第1章—基本概念
  3. 计算机专业推荐的一些超级好用的软件
  4. Galaxy Tab3 10.1如何开启被隐藏的开发者选项?
  5. 51 nod 1024 矩阵中不重复的元素
  6. Python语言零基础入门教程(一)
  7. TextView显示省略号问题
  8. 苹果、安卓ASO优化,aso安卓苹果(二)
  9. 为什么需要虚继承,虚继承的实现原理
  10. AltiumDesigner