当前位置:文档之家› 基于封锁的事务并发控制概述

基于封锁的事务并发控制概述

基于封锁的事务并发控制概述
基于封锁的事务并发控制概述

基于封锁的事务并发控制概述

摘要:叙述了关系型数据库管理系统中的事务管理和基于锁的事务并发控制方法。详细介绍了事务的串行化调度方法中的锁技术和锁协议,并深入讨论了锁的

管理、死锁处理、幻影问题和其它加锁过程中可能出现的一些问题。

关键词:数据库管理系统;事务;并发控制;封锁

中图分类号:TP311.131 文献标识码:A 文章编号:1007-9599 (2010) 04-0000-03

Lock-Based Transaction Concurrency Control Overview

Lu Chenglang,Xu Hupeng

(Wenzhou University,Oujiang College,Wenzhou 325035,China) Abstract:An overview on the management of lock-

based concurrency control of transactions is presented in this paper.The locking protocols and locki ng techniques of the transaction concurrency control are investigated in detail, and the approach t

o avoiding phantom problem as well as the way for handling dead-locking are discussed in depth.

Keywords:Database management systems;Transaction;Concurrency control;Lock

一、引言

事务是用户定义的一组数据库操作序列。事务的执行结果将使数据库从一个一致性状

态转变到另一个一致性状态。为了提高吞吐量,系统中常常是多个事务并发执行。这会产生

多个事务同时存取同一数据的情况,从而破坏数据库的一致性。所以数据库管理系统(Database Management System,DBMS)必须提供并发控制机制,使得并发的事务在冲突的

时候被串行化执行。这种调度称为可串行化调度。其中基于封锁的并发控制机制是一种被广

泛应用于商业DBMS中的并发控制机制。

二、事务的特性和并发的数据不一致性

事务具有ACID特性:原子性(Atomicity),一致性(Consistency),隔离性(Isolation)和持续性(Durability)。原子性指:事务包含的所有操作要么全部被执行,要么都不被执行;一致性指:事务的执行结果必须使数据库从一个一致性状态变到另一个一致性状态;隔离性指:在事务被提交以前,其操作结果对于其他事务不可见;持续性指:一旦事务成功提交,

其对数据库中数据的改变是永久的。事务是并发控制的基本单位,保证事务的ACID特性是事务处理的重要任务。然而,事务的并发执行可能会破坏事务的ACID特性,而导致数据的不一致性:

(一)Write-Write冲突,丢失更新。它是由于事务之间的写冲突造成的。两个事务

T1和T2同时读入同一数据并修改,T2的提交破坏了T1的提交结果,导致T1的修改丢失。

(二)Read-Write冲突,也称不一致读。不一致读是指事务T1读取数据后,事务T2

执行更新操作,使T1无法再现前一次读取结果。它包括三种情况:1.T1读取某一数据

后, T2对其做了修改,当T1再次读取该数据时,得到与前一次不同的值;2.T1按一定的条

件从数据库中读取了某些记录后,T2删除其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神秘的消失了;3.T1按一定的条件从数据库中读取了某些记录后,T2插入了一

些记录,当T1再次按相同条件读取数据时,发现多了一些记录。后两种情况也称幻影现象。

(三)Write-Read冲突,也称读脏数据。读脏数据指事务T1修改某数据,事务T2读

取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据恢复原值,T2读到的数据

就与数据中的数据不一致,则称T2读到的数据就为脏数据。

三、基于封锁的事务并发控制机制

实验15 事务与并发控制

实验十五事务与并发控制 【实验目的与要求】 1.掌握数据库事务的概念 2.熟悉数据库的四个特性 3.熟练掌握数据库事务的实现方法 【实验内容与步骤】 15.1.SQL Server数据库事务基础知识 1.事务的概念( Transaction ) 所谓事务是用户定义的一个数据库操作序列,这些操作要么都做,要么都不做,是一个不可分割的工作单位。 关系数据库中,事务可以是一条SQL语句、一组SQL语句。 在SQL语言中,定义事务的语句有三条: Begin Transaction 开始 Commit 结束 Rollback 回滚 2.事务开始:BEGIN TRANSACTION 标记一个显式本地事务的起始点。BEGIN TRANSACTION将@@TRANCOUNT 加1。 语法结构: BEGIN TRAN [ SACTION ] [ transaction_name | @tran_name_variable [ WITH MARK [ 'description' ] ] ] 参数说明: transaction_name:是给事务分配的名称。transaction_name 必须遵循标识符规则,但是不允许标识符多于32 个字符。仅在嵌套的https://www.doczj.com/doc/d86860122.html,MIT 或BEGIN...ROLLBACK 语句的最外语句对上使用事务名。 @tran_name_variable:是用户定义的、含有有效事务名称的变量的名称。必须用char、varchar、nchar 或nvarchar 数据类型声明该变量。 WITH MARK ['description']:指定在日志中标记事务。Description 是描述该标记的字符串。 如果使用了WITH MARK,则必须指定事务名。WITH MARK 允许将事务日志还原到命名标记。 4.事务提交:COMMIT TRANSACTION 标志一个成功的隐性事务或用户定义事务的结束。如果@@TRANCOUNT 为1,COMMIT TRANSACTION 使得自从事务开始以来所执行的所有数据修改成为数据库的永

