关于ORACLE 锁的总结

1.概念
  管理对共享资源的并发访问。
2.更新丢失问题的解决方法
  (1)悲观锁。认为数据一开始存在被修改的嫌疑,一开始就锁住行数据,直至自己完成操作后释放锁。
     举个列子可以对悲观锁更好的理解,USERA 用户锁住一行数据,中途离开等原因,其他用户无法更新该行数据。
     照成长时间的等待,这是悲观锁的缺点。而乐观锁只会更新数据时瞬间的锁定,瞬间的释放。
    悲观锁经典例子: select * from t where rn = 1 for update ;
  (2)乐观锁。认为数据不会更改,直至自己要更新数据的时候才锁住行数据。想到乐观锁就会联想到ORA-01555,
     的确快照过旧是乐观锁的真实的写照,当一表更新较频繁,有一事物运行时间较长的情况,就会出现以上的情况
3.阻塞
  如果一个会话持有某个资源的锁,而另一个会话在请求这个资源,就会出现阻塞,数据库中有5条常见的DML语句可能
  会阻塞,具体是: INSERT 、UPDATE 、 DELETE 、 MERGE 和 SELECT FOR UPDATE 。
4.死锁
  如果你有两个会话,每个会话都持有另一个会话想要的资源,此时就会出现死锁。
5.锁的分类
  ORACLE的锁主要有以下3大类:
  DML锁
  DDL锁
 
DML锁分了:
表级锁 TM(表对象上) TM,这里摘取了Table dMl中大写的字母。
 是表级维护锁,防止DDL语句,修改了多少个对象,就能得到多少个 TM 锁 。
行级锁 TX(行对象上) TX,这里摘取了Transactin eXclusive中大写的字母。
 行级排它锁,每个事务只能得到一个 TX 锁。
查询锁的相关视图:v$ transaction,V$lock,v$session

DDL锁分了:
  排他 DDL 锁:这会防止其他会话得到它们自己的 DDL 锁或 TM ( DML )
锁。这说明,在 DDL 操作期间你可以查询一个表,但是无法以任何方式修改这个表。
  共享 DDL 锁:这些锁会保护所引用对象的结构,使之不会被其他会话修改,但
是允许修改数据。
  可中断解析锁:这些锁允许一个对象(如共享池中缓存的一个查询计划)
向另外某个对象注册其依赖性。如果在被依赖的对象上执行 DDL , Oracle 会查看已经对该对象注册了依
赖性的对象列表,并使这些对象无效。因此,这些锁是“可中断的”,。

6.查锁以及杀锁
 (1)查锁
 SELECT p.spid, a.serial#, c.object_name, b.session_id, b.oracle_username,
       b.os_user_name
  FROM v$process p, v$session a, v$locked_object b, all_objects c
 WHERE p.addr = a.paddr AND a.process = b.process
       AND c.object_id = b.object_id
 (2)杀锁
   alter system kill session 'sid,serial#';     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值