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的锁。