并发控制课后答案-简述并发控制

第八章并发控制 习题解答和解析 1. 1.在数据库中为什么要并发控制? 答:数据库是共享资源,通常有许多个事务同时在运行。当多个事务并发地存取数据库时就会产生同时读取和/或修改同一数据的情况。若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性。所以数据库管理系统必须提供并发控制机制。 2. 2.并发操作可能会产生哪几类数据不一致?用什么方法能避免各种不一致的情况? 答:并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读"脏"数据。 (1)丢失修改(Lost Update)两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了(覆盖了)T1提交的结果,导致T1的修改被丢失。 (2)不可重复读(Non -Repeatable Read)不可重复读是指事务T1读取数据后,事务T2 执行更新操作,使T1无法再现前一次读取结果。不可重复读包括三种情况:详见《概论》8.1(P266)。 (3)读"脏"数据(Dirty Read)读"脏"数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为"脏"数据,即不正确的数据。 避免不一致性的方法和技术就是并发控制。最常用的技术是封锁技术。也可以用其他技术,例如在分布式数据库系统中可以采用时间戳方法来进行并发控制。 3. 3.什么是封锁? 答:封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。封锁是实现并发控制的一个非常重要的技术。 4. 4.基本的封锁类型有几种?试述它们的含义。 答:基本的封锁类型有两种:排它锁(Exclusive Locks, 简称 X 锁 )和共享锁(Share Locks,简称 S 锁)。 排它锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。 共享锁又称为读锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。 5.如何用封锁机制保证数据的一致性 ? 答:DBMS在对数据进行读、写操作之前首先对该数据执行封锁操作,例如下图中事务T1在对A进行修改之前先对A执行XLock(A),即对A加X锁。这样,当T2请求对A加X锁时就被拒绝,T2只能等待T1释放A上的锁后才能获得对A的X锁,这时它读到的A是T1更新后 的值,再按此新的A值进行运算。这样就不会丢失 T1的更新。

数据库实验报告:事务与并发控制

1.实验七:事务与并发控制 1.1.实验目的 1.掌握事务机制,学会创建事务。 2.理解事务并发操作所可能导致的数据不一致性问题,用实验展现四种数据不一致性 问题:丢失修改、读脏数据、不可重复读以及幻读现象。 3.理解锁机制,学会采用锁与事务隔离级别解决数据不一致的问题。 4.了解数据库的事务日志。 1.2.实验内容 假设学校允许学生将银行卡和校园卡进行绑定,在student数据库中有如下的基本表,其中校园卡编号cardid即为学生的学号: icbc_card(studcardid,icbcid,balance) //校园卡ID,工行卡ID,银行卡余额campus_card(studcardid,balance) //校园卡ID,校园卡余额 数据创建的代码: use student createtable campus_card ( studcardid Char(8), balance Decimal(10,2)) createtable icbc_card ( studcardid Char(8), icbcid Char(10), balance Decimal(10,2) )

insertinto campus_card values('20150031', 30) insertinto campus_card values('20150032', 50) insertinto campus_card values('20150033', 70) insertinto icbc_card values('20150031','2015003101', 1000) insertinto icbc_card values('20150032','2015003201', 1000) insertinto icbc_card values('20150033','2015003301', 1000) 针对以上数据库按照要求完成下列实验: 1.编写一个事务处理(begin tran)实现如下的操作:某学号为20150032的学生要从银 行卡中转账200元到校园卡中,若中间出现故障则进行rollback。(15分)settransactionisolationlevel repeatableread

事务调度与并发控制

四级数据库第八章-事务调度与并发控制8.1 并发控制概述 在第七章中己经讲到,事务是并发控制的基本单位,保证事务ACID特性是事务处理的重要任务,而事务ACID特性可能遭到破坏的原因之一是多个事务对数据库的并发操作造成的。为了保证事务的隔离性更一般,为了保证数据库的一致性,DBMS需要对并发操作进行正确调度。这些就是数据库管理系统中并发控制机制的责任。 下面先来看一个例子,说明并发操作带来的数据的不一致性问题。 考虑飞机订票系统中的一个活动序列: ①甲售票点(甲事务)读出某航班的机票余额A,设A=16; ②乙售票点(乙事务)读出同一航班的机票余额A,也为16; ③甲售票点卖出一张机票,修改余额A A-l,所以A为15,把A写回数据库; ④乙售票点也卖出一张机票,修改余额A A-l,所以A为15,把A写回数据库。结果明明卖出两张机票,数据库中机票余额只减少1。 这种情况称为数据库的不一致性。这种不一致性是由并发操作引起的。在并发操作情况下,对甲、乙两个事务的操作序列的调度是随机的。若按上面的调度序列执行,甲事务的修改就被丢失。这是由于第④步中乙事务修改A并写回后覆盖了甲事务的修改。 仔细分析并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读“脏”数据,如图8.1所示。 1.丢失修改(Lost Update) 两个事务T1和T2。读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失,如图8.1(a)所示。上面飞机订票例子就属此类。

