2008年(239)
分类: Oracle
2008-06-17 23:27:46
当一个事务申请对某一数据加某一类型的锁时,如果该数据上不存在相冲突的锁(由其它事务所加)时,则锁被授予该事务。
在锁的授予时,要防止有些事务总是不能获得所需要的锁,以至于事务永远无法执行。例如:事务A要对数据加排它锁,如果数据上已经存在共享锁,则事务A等待。这时,事务B也需要在该数据上放置共享锁,由于共享锁互相兼容,事务B就获得该数据。如果随后连续有很多事务都在该数据上加共享锁,每一事务都只是运行一小段时间。这样,由于数据上总是存在共享锁,事务A就一直无法执行。
数据库系统必须要采取相关措施,避免这种情况的发生。一种可行的解决办法是,事务在申请对数据加锁时,数据库系统会进行条件检查。只有以下两个条件都满足之后,锁才会被授予:
(1)数据上不存在与所申请锁相冲突的锁。
(2)不存在给数据加锁而等待的事务。