Oracle学习笔记(一)——并发与锁

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事务传播机制

相关文章
相关标签/搜索