图8.1 2.不可重复读(Non-Repeatable Read) 不可重复读是指事务T1读取数据后,重复T2执行更新操作,使T1无法再现前一次读 取结果。具体地讲,不可重复读包括三种情况: (1)事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时,得到与前一次不同的值。例如在图8.1(b)中,T1读取B=100进行运算,T2读取同一数据B对其进行修改后将B=200写回数据库。T1为了对读取值校对重读B,B己为200,与第1次读取值不一致。 (2)事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神秘地消失了。 (3)事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。 后两种不可重复读有时也称为幻影(Phantom Row)现象。

事务并发控制中的两段锁和可串行化冲突图的对比

文章编号:1000-2375(2005)01-0019-05 事务并发控制中的两段锁和 可串行化冲突图的对比 金 蓉,李跃新 (湖北大学数学与计算机科学学院,湖北武汉430062) 摘 要:数据库中并发操作一般分为数据级和事务级两种,由于资源的竞争可能引起数据级的冲突和事 务级的冲突,因此需要对并发执行的事务转化为某个可串行化调度,从而确保数据库的一致性.目前并发控制的方法有很多,从锁和非锁机制两个方面分析了两段锁和可串行化冲突图两种并发控制的规则和数据结构及分类,并从事务的冲突可串行化方面和结构上分析了各自的性能和优缺点. 关键词:锁;两段锁协议;可串行化冲突图 中图分类号:TP311 文献标志码:A 收稿日期:2004-03-25 作者简介:金 蓉(1979-  ),女,硕士生1 引 言 数据库中的并发操作一般分为数据级和事务级两种,一方面在微观数据级上有数据对象的读(Read )操作和写(Write )操作,另一方面在宏观事务级上有事务的操作原语:终止(Abort ),开始(Begin ),提交(C ommit ),结束(End ),实质上事务中包含着对一系列数据对象的操作,因为一个事务系统主要由3个部分构成:数据项集、对数据项集的操作和控制事务存取数据的管理器(我们称为事务管理器T M ).并发控制的作用是正确协调同一时间里多个事务对数据库的并发操作,解决资源竞争问题以保证数据库的一致性和完整性. 并发控制是通过调度来确保事务的并发执行的效果等同于没有并发执行时的执行效果,也就是使事务的并发执行调度等价于事务的某个可串行化调度,从而确保数据库的一致性.可串行化简单的说就是一个并发操作等效于某个串行执行的效果,也即有相同的输出结果,与串行操作对数据库有同样的效果. 冲突有数据级的冲突和事务级的冲突,数据间的冲突体现在数据库中同时对相同的数据对象操作,事务间的冲突是由事务的数据相关性及在共享数据对象上的交互作用而引起的,通常用事务的“冲突关系”来表示. 定义1 数据对象d 上的两个操作p 、q 是“冲突”的,记为CT (d ,p ,q ),当且仅当S (S (s ,p ),q )≠S (S (s ,q ),p )∨R (s ,p )≠R (S (s ,q ),p )∨R (s ,q )≠R (S (s ,p ),q ).其中,S (s ,p )和R (s ,p )分别表示操作p 对d 的给定状态s 所产生的结果状态和结果输出(返回). 由定义可知,两个或多个数据操作产生冲突的条件是1)它们属于不同的事务;2)都访问数据库中相同的数据对象;3)并且至少有一个是写操作否则就不会产生冲突. 定义2 两个事务t 1、t 2是“冲突”的,记为t 1CR t 2,是指它们包含了(至少)一对冲突操作.即对于任何t 1≠t 2,t 1CR t 2,当且仅当?d 、?p ,q (p (d )∈t 1∧q (d )∈t 2∧CT (d ,p ,q ). 事务间的冲突归根结底集中在数据操作的冲突上,因此解决冲突最初的方法是对数据对象采用锁机制,而锁可以分为读锁和写锁,当数据对象加了读锁后可以再加读锁但不能加写锁,因此读锁是共享的,当数据对象加了写锁后就不能加其他任何锁,因此写锁是排它的,显然读锁较写锁的并发度高. 第27卷第1期2005年3月湖北大学学报(自然科学版)Journal of Hubei University (Natural Science ) V ol.27 N o.1 Mar.,2005

基于封锁的事务并发控制概述

基于封锁的事务并发控制概述 发表时间:2010-05-14T10:46:24.013Z 来源:《计算机光盘软件与应用》2010年第4期供稿作者:卢成浪,徐湖鹏 [导读] 叙述了关系型数据库管理系统中的事务管理和基于锁的事务并发控制方法。 卢成浪,徐湖鹏 (温州大学瓯江学院,温州 325035) 摘要:叙述了关系型数据库管理系统中的事务管理和基于锁的事务并发控制方法。详细介绍了事务的串行化调度方法中的锁技术和锁 协议,并深入讨论了锁的管理、死锁处理、幻影问题和其它加锁过程中可能出现的一些问题。 关键词:数据库管理系统;事务;并发控制;封锁 中图分类号:TP311.131 文献标识码:A 文章编号:1007-9599 (2010) 04-0000-03 Lock-Based Transaction Concurrency Control Overview Lu Chenglang,Xu Hupeng (Wenzhou University,Oujiang College,Wenzhou 325035,China) Abstract:An overview on the management of lock- based concurrency control of transactions is presented in this paper.The locking protocols and locking techniques of the locking are discussed in depth. Keywords:Database management systems;Transaction;Concurrency control;Lock 一、引言 事务是用户定义的一组数据库操作序列。事务的执行结果将使数据库从一个一致性状态转变到另一个一致性状态。为了提高吞吐量, 系统中常常是多个事务并发执行。这会产生多个事务同时存取同一数据的情况,从而破坏数据库的一致性。所以数据库管理系统 (Database Management System,DBMS)必须提供并发控制机制,使得并发的事务在冲突的时候被串行化执行。这种调度称为可串行化 调度。其中基于封锁的并发控制机制是一种被广泛应用于商业DBMS中的并发控制机制。 二、事务的特性和并发的数据不一致性 事务具有ACID特性:原子性(Atomicity),一致性(Consistency),隔离性(Isolation)和持续性(Durability)。原子性指:事 务包含的所有操作要么全部被执行,要么都不被执行;一致性指:事务的执行结果必须使数据库从一个一致性状态变到另一个一致性状 态;隔离性指:在事务被提交以前,其操作结果对于其他事务不可见;持续性指:一旦事务成功提交,其对数据库中数据的改变是永久 的。事务是并发控制的基本单位,保证事务的ACID特性是事务处理的重要任务。然而,事务的并发执行可能会破坏事务的ACID特性,而导 致数据的不一致性: (一)Write-Write冲突,丢失更新。它是由于事务之间的写冲突造成的。两个事务T1和T2同时读入同一数据并修改,T2的提交破坏 了T1的提交结果,导致T1的修改丢失。 (二)Read-Write冲突,也称不一致读。不一致读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。它 包括三种情况:1.T1读取某一数据后, T2对其做了修改,当T1再次读取该数据时,得到与前一次不同的值;2.T1按一定的条件从数据库 中读取了某些记录后,T2删除其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神秘的消失了;3.T1按一定的条件从数据库 中读取了某些记录后,T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。后两种情况也称幻影现象。 (三)Write-Read冲突,也称读脏数据。读脏数据指事务T1修改某数据,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已 修改过的数据恢复原值,T2读到的数据就与数据中的数据不一致,则称T2读到的数据就为脏数据。 三、基于封锁的事务并发控制机制 (一)锁的类型 封锁是实现并发控制的一个非常重要的技术。所谓封锁就是事务T在对某个数据对象例如表,记录等操作之前,先向系统发出请求,对 其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它之前,其他事务不能更新该数据对象。下面介绍DBMS涉及的锁: 1.互斥锁(Exclusive Lock):用于写操作,又称写锁或者排他锁,记做X锁。若事务T对数据对象A加上X锁,则只允许T读写A,其他 事务都不能对A加任何锁,直到T释放A上的锁。 2.共享锁(Shared Lock):用于读操作,又称读锁,记做S锁。若事务T对数据对象A加上S锁,则T可读A但不能写A,其他事务只能对 A加S锁,而不能加X锁,直到T释放锁。 3.更新锁(Update Lock):用于更新操作。等价于先加共享锁,在真正执行更新操作时,将共享锁升级为互斥锁。大部分DMBS 都 不使用这种锁。 4.增量锁(Increment Lock):用于增量操作,如果一个对象被上了增量锁,除增量操作以外任何读写操作都是被禁止的。即增量锁 之间不排斥。因同时对某一对象的数值进行加一或者减一操作时,其结果与操作先后顺序是无关的,可以交换。这种锁使用并不广泛。 5.意向锁(Intention Lock):它是因为引入多粒度对象而产生的,又可 细分为:意向共享锁,意向排他锁和共享意向排他锁。 在DBMS 中被广泛使用的是共享锁,互斥锁和意向锁。为了保证写操作的互 斥性,不同事务对同一数据对象加锁时需要进行冲突检测。检测可以借助锁的相 容矩阵来判断,如图1(a)所示。从中可以发现5种锁的强度偏序关系,如图1 (b)所示。 (二)加锁管理和锁转换 DBMS中处理事务加锁事宜的部分被称为锁管理器。锁管理器维护着一个锁 表,这是一个以数据对象标志为码的哈希表。DBMS也在事务表中维护着每个事务的描述信息项,该记录中包含一个指向事务拥有的锁列表 的指针。在请求锁之前要检查这个列表,以确定不会对同一个锁请求两次。 加锁表中的每一项针对某个数据对象(可以是一页,一条记录等等),它包括下面的信息:拥有数据对象锁的事务数目,锁的属性 (共享锁、互斥锁等)和一个指向加锁请求队列的指针。

Informix的事务、并发控制、锁机制、隔离级别

Informix的事务、并发控制、锁机制、隔离级别 1、事务 事务是指作为单个逻辑工作单元执行的一系列操作。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。数据库服务器保证在事务范围内执行的操作完整且正确地提交至磁盘,否则数据库会复原至事务启动之前的状态。 一个逻辑工作单元要成为事务,必须满足所谓的ACID属性。ACID的具体含义如下: 1)A(Atomicity):操作序列要么完整的执行,否则什么都不做; 2)C(Consistency):一致性,事务执行后,保证数据库从一个一致性状态到另外一个一致性状态; 3)I(Isolation):隔离,一个事务的中间状态对其他事务不可见,即每个用户都感觉他们在单独使用数据库。隔离级别用来定义多大程度的隔离多个不同的事务; 4)D(Durability):持久性,事务的有效性,不会应用硬件或软件的失败而丢失。 2、并发控制 1)相关概念 i)隔离(+一致性) => 并发控制; ii)多个事务可以访问或修改相同的资源; iii)只要多个进程共享资源,就需要对访问进程进行排队控制; iv)在进行并发控制时,数据库内部将生成多个并发事务访问资源的操作序列表,并且每一个事务内部的各个操作都需要序列化。 2)串行调度存在的问题 在串行调度中,采用操作序列,一个事务完成了再完成另外一个,即使两个事务T1、T2更新的是数据库中不同的对象。此种方式从并发和性能角度考虑,都不能很好的利用计算机资源。 为了改善性能,需要采用非串行调度,即允许事务并发执行,即一个事务内的操作可以在其他事务提交前开始执行。 3)并发调度的常见问题 i)脏读:事务T2读取到了事务T1没有提交的结果 例如如下的操作序列会导致脏读: 事务T1读取记录,然后更新记录; 事务T2读取了更新后的记录;

