Orcale查询锁表记录

----查询被锁表 
SELECT l.session_id sid,
            s.serial#,
            l.locked_mode 锁模式,
            l.oracle_username 登录用户,
            l.os_user_name 登录机器用户名,
            s.machine 机器名,
            s.terminal 终端用户名,
            o.object_name 被锁对象名,
            s.logon_time 登录数据库时间   
            FROM v$locked_object l,
                      all_objects o,
                      v$session s   
            WHERE l.object_id = o.object_id   
            AND l.session_id = s.sid    
            ORDER BY sid,s.serial#;       
---解锁
ALTER system kill session '1301,49531';

 

 

 

补充:

       锁模式        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的锁

posted @ 2019-09-04 16:22  乐癌晚期患者  阅读(1138)  评论(0编辑  收藏  举报