什么是数据库并发控制?数据库并发控制的主要方法是?

 

数据库是一个共享资源,可以提供多个用户使用。这些用户程序可以一个一个地串行执行,

每个时刻只有一个用户程序运行,

执行对数据库的存取,

其他用户程序必须等到这个用户程

序结束以后方能对数据库存取。但是如果一个用户程序涉及大量数据的输入

/

输出交换,则

数据库系统的大部分时间处于闲置状态。

因此,

为了充分利用数据库资源,

发挥数据库共享

资源的特点,

应该允许多个用户并行地存取数据库。

但这样就会产生多个用户程序并发存取

同一数据的情况,

若对并发操作不加控制就可能会存取和存储不正确的数据,

破坏数据库的

一致性,

所以数据库管理系统必须提供并发控制机制。

并发控制机制的好坏是衡量一个数据

库管理系统性能的重要标志之一。

 

 

DM

用封锁机制来解决并发问题。它可以保证任何时候都可以有多个正在运行的用户程序,

但是所有用户程序都在彼此完全隔离的环境中运行。

 

 

一、

  

并发控制的预备知识

 

 

(

)  

并发控制概述

 

 

并发控制是以事务(

transaction

)为单位进行的。

 

 

1.  

并发控制的单位

――

事务

 

 

事务是数据库的逻辑工作单位,它是用户定义的一组操作序列。一个事务可以是一组

SQL

语句、一条

SQL

语句或整个程序。

 

 

事务的开始和结束都可以由用户显示的控制,

如果用户没有显式地定义事务,

则由数据库系

统按缺省规定自动划分事务。

 

 

事务应该具有

4

种属性:原子性、一致性、隔离性和持久性。

 

 

1

)原子性

 

 

事务的原子性保证事务包含的一组更新操作是原子不可分的,也就是说这些操作是一个整

体,

对数据库而言全做或者全不做,

不能部分的完成。

这一性质即使在系统崩溃之后仍能得

到保证,

在系统崩溃之后将进行数据库恢复,

用来恢复和撤销系统崩溃处于活动状态的事务

对数据库的影响,

从而保证事务的原子性。

系统对磁盘上的任何实际数据的修改之前都会将

修改操作信息本身的信息记录到磁盘上。

当发生崩溃时,

系统能根据这些操作记录当时该事

 

务处于何种状态,

以此确定是撤销该事务所做出的所有修改操作,

还是将修改的操作重新执

行。

 

 

2

)一致性

 

 

一致性要求事务执行完成后,

将数据库从一个一致状态转变到另一个一致状态。

它是一种以

一致性规则为基础的逻辑属性,

例如在转账的操作中,

各账户金额必须平衡,

这一条规则对

于程序员而言是一个强制的规定,

由此可见,

一致性与原子性是密切相关的。

事务的一致性

属性要求事务在并发执行的情况下事务的一致性仍然满足。

它在逻辑上不是独立的,

它由事

务的隔离性来表示。

 

 

3

 

隔离性

 

 

隔离性意味着一个事务的执行不能被其他事务干扰。

即一个事务内部的操作及使用的数据对

并发的其他事务是隔离的,

并发执行的各个事务之间不能互相干扰。

它要求即使有多个事务

并发执行,看上去每个成功事务按串行调度执行一样。这一性质的另一种称法为可串行性,

也就是说系统允许的任何交错操作调度等价于一个串行调度。

串行调度的意思是每次调度一

个事务,在一个事务的所有操作没有结束之前,另外的事务操作不能开始。由于性能原因,

我们需要进行交错操作的调度,

但我们也希望这些交错操作的调度的效果和某一个串行调度

是一致的。

 

DM

实现该机制是通过对事务的数据访问对象加适当的锁,从而排斥其他的事

务对同一数据库对象的并发操作。

 

 

4

)持久性

 

 

系统提供的持久性保证要求一旦事务提交,

那么对数据库所做的修改将是持久的,

无论发生

何种机器和系统故障都不应该对其有任何影响。例如,自动柜员机(

 

ATM

)在向客户支付

一笔钱时,

就不用担心丢失客户的取款记录。

事务的持久性保证事务对数据库的影响是持久

的,即使系统崩溃。正如在讲原子性时所提到的那样,系统通过做记录来提供这一保证。

 

 

DM

没有提供显式定义事务开始的语句,第一个可执行的

SQL

语句

(

CONNECT

语句外

)

隐含事务的开始,

但事务的结束可以由用户显式的控制。

DM

中以下几种情况都结束

 

(

常,非正常

)

某一事务:

 

 

1

)当某一连接的属性设置为自动提交,每执行一条语句都会提交;

 

 

 

2

)遇到

COMMIT/ROLLBACK

语句,便提交

/

回滚一事务;

 

 

3

)当系统的

 

DDL

自动提交开关打开时(缺省为打开),遇到

DDL

语句则自动提交该

DDL

语句和以前的

DML

DDL

操作;

 

 

4

)事务所在的程序正常结束和用户退出;

 

 

5

)系统非正常终止时;

 

 

说明:

DM

在配置文件中提供了

DDL

语句的自动提交开关

DDL_AUTO_COMMIT

 

当此配

置项的值为

 

1

(缺省情况)时,所有

DDL

语句自动提交;当此配置项的值为

0

时,除

CREATEDATABASE

ALTERDATABASE

CREATESCHEMA

语句外的所有

DDL

语句

都不自动提交。

 

 

DM

中的一致性是以事务为基础的。

DM

通过提交和回滚分别用于将对数据库的修改永久化

和废除,但是无论是提交和回滚,

DM

保证数据库在每个事务开始前、结束后是一致的。为

了提高事务管理的灵活性,

DM

提供了设置保存点(

SAVEPOINT

)语句和回滚到保存点语

句。

保存点提供了一种灵活的回滚,

事务在执行中可以回滚到某个保存点,

在该保存点以前

的操作有效,而以后的操作被回滚掉。

 

 

DM

中的事务同样具有上述

4

个属性:原子性、一致性、隔离性和持久性。

 

 

2. 

并发操作与数据的不一致性

 

 

如果没有锁定且多个用户同时访问一个数据库,

则当他们的事务同时使用相同的数据时可能

会发生问题,导致数据库中的数据的不一致性。

 

 

一个最常见的并发操作的例子是火车

/

飞机订票系统中的订票操作。例如,在该系统中的一

个活动序列:

 

 

 

甲售票员读出某航班的机票张数余额

A

,设

A=16

 

 

  

乙售票员读出同一航班的机票张数余额

A

,也是

16

 

 

  

甲售票员卖出一张机票,修改机票张数余额

A=A-1=15,

A

写回数据库;

 

posted @ 2018-03-23 22:14  小黑妹007  阅读(19407)  评论(0编辑  收藏  举报