数据库并发控制

数据库是一个共享资源,可以提供多个用户使用。这些用户程序可以一个一个地串行执行,每个时刻只有一个用户程序运行,执行对数据库的存取,其他用户程序必须等到这个用户程序结束以后方能对数据库存取。但是如果一个用户程序涉及大量数据的输入/输出交换,则数据库系统的大部分时间处于闲置状态。因此,为了充分利用数据库资源,发挥数据库共享资源的特点,应该允许多个用户并行地存取数据库。但这样就会产生多个用户程序并发存取同一数据的情况,若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性,所以数据库管理系统必须提供并发控制机制。并发控制机制的好坏是衡量一个数据库管理系统性能的重要标志之一。 DM用封锁机制来解决并发问题。它可以保证任何时候都可以有多个正在运行的用户程序,但是所有用户程序都在彼此完全隔离的环境中运行。 一、并发控制的预备知识 (一) 并发控制概述 并发控制是以事务(transaction)为单位进行的。 1. 并发控制的单位――事务 事务是数据库的逻辑工作单位,它是用户定义的一组操作序列。一个事务可以是一组SQL 语句、一条SQL语句或整个程序。 事务的开始和结束都可以由用户显示的控制,如果用户没有显式地定义事务,则由数据库系统按缺省规定自动划分事务。 事务应该具有4种属性:原子性、一致性、隔离性和持久性。 (1)原子性 事务的原子性保证事务包含的一组更新操作是原子不可分的,也就是说这些操作是一个整体,对数据库而言全做或者全不做,不能部分的完成。这一性质即使在系统崩溃之后仍能得到保证,在系统崩溃之后将进行数据库恢复,用来恢复和撤销系统崩溃处于活动状态的事务对数据库的影响,从而保证事务的原子性。系统对磁盘上的任何实际数据的修改之前都会将修改操作信息本身的信息记录到磁盘上。当发生崩溃时,系统能根据这些操作记录当时该事

