1 并发

多用户数据库管理系统的一个主要任务是对 并发(concurrency)进行控制,即对多个用户同时访问同一数据进行控制。当缺乏有效的并发控制时,修改数据的操作就不能保证正常,从而危害数据完整性。管理数据并发的方法是让每个用户轮流操作数据。而数据库管理系统的目标就是减少每个用户的等待时间,即让用户无需等待或使等待难以察觉。

为保证数据库性能,Oracle 应用了不同类型的锁和多版本数据完整性模型(multiversion consistency model)。这些特性都包含在事务(transaction)的概念里。应用程序开发人员应该在设计事务时充分发挥其中的并发、完整性等特性。

1.1 读一致性

Oracle 提供的读完整性包含以下特性:

  • 保证在一个时间点上,用户通过查询语句得到的数据是一致的,且语句执行期间数据不会改变(语句级的读完整性)
  • 保证数据库中读数据的用户无需等待正在读或写相同数据的用户
  • 保证数据库中写数据的用户无需等待正在读相同数据的用户
  • 保证在并发事务中写数据的用户只需等待正在写相同数据行的用户

事务是 Oracle 实现读完整性的关键。事务是一组 SQL 语句(这组语句或者被一起提交,或者都不被提交),事务的作用是:

  • 决定了为查询用户生成的保持读完整性的视图的起始点
  • 控制着被一个事务修改过的数据何时可以被数据库中其它进行读写操作的事务看到

*只读事务

默认情况下,Oracle 只保证语句级的读完整性。由一个查询返回的数据对同一时间点来说是一致的。但是在有些情况下,用户可能需要事务级的读完整性。也就是要使一个事务中的多个查询对同一时间点来说都是一致的,这样事务中的每个查询都不会受到与之冲突的事务的干扰。如果用户需要对多个表做多个查询,建议使用只读事务。同理,方法(函数)级的事务控制策略至少应该支持只读事务。

2 各种锁机制

Oracle 也使用 锁(lock)来控制对数据的并发访问。当更新数据时,数据库服务器锁定被修改的数据直到此更新被提交。在这期间,任何用户都不能修改被锁定的数据。这保证了系统的数据完整性。

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

Oracle学习笔记(一)——并发与锁的更多相关文章

  1. 并发编程学习笔记(10)----并发工具类CyclicBarrier、Semaphore和Exchanger类的使用和原理

    在jdk中,为并发编程提供了CyclicBarrier(栅栏),CountDownLatch(闭锁),Semaphore(信号量),Exchanger(数据交换)等工具类,我们在前面的学习中已经学习并 ...

  2. javaSE学习笔记(17)---锁

    javaSE学习笔记(17)---锁 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相关源码(本文中的源码来自JDK 8).使用场景进行举例,为读 ...

  3. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  4. oracle学习笔记第一天

    oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字   1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...

  5. Oracle学习笔记——点滴汇总

    Oracle学习笔记——点滴汇总 http://www.botangdb.com/ Oracle GI = Grid Infrastructure = ASM + Cluster

  6. Oracle学习笔记之四sp1,Oracle 11g的常用函数

    从Oracle学习笔记之四,SQL语言入门中摘出来的,独立成一章节 3.1 字符类函数 ASCII(c)和CHR(i)    分别用于返回一个字符的ASCII码和返回给定ASCII值所对应的字符. C ...

  7. Oracle学习笔记之四,SQL语言入门

    1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...

  8. Oracle学习笔记—数据字典和常用命令(转载)

    转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...

  9. Oracle学习笔记七 锁

    锁的概念 锁是数据库用来控制共享资源并发访问的机制. 锁用于保护正在被修改的数据 直到提交或回滚了事务之后,其他用户才可以更新数据 对数据的并发控制,保证一致性.完整性.

随机推荐

  1. JSON—基础

    什么是JSON?(JavaScript Object Notation) 1:一种轻量级的数据交换格式 2:采用独立于语言的文本格式 3:常用于客户端和服务器之间传递数据(以对象的形式传递) JSON ...

  2. Shell篇(三)TC Shell

    Shell脚本的首行一般写为"#!+路径"来告诉系统,以路径所指定的程序来解释此脚本. 可以写为 #! /bin/tcsh -f (-f表示快速启动,不启动~/.tcshrc) S ...

  3. X-UA-Compatible

    X-UA-Compatible是神马? X-UA-Compatible是IE8的一个专有<meta>属性,它告诉IE8采用何种IE版本去渲染网页,在html的<head>标签中 ...

  4. 网页中自适应的显示PDF

    PDF格式呢,是一个高大的新式,如何在不同的浏览器中自适应显示,是一个值得研究的问题. 这里说明重点部分:获取浏览器宽高. IE中: document.body.clientWidth ==> ...

  5. MFC用串行化实现文档存储和读取功能

    在面向对象的程序设计中,一般都是用二进制文件来保存文档资料.在VC++中控制和使用文件流的方法很多,MFC程序设计中常用的有两种方法:用CFile对象存储和读取文件:利用串行化存取文件.其中用CFil ...

  6. Fenwick

    hdu1394 这题说的是给了一个序列计算这个序列的逆序对总共要进行n次 每次都将目前的第一个放到序列的最后一个位置然后 计算一次逆序对 这样我们只需要先求一次逆序对 然后接着每次都用F=F+(n-T ...

  7. ios 透过上层视图点击相应下方视图的点击事件

    - (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ UIView *hitView = [super hitTest:point ...

  8. Python 运算符与基本数据类型

    一.运算符 1.算数运算: 2.比较运算: 3.赋值运算: 4.逻辑运算: 5.成员运算: 二.基本数据类型 1.空(None) 表示该值是一个空对象,空值是Python里一个特殊的值,用None表示 ...

  9. vue v-for 和 v-if 、v-else一起使用造成的bug

    现象:导致v-else 执行v-for的length次数, 从现象看应该v-for先解析,然后将v-if和v-else包在其中 解决方案:很简单,tempalte 将v-if v-else 隔离到最外 ...

  10. live555 编译

    项目里面需要简单的rtsp服务器来实现视频预览等功能: rtsp本来不是太复杂的东西,github上有很多功能都比较完善的项目可以随便拿来用,但是测试过程中发现live555还是有性能上的一些差异: ...