当前位置: 代码网 > it编程>数据库>Oracle > oracle数据库锁表的原因及解决方法

oracle数据库锁表的原因及解决方法

2024年05月19日 Oracle 我要评论
1、oracle数据库表在操作insert update 、delete 时忘记提交事务或者回滚,就会发生锁表2、锁表的原理是 数据库使用独占式封锁机制,当执行上面的语句时,对表进行锁住,直到发生co

1、oracle数据库表在操作insert  update 、delete 时忘记提交事务或者回滚,就会发生锁表 

2、锁表的原理是 数据库使用独占式封锁机制,当执行上面的语句时,对表进行锁住,直到发生commite 或者 回滚 或者退出数据库用户 

锁表的原因 

第一、 a程序执行了对 tablea 的 insert ,并还未 commite时,b程序也对tablea 进行insert 则此时会发生资源正忙的异常 就是锁表

第二、锁表常发生于并发而不是并行(并行时,一个线程操作数据库时,另一个线程是不能操作数据库的,cpu 和i/o 分配原则)

当发生锁表后,我们应当kill 掉锁表的sql进程,这样就可以解除锁表;

解决方法:

第一步:找出被锁表对应的session_id

select b.owner, b.object_name, a.session_id, a.locked_mode
  from v$locked_object a, dba_objects b
 where b.object_id = a.object_id;

第二步:根据上一步查出来的session_id找出对应的serial#

select b.username, b.sid, b.serial#, logon_time
  from v$locked_object a, v$session b
 where a.session_id = b.sid
 order by b.logon_time;

第三步(解锁):杀掉对应的进程

alter system kill session 'session_id,serial#';

第四步:完事!

到此这篇关于oracle数据库锁表的原因及解决方法的文章就介绍到这了,更多相关oracle数据库锁表内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com