事务管理与并发控制学习笔记数据库的三种日志详解

6、事务管理与并发控制学习笔记——数据库的三种日志详解 6.1、概念:acid性质、共享锁、排它锁 6.1.1 事务的ACID特性 A:表示事务的原子性(Atomicity),即事务完全执行或完全不执行 –事务中包含的所有操作要么全做,要么全不做原子性由恢复机制实现 C:表示一致性(Consistency),所有数据库都有一致性约束,或关于数据之间联系的预期状态 –事务的隔离执行必须保证数据库的一致性。事务开始前,数据库处于一致性的状态;事务结束后,数据库必须仍处于一致性状态。 –数据库的一致性状态由用户来负责,由并发控制机制实现。如银行转帐,转帐前后两个帐户金额之和应保持不变 I:表示隔离(Isolation),即表面看起来,每个事务都是在没有其它事务同时执行的情况下执行的 –系统必须保证事务不受其它并发执行事务的影响。对任何一对事务T1,T2,在T1看来,T2要么在T1开始之前已经结束,要么在T1完成之后再开始执行 –隔离性通过并发控制机制实现 D:表示持久性(Durability),即一旦事务完成了,事务对数据库的影响就不会丢失 –一个事务一旦提交之后,它对数据库的影响必须是永久的 –系统发生故障不能改变事务的持久性。持久性通过恢复机制实现这里大家要知道,事务是我们对数据库操作的执行单位。我们要注意事务的整体性,即原子性,事务是绝对不能做一半的,否则很难保证数据库的一致性。而对于数据库来说,必须要保证一致性,因为一个数据库如果没有一致性,那么这个数据库是失败的!隔离性是数据库并发处理性能的体现,当然如果数据库没有很好的并发性那么你还是改用Excel吧,呵呵,开个玩笑而已。 6.2、三种日志例题 系统是很可能崩溃的,但是崩溃后我们不能坐以待毙,我们要保证事务的原子性,进而保证数据库的一致性和持久性。那么我们就应该考虑怎样建立一个合理的运行机制,让系统崩溃后能够通过一系列办法将那些不能确定是否真正写盘的事务回滚或者重做,哪怕数据库回到之前好久的状态。还好,高手们很有正事,他们研究出来一些针对故障的恢复机制!也就是我们下面要说到的日志系统!6.2.1 日志与故障恢复 数据库系统(例如Oracle)一般都有一个日志系统,它由日志管理服务和日志文件组成,这个如果大家有兴趣复习一下Oracle的体系架构,这里就不多说了。这个日志文件中存储的是一些文本行,当我们对一个数据库中的数据进行操作时,数据库系统首先按照一定的规则将你的操作命令和一些附加参数记录到这些日志文件中,(注意记录的只是命令语句、参数和一些标记等等)。然后再对数据库中的数据进行操作,最后完成所有操作后,再写一些标志到日志文件中。 根据对日志文件的管理规则的不同(对应的恢复机制也不同。),我们现在常用的是Undo、Redo还有Undo/Redo三种日志模式。 注意:在故障恢复里我们只对数据库的写操作感兴趣,因为读操作根本不会

