检测锁争用

一、锁类型

1、  DDL锁:ORACLE自动发布和释放。

2、  DML锁:ROLLBACK语句时,事务也结束。

3、  内部锁:

二、锁模式

1、  RS(ROW SHARE)为了更新,某个事务在表中锁定了行,但是允许其他事务锁定表中的其他行。

2、  RX(ROW EXCLUSIVE)为了更新,某个事务在表中锁定了行,但是不允许其他事务锁住这个表。

3、  S(SHARE)某个事务以一个模式锁定了表,这个模式允许其他事务以SHARE模式锁定这个表,但不允许在这个表中进行任何更新

4、  SRX(SSX)(SHARE ROW EXCLUSIVE/SHARE-SUBEXCLUSIVE)在SHARE MODE中,不允许其他事务锁定这个表,并且不允许DML语句

5、  TM 表级别的锁

6、  TX 行级别的锁

7、  UUL用户定义的锁

8、  XX(EXCLUSIVE)这个表被锁定了,而且不允许其他会话锁定这个表,或者把DML语句提交到这个表。

三、锁级别

1、  数据库级别

Alter system enable restricted session;

Startup mount;

Alter database open read only;

2、  表级别

Lock table table_name in lock_mode mode;

3、  行级别

4、  列级别:ORACLE不支持

四、SET TRANSACTION

1、  SERIALIZABLE 确保这个模式的事务总是看到原来的数据库

2、  READ COMMITTED 一个事务只看到已经被某个其他事务提交了数据库的修改

Set transaction isolation level serializable;

五、检测与解决锁争用

select * from v$lock;

select * from dba_blockers; 阻塞其它用户会话的ID。

select * from dba_waiters; 等待被阻塞会话释放的锁的会话ID。

select * from v$locked_object;

查询一个用户是否被另一个用户阻塞

select 'blocker('||bw.holding_session||':'||sb.username||') - sql:'||bq.sql_text BLOCKERS,

       'waiter ('||bw.waiting_session||':'||sw.username||') - sql:'||sq.sql_text WAITERS

from dba_waiters bw,v$session sb,v$session sw,v$sqlarea bq,v$sqlarea sq

where bw.holding_session=sb.sid and bw.waiting_session=sw.sid and sb.PREV_SQL_ADDR=bq.ADDRESS and sw.sql_address=sq.ADDRESS and bw.mode_held<>'None';

@/ora/prod/proddb/9.2.0/rdbms/admin/utllockt.sql

Dbms_lock

Alter system kill session;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10756358/viewspace-246171/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10756358/viewspace-246171/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值