欢迎投稿

今日深度:

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

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


目录
  • 锁表的原因 
  • 解决方法:

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数据库锁表内容请搜索PHP之友以前的文章或继续浏览下面的相关文章希望大家以后多多支持PHP之友!

您可能感兴趣的文章:
  • Oracle锁表解决方法的详细记录
  • oracle锁表该如何解决
  • oracle处理锁表基本操作
  • oracle查询锁表及解锁,修改表字段名与复制表结构和数据的方法
  • 查看Oracle中是否有锁表的sql
  • 深入探讨:Oracle中如何查询正锁表的用户以及释放被锁的表的方法

www.htsjk.Com true http://www.htsjk.com/oracle/47671.html NewsArticle oracle数据库锁表的原因及解决方法, 目录 锁表的原因 解决方法: 1、oracle数据库表在操作insert update 、delete 时忘记提交事务或者回滚,就会发生锁表 2、锁表的原理是 数据库使用独占...
评论暂时关闭