基于封锁的事务并发控制概述

基于封锁的事务并发控制概述 摘要:叙述了关系型数据库管理系统中的事务管理和基于锁的事务并发控制方法。详细介绍了事务的串行化调度方法中的锁技术和锁协议,并深入讨论了锁的 管理、死锁处理、幻影问题和其它加锁过程中可能出现的一些问题。 关键词:数据库管理系统;事务;并发控制;封锁 中图分类号:TP311.131 文献标识码:A 文章编号:1007-9599 (2010) 04-0000-03 Lock-Based Transaction Concurrency Control Overview Lu Chenglang,Xu Hupeng (Wenzhou University,Oujiang College,Wenzhou 325035,China) Abstract:An overview on the management of lock- based concurrency control of transactions is presented in this paper.The locking protocols and locki ng techniques of the transaction concurrency control are investigated in detail, and the approach t o avoiding phantom problem as well as the way for handling dead-locking are discussed in depth. Keywords:Database management systems;Transaction;Concurrency control;Lock 一、引言 事务是用户定义的一组数据库操作序列。事务的执行结果将使数据库从一个一致性状 态转变到另一个一致性状态。为了提高吞吐量,系统中常常是多个事务并发执行。这会产生 多个事务同时存取同一数据的情况,从而破坏数据库的一致性。所以数据库管理系统(Database Management System,DBMS)必须提供并发控制机制,使得并发的事务在冲突的 时候被串行化执行。这种调度称为可串行化调度。其中基于封锁的并发控制机制是一种被广 泛应用于商业DBMS中的并发控制机制。 二、事务的特性和并发的数据不一致性 事务具有ACID特性:原子性(Atomicity),一致性(Consistency),隔离性(Isolation)和持续性(Durability)。原子性指:事务包含的所有操作要么全部被执行,要么都不被执行;一致性指:事务的执行结果必须使数据库从一个一致性状态变到另一个一致性状态;隔离性指:在事务被提交以前,其操作结果对于其他事务不可见;持续性指:一旦事务成功提交, 其对数据库中数据的改变是永久的。事务是并发控制的基本单位,保证事务的ACID特性是事务处理的重要任务。然而,事务的并发执行可能会破坏事务的ACID特性,而导致数据的不一致性: (一)Write-Write冲突,丢失更新。它是由于事务之间的写冲突造成的。两个事务 T1和T2同时读入同一数据并修改,T2的提交破坏了T1的提交结果,导致T1的修改丢失。 (二)Read-Write冲突,也称不一致读。不一致读是指事务T1读取数据后,事务T2 执行更新操作,使T1无法再现前一次读取结果。它包括三种情况:1.T1读取某一数据 后, T2对其做了修改,当T1再次读取该数据时,得到与前一次不同的值;2.T1按一定的条 件从数据库中读取了某些记录后,T2删除其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神秘的消失了;3.T1按一定的条件从数据库中读取了某些记录后,T2插入了一 些记录,当T1再次按相同条件读取数据时,发现多了一些记录。后两种情况也称幻影现象。 (三)Write-Read冲突,也称读脏数据。读脏数据指事务T1修改某数据,事务T2读 取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据恢复原值,T2读到的数据 就与数据中的数据不一致,则称T2读到的数据就为脏数据。 三、基于封锁的事务并发控制机制

