oracle锁

   ORACLE中的lock机制,一般开发人员并不很关心,就算是面试技术人员也偶尔会一提而过,因为oracle的锁机制基本都是为我们自动创建,比如表级锁,行级锁,排他锁,共享锁。。基本我们不用手工去创建锁,而数据库会自动创建,但是了解锁的机制原理还是有必要的。

首先要明白,什么是锁,锁是为什么而设置的。锁(lock)机制用于管理对共享资源的并发访问。这里所谓的共享资源部仅仅是表级,行级数据,还包括存储过程,甚至SGAsystem global aera)中的内存数据结构等。那么这句话就可以理解为为了管理共享资源的问题,需要建立锁机制。共享资源所引发的问题无非就是并发访问时出现的问题,包括,脏读,不可重复读,更新丢失问题。

下面一个问题就是oracle的锁耗内存,资源吗?如果锁是一种非常昂贵的资源,那么使用锁机制一定会加重内存负担。这个真不知道,引用tom书上的话“锁不是稀有资源。恰恰相反,只要需要,你就应该长期地保持数据上的锁。锁可能并不稀少,而且它们可以防止其他会话修改信息。”

弄清楚什么是悲观锁定与乐观锁定:悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。

乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。[1] 乐观锁不能解决脏读的问题。

这两种锁机制都能解决数据完整性问题,但是采取的方式不一样。悲观锁定是假设会发生并发冲突,所以会在访问资源的时候,加上锁,防止其他用户来访问。而乐观锁则只是在数据提交的时候,检查是否有并发冲突,如果没有则提交,如果有则等待。

前者能有效的保持完整性问题,但是获得即加锁的方法会大大降低性能,如果10000个用户访问这个资源,一个用户获得后就加排他锁,那么其他9999个用户都不能使用该资源,性能极大降低。所以在并发性很大时,一般采取乐观锁。

锁的类型:

DML 锁(DML lock): DML 代表数据操纵语言(Data Manipulation Language)。一般来讲,

这表示SELECTINSERTUPDATEMERGE DELETE 语句。DML 锁机制允许并发执行数据修改。

例如,DML 锁可能是特定数据行上的锁,或者是锁定表中所有行的表级锁。

DDL 锁(DDL lock): DDL 代表数据定义语言(Data Definition Language),如CREATE 

ALTER 语句等。DDL 锁可以保护对象结构定义。

内部锁和闩:Oracle 使用这些锁来保护其内部数据结构。这是ORACLE中的一种特殊锁,用于顺序访问内部系统结构。当事务需向缓冲区写入信息时,为了使用此块内存区域,ORACLE首先必须取得这块内存区域的闩锁,才能向此块内存写入信息。

对于DML锁:http://sishuok.com/forum/posts/list/247.html这篇文章介绍的很好。

对于DDL锁:http://java.chinaitlab.com/base/762590.html这篇文章介绍的很好

对于内部锁和闩:

还有一个重要的知识点:外键列上要加上索引,不然非常影响性能。因为当我们创建了外键。这样删除或修改父表记录时,不用锁子表全表,只要锁相关行就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值