Oracle锁表解决方法的详细记录详解
一淘模板网给大家带来了关于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锁表解决方法的详细记录详解相关推荐
- Oracle变异表解决方法--ORA-04091错误
Oracle变异表解决方法--ORA-04091错误 原因:触发器(或者被语句中引用的用户自定义PL/SQL函数)视图去查询(或修改)一个被另一语句修改而触发的表. 解决方法:重写触发器(或函数)避免 ...
- MySQL锁表解决方法(转)
MySQL锁表解决方法 一.我的处理过程 1.查进程,主要是查找被锁表的那个进程的ID SHOW PROCESSLIST; 2.kill掉锁表的进程ID KILL 10866;//后面的数字即时进程的 ...
- ORACLE锁表解决办法
ORACLE锁表解决办法 [61000][54] ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效 报错原因:对表的操作短时间内太过快速和频繁而导致的数据库锁表. ...
- MySQL锁表解决方法
MySQL锁表解决方法 参考文章: (1)MySQL锁表解决方法 (2)https://www.cnblogs.com/xiaoL/p/11099291.html 备忘一下.
- mysql可重复读和间隙锁_解决MySQL可重复读——详解间隙锁
间隙锁(Gap Lock)是Innodb在可重复读提交下为了解决幻读问题时引入的锁机制,(下面的所有案例没有特意强调都使用可重复读隔离级别)幻读的问题存在是因为新增或者更新操作,这时如果进行范围查询的 ...
- Fragment has not been attached yet 解决方法及源码详解
前言 在使用Fragment的时候,在内存重启的后,很容易出现一些难以预期的bug,下面将继续一边分析源码,一边看看这个bug是怎么产生的. 这个报错的原因,可能和你的情况并不尽然相同.但是你可以通过 ...
- 【转】mysql锁表解决方法
1.SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; 获取到blocking_trx_id 2.SELECT * FROM INFORMATION ...
- 电视机wifi显示服务器未连接,为什么电视连上wifi却用不了 电视连上wifi解决方法介绍【图文详解】...
随着科技发展越来越迅速了,很多电子产品以及 家电 设备功能变得越来越多了.尤其是电视的功能变化的最为明显.之前的电视之内看基本的节目,而现在电视的种类也是非常的多的,不但可以看电视,而且还可以上网.而 ...
- MySql锁表-解锁方法
-- 锁表解决方法 show full processlist; -- 显示完整的进程列表 select * from information_schema.innodb_trx; -- 查看有是哪些 ...
最新文章
- 大咖云集!航天智慧物流创意组-技术培训第三期
- [leetcode]101.对称二叉树
- 为什么大公司一定要使用DevOps
- 《大道至简》 第一章 读后感
- 小程序 ---- (存在登录功能不符合运营规范问题)
- win7 gho封装教程
- 为什么管理创新总是发生在汽车行业?
- STM32的Flash地址空间的数据读取
- Linux常用命令-时刻更新
- 上半年要写的博客文章26
- Gin渲染html模板报错:ends in a non-text context: {stateHTMLCmt delimNone urlPartNone jsCtxRegexp attrNone
- 15行代码轻松绕过淘宝反爬虫机制
- 【9秒实验室自研】FLA文件资源导出工具 源码开放
- 神经网络预测指标是什么,神经网络怎么预测数据
- 第九次作业(输出杨辉三角形)
- CS 常用LaTex符号
- 计算机专业学生的7个建议
- HTK解码代码分析(二)
- 十大“元宇宙”电影,元宇宙科幻影视,其中一部为国产文学改编
- 洞悉数据分析之驾驶领导舱