第14章事务与MySQL的多用户并发控制

数据库系统原理及MySQL应用教程(第2版) 课后习题参考答案 第14章事务与MySQL的多用户并发控制 1、事务是DB的逻辑工作单位,由用户定义的一组操作序列组成,序列中的操作要么全做要么全不做。 2、InnoDB和BDB存储引擎支持事务。 3、每个事务的处理必须满足ACID原则,即原子性(A):原子性意味着每个事务都必须被认为是一个不可分割的单元。一致性(C):不管事务是完全成功完成还是中途失败,当事务使系统处于一致的状态时存在一致性。隔离性(I):隔离性是指每个事务在它自己的空间发生,和其他发生在系统中的事务隔离,而且事务的结果只有在它完全被执行时才能看到。持久性(D):持久性是指即使系统崩溃,一个提交的事务仍然存在。 4、MySQL中可以使用begin开始事务,使用commint结束事务。 5、每一个事务都有一个所谓的隔离级,它定义了用户彼此之间隔离和交互的程度。 MySQL提供了下面4种隔离级:序列化(serializable)、可重复读(repeatable read)、提交读(read committed)、未提交读(read uncommitted) 。 6、若对并发操作不加控制可能会存取和存储不正确的数据,就会出现数据的不一致问题。 (1)丢失更新(lost update) 问题 (2)脏读(dirty read)问题 (3)不可重复读( unrepeatableread) 问题 (4)幻读(phantom read) 问题 7、MySQL中可以使用begin开始事务,使用commint结束事务,中间可以使用rollback回滚事务。MySQL通过set autocommint 、start transaction 、

Oracle事务处理与并发控制

事物处理与并发控制 授课教师:李斌 目标: ●Oracle中的事务处理是什么 ●怎样控制Oracle中的事务处理 ●Oracle怎样在数据库中实现并发控制,让多个用户同时访问和修改相同的数据表 1 什么是事务 事务就是在数据库上完成的一个操作。要么全部执行并且存储需要的操作,要么全部撤销已经进行的操作,使得数据库恢复到没有改变之前的状态。 2 事务处理控制语句 Oracle中的一个重要的概念就是没有“开始事务处理”的语句。用户不能显式开始一个事务,事务结束时需要向数据库提交(Commit),或者回滚(Rollback)操作。 ●COMMIT ●ROLLBACK ●SA VEPOINT ●ROLLBACK TO SA VEPOINT ●SET TRANSACTION ●SET CONSTRAINTS 2.1 COMMIT处理 当提交时,我们需要处理三个任务: 1、为我们的事务处理生成SCN(系统改变号)。 2、将所有剩余的已经缓冲的重做日志表项写入磁盘,并且将SCN记录到在线重做日志文 件中。由LGWR执行处理。 3、释放我们的会话所锁定的资源。 LGWR会在下列情况之一发生时执行清理工作: ●每隔3秒 ●当SGA中的Redo Log Buffer Cache容量超过1/3的空间,或者包含了1MB或者更 多的已经缓冲数据

