Oracle采用封锁技术保证并发操作的可串行性。
Oracle的锁分为两大类:数据锁(亦称DML锁)和字典锁。
字典锁是Oracle DBMS内部用于对字典表的封锁。字典锁包括语法分析锁和DDL锁,由DBMS在必要的时候自动加锁和释放锁,用户无权控制。
Oracle主要提供了五种数据锁:
共享锁(S锁)、排他锁(X锁)、行级共享锁(RS锁)、行级排他锁(RX锁)和共享行级排他锁(SRX锁)。
其封锁粒度包括行级和表级。数据锁的相容矩阵如图所示。
Oracle数据锁的相容矩阵
在通常情况下,数据封锁由数据库系统控制,对用户透明。但Oracle也允许用户用LOCK TABLE语句显式对封锁对象加锁。
Oracle数据锁的一个显著特点是,在缺省情况下,读数据不加锁。也就是说,当一个用户更新数据时,另一个用户可以同时读取相应数据,反之亦然。Oracle通过回滚段(Rollback Segment)的内存结构来保证用户不读“脏”数据和可重复读。这样做的好处是提高了数据的并发度。
Oracle提供了有效的死锁检测机制,周期性诊断系统中有无死锁,若存在死锁,则撤消执行更新操作次数最少的事务。