oracle 的锁

关于锁的理论知识请参考:
http://blog.csdn.net/tangyangbuaa/article/details/4526146

http://blog.csdn.net/liuyiy/article/details/25005393

实验

SQL> select sid from v$mystat where rownum=1;
SID
----------
158
Sql>create table t(x int primary key);
Table created.
SQL>insert into t values(1);
Commit;
SQL> update t1 set x=10 where x=1;
已更新 1 行。
我们创建了一张只有一个字段X的表T,这个字段上有个一个主键( primary key) ,它的意
思是要求这个字段的值唯一。
我们再开一个会话, session 2:
SQL> select sid from v$mystat where rownum=1;
SID
----------
157
SQL> update t1 set x=10 where x=1;
这时候session2就被“ 卡” 在那里了。 我常听开发人员称之为锁表。 其实在数据库中
对这个过程的具体描述是,session 2 被session 1 阻塞( session 2was blocked by session
1)

查询被锁的SQL语句:

select sql_text from v$sql where hash_value in (
    select sql_hash_value from v$session where sid in (select session_id from v$locked_object)
)

这里写图片描述

查询被锁的对象有哪些:

select /*+ RULE */ ls.osuser os_user_name, ls.username user_name,
decode(ls.type, 'RW', 'Row wait enqueue lock', 'TM', 'DML enqueue lock', 'TX',
'Transaction enqueue lock', 'UL', 'User supplied lock') lock_type,
o.object_name object, decode(ls.lmode, 1, null, 2, 'Row Share', 3,
'Row Exclusive', 4, 'Share', 5, 'Share Row Exclusive', 6, 'Exclusive', null)
lock_mode, o.owner, ls.sid, ls.serial# serial_num, ls.id1, ls.id2
from sys.dba_objects o, ( select s.osuser, s.username, l.type,
l.lmode, s.sid, s.serial#, l.id1, l.id2 from v$session s,
v$lock l where s.sid = l.sid ) ls where o.object_id = ls.id1 and o.owner
<> 'SYS' order by o.owner, o.object_name;

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值