1 并发数据库
多用户数据库管理系统的一个主要任务是对 并发(concurrency)进行控制,即对多个用户同时访问同一数据进行控制。当缺少有效的并发控制时,修改数据的操做就不能保证正常,从而危害数据完整性。管理数据并发的方法是让每一个用户轮流操做数据。而数据库管理系统的目标就是减小每一个用户的等待时间,即让用户无需等待或使等待难以察觉。服务器
为保证数据库性能,Oracle 应用了不一样类型的锁和多版本数据完整性模型(multiversion consistency model)。这些特性都包含在事务(transaction)的概念里。应用程序开发人员应该在设计事务时充分发挥其中的并发、完整性等特性。并发
1.1 读一致性函数
Oracle 提供的读完整性包含如下特性:性能
事务是 Oracle 实现读完整性的关键。事务是一组 SQL 语句(这组语句或者被一块儿提交,或者都不被提交),事务的做用是:设计
*只读事务对象
默认状况下,Oracle 只保证语句级的读完整性。由一个查询返回的数据对同一时间点来讲是一致的。可是在有些状况下,用户可能须要事务级的读完整性。也就是要使一个事务中的多个查询对同一时间点来讲都是一致的,这样事务中的每一个查询都不会受到与之冲突的事务的干扰。若是用户须要对多个表作多个查询,建议使用只读事务。同理,方法(函数)级的事务控制策略至少应该支持只读事务。事务
2 各类锁机制开发
Oracle 也使用 锁(lock)来控制对数据的并发访问。当更新数据时,数据库服务器锁定被修改的数据直到此更新被提交。在这期间,任何用户都不能修改被锁定的数据。这保证了系统的数据完整性。io
Oracle 锁定数据的操做无需用户干预,可以自动执行。当一个 SQL 执行时,Oracle 根据实际状况的须要,隐式地对数据加锁。Oracle 的锁管理器自动地在行级对表数据加锁,所以对相同的数据竞争能够最小化。
2.1 共享锁(S锁)
若事务T对数据对象A加上S锁,则事务T能够读A但不能修改A,其余事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。
2.2 排他锁(X锁)
若事务T对数据对象A加上X锁,事务T能够读A也能够修改A,其余事务不能再对A加任何锁,直到T释放A上的锁。
2.3 有关共享锁和排他锁的解释
锁机制的基本操做是事务T在操做数据对象A时,其余事务不能继续对A操做,直到T完成。若容许其余事务对数据A可读属于共享锁,不可读属于排他锁。
扩展阅读:
1.事务隔离级别
2.Spring事务传播机制