1. 事务锁查询
1.1 每个事务只能有一个TX锁
select
username,
v$lock.sid,
trunc(id1/power(2,16)) rbs,
bitand(id1,to_number('ffff','xxxx'))+0 slot,
id2 seq,
lmode,
request,
block,
v$lock.type
from
v$lock,
v$session
where
v$lock.type = 'TX'
and v$lock.sid = v$session.sid
and v$session.username = USER
/
2. 事务查询
select XIDUSN, XIDSLOT, XIDSQN from v$transaction;
3. 锁定会话与被锁定会话
column blocker format a20
column blockee format a20
column isblocking format a10
select
(
select
username
from
v$session
where
sid=a.sid
) blocker,
a.sid,
' is blocking ',
(
select
username
from
v$session
where sid=b.sid
) blockee,
b.sid
from
v$lock a,
v$lock b
where
a.block = 1
and b.request > 0
and a.id1 = b.id1
and a.id2 = b.id2
/
4. 查看TX与TM锁信息
4.1 一个事务只有一个TX锁,但修改了多少了对象就有多少个TM锁
4.2 ID1列就是对象的ID
select
(
select
username
from
v$session
where
sid = v$lock.sid
) username,
sid,
id1,
id2,
lmode,
request,
block,
v$lock.type
from
v$lock
where sid = (
select
sid
from
v$mystat
where
rownum=1
)
/
5. 查询DDL锁信息
5.1 排他DDL锁,DDL执行期间,其他会话只能查询,不能修改对象和数据
5.2 共享DDL锁,DDL执行期间,其他会话可以查询和修改数据
5.3 可中断解析锁
5.4 创建视图
@D:\oracle\product\10.2.0\db\RDBMS\ADMIN\catblock.sql
select
session_id sid,
owner, -- owner不是锁的拥有者,而是被锁定对象的拥有者
name,
type,
mode_held held,
mode_requested request
from
dba_ddl_locks
where
wner = 'GO';
/
6. 关于阻塞
6.1 insert
有一个带主键的表,或者表上有惟一的约束,但有两个会话试图用同样的值插入一行
多个表通过引用完整性约束相互链接,如果父表正在创建或删除,对子表的插入可能会阻塞
如果应用允许最终用户生成主键/惟一列值,往往就会发生INSERT阻塞
最好使用序列生成主键或唯一键的值
6.2 merge update delete
如果发生此类阻塞,说明应用中同时存在更新丢失的bug
可以采用select for update nowait来防止更新丢失和阻塞
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22558114/viewspace-772909/
,如需转载,请注明出处,否则将追究法律责任。