WEB开发网
开发学院数据库Oracle Oracle的封锁机制 阅读

Oracle的封锁机制

 2007-05-05 12:04:54 来源:WEB开发网   
核心提示: 当出现如下之一的条件,便释放共享更新锁:(1)、执行提交(COMMIT)语句;(2)、退出数据库(LOGOFF)(3)、程序停止运行,Oracle的封锁机制(5),执行ROLLBACK操作不能释放行锁,从上面讲述可见,从而可提高并行性,4、在应用负荷较高的期间,ORACLERDBMS的加锁

当出现如下之一的条件,便释放共享更新锁:

(1)、执行提交(COMMIT)语句;

(2)、退出数据库(LOG OFF)

(3)、程序停止运行。

执行ROLLBACK操作不能释放行锁。

从上面讲述可见,ORACLE RDBMS的加锁机制,解决了并发事务的相容与互斥问题。相容保证事务的并发性,互斥确保数据的一致性。不同用户锁的相容与互斥关系由下图给出。

其中最后一行最后一列为其它用户提供在不同行上设置SHARE UPDATE锁。但当用户1在某行上进行更新操作时,用户2只有等待用户1提交事务后,才能更新自己所封锁的行。

中最后一行最后一列为其它用户提供在不同行上设置SHARE UPDATE锁。但当用户1在某行上进行更新操作时,用户2只有等待用户1提交事务后,才能更新自己所封锁的行。

死锁

封锁虽然能够有效的解决并发操作,但是任何资源的独占都会有死锁的危险。例如:有两个事务T1,T2,T1对数据A施加独占封锁,T2对数据B施加了独占封锁。再假设T1要对数据B加锁,由于B已被T2独占封锁,因此T1置于等待状态,等待B被释放;现在若T2也要对A进行封锁,由于A已被T1独占封锁,因此T2也被置于等待状态。这样就形成了两个事务相互等待的状态,而且永远不能结束,此种情况称为死锁。

在Oracle系统中能自动发现死锁,并选择代价最小的,即完成工作量最少的事务予以撤消,释放该事务所拥有的全部锁,记其它的事务继续工作下去。

从系统性能上考虑,应该尽可能减少资源竞争,增大吞吐量,因此用户在给并发操作加锁时,应注意以下几点:

1、对于UPDATE和DELETE操作,应只封锁要做改动的行,在完成修改后立即提交。

2、当多个事务正利用共享更新的方式进行更新,则不要使用共享封锁,而应采用共享更新封锁,这样其它用户就能使用行级锁,以增加并行性。

3、尽可能将对一个表的操作的并发事务施加共享更新锁,从而可提高并行性。

4、在应用负荷较高的期间,不宜对基础数据结构(表、索引、簇和视图)进行修改。

上一页  1 2 3 4 5 

Tags:Oracle 封锁 机制

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接