原创 2012年03月23日 06:26:50

一、oracle锁的特点

  1、oracle自动施加和释放锁

  2、oracle默认使用行级锁

  3、oracle默认把锁的信息放在数据块中

  4、oracle不支持锁的升级

  5、锁在事务中使用,事务结束后oracle释放锁;如果事务撤销到保存点,则保存点之后的操作持有的锁被释放。

  6、任何oracle锁模式都不影响select,反之亦然。

二、锁定的对象

  1、用户对象 如表、索引、行

  2、系统对象 如数据字典、内存中的共享数据结构

三、锁的粒度

  oracle使用行级粒度锁定对象

四、锁的类型

  1、DML锁:保护表或者索引中的数据。在进行DML操作时,oracle在被更改的行上施加行级锁

  2、DDL锁:在进行DML操作时,oracle自动施加一个表级DDL锁;在进行单纯的DDL操作时,oracle也会在表上施加DDL锁。

  3、内部锁:保护诸如表空间、数据文件、撤销段这样的结构的访问

  4、闩:保护SGA中的共享数据结构的内部机制

  5、数据字典锁:oracle在字典对象被修改时使用的锁

  6、分布锁:分布式数据库系统或者RAC中使用的特殊锁定机制

五、显示锁

  用户可以根据需要显示施加锁,如:lock table table_name  in lock_mode mode [nowait]

  --lock_mode的取值有:share、exclusive、row share、row exclusive、share row exclusive、share update

  也可以使用select .... from table_name for update [nowait];

六、阻塞锁

  一个事务持有其他事务请求的锁,就出现了阻塞锁。

  使用视图v$session查询阻塞关系:

  select username,sid,serial#,blocking_session from v$session    --block_session表示阻塞锁持有者的会话id

  where blocking_session_status='VALID';

  也可以使用v$session和dba_blockers连接查询阻塞锁持有者的信息 如:

  select .... from v$session s,dba_blockers b

  where s.sid=b.helding_session;

  还可以dba_waiters,dba_locks,v$lock等查看锁的情况。

  杀死阻塞会话:1、查询阻塞锁持有者的sid,serial#

                         2、alter system kill session 'sid,serial#';

 

七、死锁

  两个事务相互请求对象持有的锁,这是就发生了死锁。oracle自动解决死锁,杀死持有最近应用的锁的会话,终止其事务。

八、oracle锁管理

  1、执行$oracle_home/rdbms/admin下的catblock.sql和utllockt.sql

    catblock.sql创建与有关的视图 如:dba_waiters,dba_blockers,dba_locks等

    utllocks.sql创建一个树形结构的锁等待图,通过执行该脚本文件可以看到会话之间的阻塞关系

  2、使用oem管理所

 

 

表锁,行锁区别

在调用存储过程中,就会涉及到表锁,行锁这一概念:所谓区别:有索引的时候就是行锁,没有索引的时候就是表索。   innodb 的行锁是在有索引的情况下,没有索引的表是锁定全表的. 表锁演示(无索引...
  • ufojoan
  • ufojoan
  • 2013年11月11日 11:43
  • 3829

自旋锁、阻塞锁、重入锁、偏向锁、轻量锁和重量锁

关于并发编程下的各种锁机制的简单介绍和总结
  • qq_25827845
  • qq_25827845
  • 2017年07月02日 17:51
  • 2597

轻量锁 偏向锁

偏向锁   http://blog.163.com/silver9886@126/blog/static/35971862201472274958280/ Java偏向锁(Biased Lock...
  • xad707348125
  • xad707348125
  • 2015年07月19日 18:36
  • 1235

MySQL学习之——锁(行锁、表锁、页锁、乐观锁、悲观锁等)

锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具。在计算机中,是协调多个进程或县城并发访问某一资源的一种机制。在数据库当中,除了传统的计算资源(CPU、RAM、I/O等等)的争用之外,数据也是一...
  • mysteryhaohao
  • mysteryhaohao
  • 2016年06月14日 12:04
  • 22466

轻量级锁与偏向锁

轻量级锁与偏向锁 要了解轻量级锁与偏向锁的原理和运作过程,需要先了解Hotspot虚拟机的对象头部分的内存布局。 1. 对象头 对象自身的运行时数据 如:哈希吗(HashCode)、GC...
  • wolegequdidiao
  • wolegequdidiao
  • 2015年04月18日 20:30
  • 9150

浅谈Java里的三种锁:偏向锁、轻量级锁和重量级锁

在学习sychronized关键字及其实现细节的时候,发现java中的三种锁,偏向锁,轻量级锁,重量级锁其实也有很多值得探究的地方,引入偏向锁是为了在无多线程竞争的情况下尽量减少不必要的轻量级锁执行路...
  • u012722531
  • u012722531
  • 2017年10月15日 22:10
  • 133

初步了解更新锁(U)与排它锁(X)

一直没有认真觉察UPDATE操作的锁,最近在MSDN上看到一个问题,询问堆表更新的死锁问题,问题很简单,有类似这样的表及数据:CREATE TABLE dbo.tb(     c1 int,     ...
  • zjcxc
  • zjcxc
  • 2014年05月28日 17:13
  • 14491

偏向锁和轻量级锁

偏向锁 为了让线程获取锁的代价减少,从而引入了偏向锁。当一个线程访问同步块并获取锁的时候,会在对象头和栈帧中的琐记录里存储锁偏向的线程ID,以后线程在进入同一个同步块时,不需要进行CAS操作,来加锁...
  • fjse51
  • fjse51
  • 2017年01月05日 17:57
  • 595

java 中的锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁

之前做过一个测试,详情见这篇文章《多线程 +1操作的几种实现方式,及效率对比》,当时对这个测试结果很疑惑,反复执行过多次,发现结果是一样的: 1. 单线程下synchronized效率最高(当时感...
  • zqz_zqz
  • zqz_zqz
  • 2017年04月19日 22:31
  • 6310

偏向锁,轻量级,重量级锁的理解

1:对象头 首先了解下32bit的Java对象头如下: 通过上面的表格,我们可以看出,synchronized用的锁是锁在Java对象头中的,Java的每个对象都可以作为锁,具体表...
  • yuanbing1988
  • yuanbing1988
  • 2017年06月21日 11:34
  • 331
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:
举报原因:
原因补充:

(最多只允许输入30个字)