`

Oracle锁表的查询和解锁

阅读更多

工作了一段时间,有一天测试的同事问我,我的一个后台shell脚本每次手动启动之后就像挂死在那里,也不打印日志了,当时觉得奇怪,为什么会出现这个问题呢,之前从未遇到过,打开代码,发现在挂死的那里后面有个和数据库交互去改变某一个表的字段值的操作,猜想下,估计是锁表了,和测试的同事沟通之后,果然有一个同事当时就在操作那个表中的那个字段,没有提交,刚好是我要修改的,他们的语句是select * from test for update;然后我去修改那个值得时候,当然就处于等待状态了,但到目前为止,只是猜想,要测试下知道,发了一条查询锁表的语句给测试耳朵同事,他们执行之后果然有输出,那么就证明了我的猜想,如何解锁呢?我又不得不再发一条语句给他们,问题解决了,现在把sql贴出来,以备后期查看。

 

第一种:

select sess.sid, 
    sess.serial#, 
    lo.oracle_username, 
    lo.os_user_name, 
    ao.object_name, 
    lo.locked_mode 
    from v$locked_object lo, 
    dba_objects ao, 
    v$session sess 
where ao.object_id = lo.object_id and lo.session_id = sess.sid; 

 

第二种:

select * from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID;

 

两种方式都可以查出当前用户下那些表被锁住了。

 

杀掉锁表进程: 
如有记录則表示有表被锁住了,记录下SID和serial# ,將两个字段的取值替换下面的例子中的两个数字(注意中间是以逗号分隔的),即可解除LOCK 
如下图:


 

alter system kill session '138,19'; 

 

下面简单说下Oracle下集中锁的模式(借鉴的):

 

ORACLE里锁有以下几种模式: 
   
  0:none 
  1:null 空 
  2:Row-S 行共享(RS):共享表锁 
  3:Row-X 行专用(RX):用于行的修改 
  4:Share 共享锁(S):阻止其他DML操作 
  5:S/Row-X 共享行专用(SRX):阻止其他事务操作 
  6:exclusive 专用(X):独立访问使用 
  
  数字越大锁级别越高, 影响的操作越多。 
  一般的查询语句如select ... from ... ;是小于2的锁, 有时会在v$locked_object出现。 
   
  select ... from ... for update; 是2的锁。 
   
  当对话使用for update子串打开一个游标时, 
  所有返回集中的数据行都将处于行级(Row-X)独占式锁定, 
  其他对象只能查询这些数据行,不能进行update、delete或select...for update操作。 
   
  insert / update / delete ... ; 是3的锁。 
   
  没有commit之前插入同样的一条记录会没有反应, 
  因为后一个3的锁会一直等待上一个3的锁, 我们必须释放掉上一个才能继续工作。 
   
  创建索引的时候也会产生3,4级别的锁。 
   
  locked_mode为2,3,4不影响DML(insert,delete,update,select)操作, 
  但DDL(alter,drop等)操作会提示ora-00054错误。 
   
  有主外键约束时 update / delete ... ; 可能会产生4,5的锁。 
   
  DDL语句时是6的锁。

 

 

 

  • 大小: 10.4 KB
分享到:
评论

相关推荐

    Oracle的锁表与解锁

    本文将深入探讨Oracle中的锁机制,特别是如何锁表与解锁,以及相关的SQL查询语句,帮助数据库管理员和开发人员更好地理解和管理Oracle数据库的锁状态。 #### 锁的类型 在Oracle中,锁主要分为两种类型: 1. **TX...

    oracle锁表和解锁语句示例.sql

    oracle锁表和解锁语句示例。

    oracle查询锁表和解锁byxiaoheng

    oracle查询锁表和解锁。oracle在操作的过程中经常会遇到锁表的情况,一般能够用kill命令消除。

    oracle锁表及解锁

    ### Oracle锁表与解锁详解 在Oracle数据库管理中,锁是一种关键机制,用于控制多个用户对数据资源的并发访问,防止数据冲突和不一致。本文将深入探讨Oracle中检查锁表的方法以及如何对表进行解锁。 #### Oracle锁...

    oracle锁表查询oracle锁表查询oracle锁表查询

    ### Oracle锁表查询详解 ...通过以上介绍,我们可以看到Oracle提供了丰富的工具和技术来管理和查询锁表情况。合理利用这些功能可以帮助数据库管理员更好地监控和管理数据库中的并发操作,从而提高系统的稳定性和性能。

    oracle锁表后,如何解锁

    Oracle锁表后如何解锁 Oracle锁表是指在Oracle数据库中某个表被锁定,无法进行操作的情况。这种情况经常发生在多用户同时访问同一个表时,某个用户锁定了该表,导致其他用户无法访问该表。那么,在不知道谁锁的情况...

    oracle存储过程解锁

    总结来说,解锁Oracle存储过程的过程涉及到识别锁定会话、查询锁定详情,并最终终止锁定会话以释放锁定。这一系列操作需要对Oracle数据库的系统视图有深入的理解,同时也需要具备一定的数据库管理经验。通过遵循上述...

    oracle 解锁表

    oracle 解锁表,可以用此字句,对表进行解锁,但是要有相应的权限

    oracle锁表处理

    Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?

    ORACLE 如何查询被锁定表及如何解锁释放session

    ### ORACLE 如何查询被锁定表及如何解锁释放session 在Oracle数据库管理中,了解如何查询被锁定的表以及如何解锁这些锁定对于确保数据库高效运行至关重要。本文将详细介绍如何使用Oracle SQL查询锁定的表,并提供一...

    oracle解锁语句.txt

    oracle解锁语句,常用解锁语句,经过测试实用;oracle解锁语句,常用解锁语句,经过测试实用。

    oracle解锁,死锁

    在深入讨论Oracle解锁和死锁之前,我们首先需要了解Oracle数据库中的锁机制。 1. **共享锁(S)**:允许多个用户读取行,但不允许修改。 2. **排他锁(X)**:允许单个用户修改行,其他用户只能等待。 3. **共享更新锁...

    MySQL锁类型以及子查询锁表问题、解锁1

    在MySQL中,主要存在两种类型的锁:行级锁(Row-Level Locks)和表级锁(Table-Level Locks)。InnoDB存储引擎默认支持行级锁,而MyISAM只支持表级锁。 行级锁能提供更高的并发性能,因为它只锁定操作影响的具体行...

    oracle数据表解锁

    B.SESSION_ID 锁表SESSION_ID, B.ORACLE_USERNAME 锁表用户名, decode(D.type, 'XR', 'NULL', 'RS', 'SS(Row-S)', 'CF', 'SS(Row-S)', 'TM', 'TABLE LOCK', 'PW', 'TABLE LOCK', 'TO', 'TABLE LOCK',...

    oracle锁表解决

    ### Oracle锁表解决 在Oracle数据库管理中,锁表是一个常见的问题,特别是在高并发的应用场景下。当一个表被锁定时,其他用户或进程可能无法访问该表,从而导致应用程序出现延迟或者错误。因此,了解如何有效地解锁...

    Oracle数据库解锁工具

    总的来说,Oracle数据库解锁工具是开发环境中解决特定问题的实用工具,它简化了解锁账户的过程,使得管理员和开发者能够更加高效地管理Oracle数据库的用户权限。通过PowerBuilder的集成开发环境,用户可以方便地配置...

    oracle锁库解锁方法

    针对oracle数据库 解锁方法 ,个人使用 希望大家能够有所帮助

    Oracle表死锁与解锁

    Oracle数据库在运行过程中,可能会遇到一种情况,那就是“表死锁”,这会...通过理解Oracle表死锁的原理、使用上述检测和解决方法,以及遵循最佳实践,可以有效地管理和防止数据库死锁,保证系统的稳定性和高效运行。

Global site tag (gtag.js) - Google Analytics