●进行任何事务处理提交 2.2 ROLLBACK处理 回滚是一项比较耗费资源的操作。当我们不需要存储所作出的修改时,就回滚我们的操作。回滚可以归结为异常处理范畴。 2.3 SA VEPOINT 和ROLLBACK TO SAVEPOINT SA VEPOINT可以在应用中建立保存点。它可以让用户将单独的大规模事务处理分割成一系列较小的部分。 2.4 SET TRANSACTION SET TRANSACTION必须是你的事务处理的第一条语句,用来设置事务之间的隔离级别。 ●规定事务处理的隔离级别 ●规定为用户事务处理所使用的特定回滚段 ●命名用户事务处理 SET TRANSACTION READ ONLY SET TRANSACTION READ WRITE SET TRANSACTION ISOLA TION LEVEL SERIALIZABLE SET TRANSACTION ISOLA TION LEVEL READ COMMITED 1、READ ONLY 命令SET TRANSACTION READ ONLY将会做两件事情。 首先而且最明显的是:它会确保你无法执行修改数据的DML操作。如果你要执行这样的操作,就会报错。 另外,READ ONLY可以使得我们把数据库视图冻结在某个时间点。 例如:我们需要获得上午10:00使,数据库中某个数据表中的数据,而这张表又与其它很多数据表之间存在复杂的关联关系。数据库的其它用户有可能继续对其它的一些表随时都在进行DML操作。我们如何获得10:00时我们需要的数据? 一种方法是:停止其它用户的所有活动,锁定相关的数据表。 好的方法是:用户可以使用SET TRANSACTION READ ONLY语句,冻结10:00的用户数据库视图。这样你会看到你需要的数据,而且不会影响其它用户的操作。

数据库系统原理与开发-并发控制-事务调度

5.3 并发控制——事务调度

【本节学习目标】 ?了解数据库并发事务控制目的 ?了解并发事务调度控制需要解决的问题?理解并发事务调度原理与策略

一、为什么需要并发控制 并发控制目的 ?支持并发事务处理,使更多用户并行操作,提高系统的并发访问能力。?保证一个事务工作不会对另一个事务工作产生不合理的影响。 当多个事务程序在DBMS系统中同时运行时,可能会出现对一些共享数据同时进行访问操作,如一些事务修改数据,另一些事务读取数据。这些并发的共享数据操作,如果在DBMS中没有一定的约束控制情况下,可能会带来数据不一致性或事务程序死锁问题。因此,在多个事务并发运行时,必须进行并发控制处理。

3 二、并发控制需解决的问题A=16读 读 A=A-1 A=A-1 A=15 A=16A=16 出售1出售1 事务T1事务T2 执行结果分析:剩余机票数A值为15,该数据有错,应为14。1.丢失更新数据 A=15售票点2 机票数量A 售票点1

错误分析: ?T1、T2两个事务并发执行,它们均对数据库共享数据A进行了非锁定资源的读写操作。 ?当事务T1和T2均读入该共享数据A并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。 4

5 2.不可重复读取 问题分析: 为什么出现不可重复读取? 事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时,得到与前一次不同的值。不可重复读取是指一个事务对一个共享数据重复多次读取,但前后读取的数据不一致。 假如A的初始数据为100 事务T1首次读取A的值为100 事务T1不知道其它事务修改A值 事务T1第2次读取A的值为200 因此,事务T1前后读取数据A的值不一致。

数据库实验报告记录:事务与并发控制

数据库实验报告记录:事务与并发控制

————————————————————————————————作者:————————————————————————————————日期:

《数据库原理》实验报告 题目:实验七 事务与并发控制 学号姓名班级日期2013302478 纪昌宇10011301 2015.11.14 1.实验七:事务与并发控制 1.1.实验目的 1.掌握事务机制,学会创建事务。 2.理解事务并发操作所可能导致的数据不一致性问题,用实验展现四种数据不一致性 问题:丢失修改、读脏数据、不可重复读以及幻读现象。 3.理解锁机制,学会采用锁与事务隔离级别解决数据不一致的问题。 4.了解数据库的事务日志。 1.2.实验内容 假设学校允许学生将银行卡和校园卡进行绑定,在student数据库中有如下的基本表,其中校园卡编号cardid即为学生的学号: icbc_card(studcardid,icbcid,balance) //校园卡ID,工行卡ID,银行卡余额 campus_card(studcardid,balance) //校园卡ID,校园卡余额 数据创建的代码: use student create table campus_card (studcardid Char(8) , balance Decimal(10,2)) create table icbc_card ( studcardid Char(8), icbcid Char(10), balance Decimal(10,2) )

insert into campus_card values('20150031', 30) insert into campus_card values('20150032', 50) insert into campus_card values('20150033', 70) insert into icbc_card values('20150031','2015003101', 1000) insert into icbc_card values('20150032','2015003201', 1000) insert into icbc_card values('20150033','2015003301', 1000) 针对以上数据库按照要求完成下列实验: 1.编写一个事务处理(begin tran)实现如下的操作:某学号为20150032的学生要从银 行卡中转账200元到校园卡中,若中间出现故障则进行rollback。(15分) set transaction isolation level repeatable read

相关主题
文本预览
相关文档 最新文档