第六章 数据库的维护

Preview:

DESCRIPTION

第六章 数据库的维护. 数据库的安全性控制 数据库的完整性控制 数据库的并发控制 数据库的恢复技术. 第一节 数据库的安全性控制. 一、安全性控制概述 二、数据库安全标准. 一、安全性控制概述. 数据库的安全性控制 : 是指对数据库实施某些安全性措施,防止因用户非法使用数据库造成数据泄露、更改或破坏。. 1.用户标识和认证(Identification and Authentication) - PowerPoint PPT Presentation

Citation preview

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

第六章 数据库的维护

数据库的安全性控制 数据库的完整性控制 数据库的并发控制 数据库的恢复技术

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

第一节 数据库的安全性控制

一、安全性控制概述

二、数据库安全标准

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

一、安全性控制概述

数据库的安全性控制 :是指对数据库实施某些安全性措施,防止因用户非法使用数据库造成数据泄露、更改或破坏。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

1.用户标识和认证( Identification and Authentication)

由系统提供一定的方式让用户标识自己的名字或身份。系统内部记录着所有合法用户的标识,每次用户要求进入系统时,由系统将用户提供的身份标识与系统内部记录的合法用户标识进行核对,通过系统认证后才提供数据库的使用权。

用户标识和认证的方法有很多种,而且在一个系统中往往是多种方法并举,以获得更强的安全性。最常用的一种方法是使用用户名和口令。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

2.存取控制( Access Control) 存取控制,又称访问控制,是指控制用户对数据库中特定对象(如表、字段等)的存取权限,存取控制的目的是使用户只能进行经过授权的相关数据库操作。

在数据库系统中,为了保证用户只能访问他有权存取的数据,必须预先对每个用户定义存取权限。对于通过认证的用户 (即合法用户 ),系统根据他的存取权限定义对他的各种操作请求进行控制,确保他只执行合法操作。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

存取控制一般涉及三个元素间关系的设置,即主体( Subject)、客体( Object)和操作( Action),存取控制就是要控制主体对客体可以执行哪些操作。

主体 :是系统中需要访问权限的实体,它可以是某个特定的人(如张三)、特定的组或角色(如财务部组或学生角色)、或应用程序、进程、服务等。

客体 :是系统中被保护的实体,是受主体操纵的,包括数据库、基本表、索引、视图、表中的记录、字段等等。

操作 :指主体可对客体执行哪些动作,包括读、插入、删除、修改、创建、撤销和授权等。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

为主体分配对客体的操作权限称为授权。 衡量 DBMS授权机制是否灵活的一个重要指标是授权粒度,即可以定义的数据对象的范围。授权定义中数据对象的粒度越细,即可以定义的数据对象的范围越小,授权子系统就越灵活。在关系数据库中,授权粒度较粗的对象包括数据库、表、视图等,粒度较细的对象包括列 (属性 )、行 (记录 ) 等。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

在数据库系统中有两个主要的存取控制方式 :

( 1)自主存取控制(Discretionary Access Control,简称DAC)

是一种根据主体或主体所属组的标识来限制其存取客体的存取控制方式。自主指具有某种存取权限的主体能够将该权限(直接或间接)传递给其它主体。

DAC的安全控制机制基于存取矩阵模型,该矩阵结构如表 6-1所示。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

表 6-1 存取矩阵模型

主体 1 主体 2 … 主体 n

客体 1 read Insert/modify … read/Insert

客体 2 Delete Read/ modify … Delete/modify

… … … … …

客体 n read delete … insert

矩阵顶行表示主体,矩阵的左列表示客体,而矩阵中的元素则是存/取操作权限 (如读、写、删除和修改等 ),在这个模型中,指定主体(行 )与客体 (列 )后可根据矩阵得到指定的操作权限。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 2)强制存取控制(Mandatory Access Control,简称MAC)

是一种根据分配给主体和客体的固定安全属性(用标记 Label表示)来限制主体存取客体的存取控制方

“ ”式。 强制 意指在强制存取控制中的主、客体标记由专门的安全管理员设置,任何主体均无权设置与授权。

在MAC中,DBMS为主体和客体的每个实例 (值 )指派一个敏感度标记 (sensitivity label)。敏感度标记被分成若干级别,如绝密( Top Secret)、机密( Secret)、可信( Confidential)、公开( Public)等。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

可读

=

>=许可证级别( Label):绝密机密可信公开

主体

密级( Label):绝密机密可信公开

客体

可写

图 6-1 主体存取客体的规则

•仅当主体的许可证级别大于或等于客体的密级时, 该 主体才能读取相应的客体。

•仅当主体的许可证级别等于客体的密级时,该主体才能写相应的客体。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

3.视图机制 限制用户对某些数据的访问,不仅可以通过授权来实现,还可以通过定义用户的外模式来提供一定的安全保护功能。在关系数据库系统中,就是为不同的用户定义不同的视图,通过视图机制把要保密的数据对无权存取这些数据的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

4.审计

审计是一种监视措施,它是指数据库在运行中, DBMS跟踪用户对数据库的操作活动,跟踪的结果记录在专用的审计日志文件中。一旦发现有异常操作,有的 DBMS会发出警报信息,多数 DBMS虽无警报功能,但也可在事后根据记录进行分析。利用审计追踪的信息,能够重现导致数据库现有状况的一系列事件,以找到非法存取数据的人 ,追究责任。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

审计追踪记录的内容一般包括: 操作类型,如修改、查询等; 实施操作的主机和用户标识; 操作日期和时间; 操作所涉及的对象,如表、视图、记录、属性等; 数据的前映象和后映象。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

5. 数据加密

对于高度敏感性数据,例如,口令、财务数据、国家机密,还可以采用数据加密技术,以密文形式存储和传输数据。这样即使数据被窃取,也只能看到一些无法辨认的二进制代码。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

用户正常检索数据时,首先要提供密钥,由系统进行译码后,才能得到可识别的数据。

所有提供加密机制的系统必然也提供相应的解密程序。这些解密程序本身也必须具有一定的安全性保护措施,否则数据加密的优点也就遗失殆尽了。

由于数据加密与解密操作会占用大量系统资源,降低系统性能,因此数据加密功能通常也作为可选特征,允许用户自由选择,只对高度机密的数据加密。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

二、数据库安全标准

1.美国国防部 TCSEC(TDI)标准数据库系统安全分为四组( A、 B、 C、 D)七个等级。

D级标准:为无安全保护的系统。 C1级标准:满足该级别的系统必须具有主体、客体及主、客体

分离,身份标识与认证, 数据完整性,自主存取控制等功能。其核心是自主存取制。目前国内使用的系统大多符合此项标准。

C2级标准:满足该级别的系统在满足 C1级标准的全部功能下还具有审计功能。 C2级安全的核心是审计。满足 C2标准的数据库系统有 Oracle 7及以上, Sybase 公司的 Sybase SQL Server 11.0.6,微软公司的MS SQL Server 2000等。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

B1级标准:满足该级别的系统在满足 C2级标准全部功能下还具有强制存取控制功能。 B1级安全的核心是强制存取控制。符合 B1标准的数据库系统称之为安全数据库系统 (Secure DB System)或可信数据库系统 (Trusted DB System)。

B2级标准:满足该级别的系统除满足 B1级标准全部功能外,还具有隐蔽通道与数据库安全的形式化功能。目前国内外尚无符合此类标准的系统,其主要的难点是数据库安全的形式化表示困难。

B3级标准:满足该标准的系统除满足 B2级标准的全部功能外,还具有访问监控器功能。 B3级安全的核心是访问监控器,目前国内外尚无符合此项标准的系统。

A1级标准:满足该级别的系统除满足 B3级标准的全部功能外,还具有较高的形式化要求。此项标准为安全的最高等级,应具有完善的形式化要求,目前尚无法实现,仅仅是一种理想化的等级。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

2. 我国标准

我国标准分为 5级,从第 1级到第 5级基本上与TCSEC标准的 C级 (Cl, C2)及 B级(B1, B2, B3)一致,现将我国标准与 TCSEC标准比较如表所示。

TCSEC标准我国标准

D级标准 无

C1级标准 第一级:用户自主保护级

C2级标准 第二级:系统审计保护级

B1级标准 第三级:安全标记保护级

B2级标准 第四级:结构保护级

B3级标准 第五级:访问验证保护级

A1级标准 无

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

三、 SQL Server 2000的安全控制机制

1. SQL Server安全体系结构

SQL Server安全体系结构由三级组成(如图 6-2所示),从外向内分别是 DBMS或数据库服务器级、数据库级、对象与语句级,并且内部级比外部级要求高。

数据库管理系统级

数据库级

对象与语句级

图 6-2 SQL Server安全体系结构

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 1) DBMS或数据库服务器级安全: SQL Server通过设置登录账号来创建一个安全层,用户只有登录成功,才能与 SQL Server建立连接。

( 2)数据库级安全: SQL Server的特定数据库都有自己的用户和角色,该数据库只能由它的用户或角色访问,其他用户无权访问其数据。数据库系统可以通过创建和管理特定数据库的用户和角色来保证特定数据库不被非法用户访问。

( 3)对象与语句级安全:这一级 SQL Server实施权限管理。 SQL Server完全支持 SQL标准的 DCL功能, Transact-SQL的DCL功能保证合法用户即使进入了数据库也不能有超越权限的数据存取操作,即合法用户必须在自己的权限范围内进行数据操作。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

SQL Server的安全策略为: 要访问数据库服务器必须先成为 RDBMS的登录用户,登录用

户可以分配到某个角色; 要访问某个数据库,必须将某个登录用户或其所属的角色设置

成该数据库的用户; 成为某个数据库的用户后,如要访问该数据库下的某个数据库

对象,或执行某个命令语句,还必须为该用户授予所要操作对象或语句的权限。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

2. SQL Server 的安全验证模式

安全验证:是指数据库系统对用户访问数据库系统时所输入的账号和口令进行确认的过程。

安全验证的内容:包括确认用户的账号是否有效、能否访问系统、能访问系统中的哪些数据等等。

安全性验证模式:是指系统确认用户身份的方式。 SQL Server 有两种安全验证模式,即Windows安全验证模式和混合安全认证模式。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 1)Windows安全验证模式 Windows安全验证模式是指 SQL Server服务器通过使用

Windows网络用户的安全性来控制用户对 SQL Server服务器的登录访问。它允许一个网络用户登录到一个 SQL Server服务器上时不必再提供一个单独的登录账号及口令,从而实现SQL Server服务器与Windows登录的安全集成。因此,也称这种模式为集成安全验证模式。

( 2)混合安全验证模式 混合安全验证模式表示 SQL Server接受Windows授权用

户和 SQL授权用户。在这种模式下,用户必须输入有效的SQL Server登录账号及口令,因为 SQL Serve要用这两部分内容来验证用户的身份。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

3. SQL Server 的安全管理

数据库的安全管理主要是对数据库用户的合法性和操作权限的管理。

SQL Server的安全性管理包括以下几个方面:数据库系统登录用户管理、数据库用户管理、数据库系统角色管理以及数据库访问权限的管理。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 1)数据库系统登录用户管理 登录用户是服务器级用户,用户以登录用户身份登录进 SQL Server系统。

SQL Server在安装时,会自动创建一个登录用户sa,即系统管理员 (System Administrator),该用户具有三级安全体系的所有权限,可以执行所有的操作,是超级用户。几乎所有的创建用户和授权的工作都是由 sa来完成的,除非他 (她 )将授权工

作转授给专门的权限管理人员。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

使用企业管理器创建登录用户 Microsoft SQL Servers→SQL Servers →组 要建立登录账户的

→ → “ ” “ ” “服务器 安全性 登录。右击 登录 ,选择 新建登录 ,在 新建”登录 对话框中输入登录用户名,选择身份验证模式,选择登录

到 SQL Server “ ”之后要连接的默认数据库。最后单击 确定 按 钮 。

利用 SQL的存储过程来创建登录用户 SP_ADDLOGIN @LOGINAME=’ ’登录名 ,@PASSWD=’口

’令 ,@DEFDB=’ ’默认数据库名 例如: SP_ADDLOGIN @LOGINAME=’user1’, @PASSWD

=’123456’,@DEFDB=’pubs

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

(2) 数据库用户管理

数据库用户是指具有合法身份的数据库使用者。数据库用户的作用范围局限于其所属的数据库,

数据库用户必须对应到登录用户。登录用户只有成为(对应到)数据库用户后才能访问数据库,数据库用户可以与登录用户同名,也可以不同名。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

在企业管理器中创建新的数据库用户 “ ”在企业管理器的控制台中展开某个数据库,右击 用户 文件夹,

“ ” “ ”选择 新建数据库用户 命令,在新建用户对话框的 登录名 下拉“ ”框中选择要创建的数据库用户对应的登录名,然后在 用户名 的

文本框中键入数据库用户名。 利用 SQL的存储过程来创建数据库用户 SP_GRANTDBACCESS @LOGINAME = '登录用户名 ' [,@NAME_IN_DB = '数据库用户名 '] 例如: SP_GRANTDBACCESS @LOGINAME = 'user1',

@NAME_IN_DB = 'user1'

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 3)数据库系统角色管理

具有相同权限的一组用户称为角色。数据库系统角色管理包括服务器角色和数据库角色。

① 服务器角色 SQL Server在安装时,会自动创建一些服务器角色,其权限在系统安装好后就固定了,所以又称为固定服务器角色。

固定服务器角色是指派给服务器级用户即登录用户的。它是指在登录时授予该登录账号对当前服务器范围内的权限。这类角色可以在服务器上进行相应的管理操作,完全独立于某个具体的数据库。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

固定服务器角色包括: sysadmin(系统管理 )、 securityadmin(安全管理 )、 serveradmin(服务器管理 )、 setupadmin(启动管理 )、 processadmin(进程管理 )、 diskadmin(磁盘管理 )、 dbcreator(数据库创建 )、 bulkadmin(备份管理 )。各角色的具体权限请参考SQL Server技术资料。

可以使用 SQL Server企业管理器将登录用户添加到某一指定的固定服务器角色作为其成员。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

② 数据库角色

在一个服务器上可以创建多个数据库。数据库角色对应于单个数据库。数据库的角色分为固定数据库角色和用户定义的数据库角色。

固定数据库角色:是指 SQL Server 为每个数据库提供的固定角色。

用户定义的数据库角色:有两种类型

标准角色 (Standard Role):用于正常的用户管理,它可以包括成员。

应用程序角色 (Application Role):是一种特殊角色,需要指定口令,是一种安全机制。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 4 ) SQL Server权限管理

SQL Server 使用权限来加强系统的安全性,通常权限可以分为三种类型:对象权限、语句权限和隐含权限。

① 对象权限 对象权限是用于控制用户对数据库对象执行某些操作的权限。

数据库对象通常包括表、视图、存储过程。 对象权限是针对数据库对象设置的,它由数据库对象所有者授

予、禁止或撤消。 对象权限适用的数据库对象和操作权限在表 6-4中列出。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

表 6-4 对象权限适用的对象和语句

操作权限 数据库对象

SELECT(查询 ) 表、视图、表和视图中的列

UPDATE(修改 ) 表、视图、表的列

INSERT(插入 ) 表、视图

DELETE(删除 ) 表、视图

EXECUTE(调用过程 ) 存储过程

DRI(声明参照完整性 ) 表、表中的列

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

② 语句权限

语句权限是用于控制数据库操作或创建数据库中的对象操作的权限。

语句权限用于语句本身,它只能由 sa或 dbo授予、禁止或撤消。

语句权限的授予对象一般为数据库角色或数据库用户。

语句权限适用的 Transact-SQL语句和功能如表 6-5所示。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

表 6-5 语句权限适用的语句和权限说明

Transact-SQL语句权限说明

CREATE DATABASE 创建数据库,只能由 sa授予 SQL服务器用户或角色

CREATE DEFAULT 创建缺省

CREATE PROCEDURE

创建存储过程

CREATE RULE 创建规则

CREATE TABLE 创建表

CREATE VIEW 创建视图

BACKUP DATABASE 备份数据库

BACKUP LOG 备份日志文件

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

③ 隐含权限

隐含权限指系统预定义而不需要授权就有的权限,包括固定服务器角色成员、固定数据库角色成员、数据库所有者 (dbo)和数据库对象所有者 (dboo)所拥有的权限。

例如, sysadmin固定服务器角色成员可以在服务器范围内做任何操作, dbo可以对数据库做任何操作, dboo可以对其拥有的数据库对象做任何操作,对他不需要明确的赋予权限。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

利用企业管理器为用户或角色授予、撤消或者禁止其 对数据库对象的权限

展开数据库名(例如 pubs) , “ ” “ ”单击 用户 或 角色 。在右边窗口中找到要选择的用户或角色,右击该角色,在弹出菜单中选

“ ”择 属性 命令后,弹出数据库角色属性对话框。在该对话框中,“ ”单击 权限 按钮,则弹出数据库角色权限属性对话框。之后通过

单击相应的复选框即可为角色授予、撤消或者禁止其对数据库对象的权限。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

通过 Transact-SQL语句进行对象和语句的授权、收回 权限和拒绝权限

① 对象和语句的授权 给对象授权: GRANT <对象操作权限> ON <数据库对象>

TO <数据库用户名或角色名> 给语句授权: GRANT <语句名> TO <数据库用户名或角色名

>

② 收回用户对象和语句的权限 收回对象的权限: REVOKE <对象操作权限> ON <数据库对象> FROM <数据库用户名或角色名>

收回语句的权限: REVOKE <语句名> FROM <数据库用户名或角色名>

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

拒绝权限:包括删除以前授予用户、组或角色的权限,停用从其他角色继承的权限,确保用户、组或角色将来不继承更高级别的组或角色的权限。

收回权限是删除已授予的权限,并不妨碍用户、组或角色从更高级别继承已授予的权限。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

第二节 数据库的完整性控制

一、完整性控制概述

二、 SQL Server的完整性控制机制

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

一、完整性控制概述

1. 完整性与完整性控制

数据库中的数据完整性是指数据库中数据的正确性、有效性和相容性。

正确性:是指数据的真实合法性;

有效性:是指数据的值是否属于所定义的有效范围;

相容性:是指表示同一事实的两个或多个数据必须一致,不一致就是不相容。例如,学生的成绩只能是大于或等于 0

的数字,学号必须惟一,等等。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

数据库的完整性控制:是指数据库系统要提供某些控制措施保证数据库中的数据不破坏数据完整性。

完整性受到破坏的常见原因有用户误操作输入错误的数据,各种硬软件故障,并发更新数据,人为破坏等。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

2. 完整性约束条件与完整性控制机制 为维护数据库的完整性, DBMS必须提供一种机制来检查数据库中的数据,看其是否满足语义规定的条件,这些加在数据库数据之上的语义约束条件称

“为数据库的 完整性约束条件” “,也称 完整性约束规” “ ” “ ”则 、 完整性规则 或简称为 完整性约束 ,它们作为模式的一部分存人数据库中。

而 DBMS中保障数据满足完整性条件的机制称为完整性控制机制。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

DBMS的完整性控制机制由以下几部分功能组成 (“完成这些功能的 DBMS子系统称为完整性控制子系

”统 ): 定义功能,即提供定义完整性约束条件的功能。 检查功能,即检查用户发出的操作请求是否违背了完整性约束条件。

违约反应,如果发现用户的操作请求使数据违背了完整性约束条件,则执行一定的动作来保证数据的完整性。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

3. 完整性检查的时机 检查是否违背完整性约束条件的时机通常是在一条语句执行完后立即检查,称这类约束为立即执行约束( Immediate Constraints)。

有时完整性检查需要延迟到整个事务执行结束后再进行,检查正确方可提交,称这类约束为延迟执行约束( Deferred Constraints)。

“ ”例如银行数据库中 借贷总金额应平衡 的约束就应该是延迟执行的约束,从账号 A转一笔钱到账号 B为一个事务,从账号 A转出去钱后账就不平了,必须等转入账号 B后账才能重新平衡,这时才能进行完整性检查。如果用户操作请求违反延迟执行的约束,系统将拒绝整个事务,把数据库恢复到该事务执行前的状态。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

4. 完整性约束条件分类 完整性约束条件可以从其作用对象的粒度和状态两个角度进行分类。

关系数据库系统中,完整性约束条件的作用对象主要有列级、元组级和关系级三种粒度。

完整性约束条件涉及的这三类对象,其状态可以是静态的,也可以是动态的。

静态约束 :是指数据库每一确定状态时的数据对象所应满足的约束条件。它是反映数据库状态合理性的约束。例如,一个教

“务管理数据库的任何一个状态都必须满足条件 0≤学生成绩≤ 100”。

动态约束 :是指数据库从一种状态转变为另一种状态时,新旧值之间所应满足的约束条件。它是反映数据库状态变迁的约束。例如,更新职工表时,工资不能负增长。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

综合上述两个方面,完整性约束条件分为以下六类。

( 1)静态列级约束 静态列级约束是施加于单列数据上的约束,是对一个列的取值域

的说明,包括以下几方面: 对数据类型的约束,包括数据的类型、长度、单位、精度等。 对数据格式的约束。例如,规定工号的格式为前 2位表示入厂

年份,后 4位为顺序编号。 对取值范围或取值集合的约束。例如,规定成绩的取值范围为

0~ 100。 对空值的约束。空值表示未定义或未知的值,它与零值和空格

不同。有的列允许空值,有的则不允许。 其他约束。例如,关于列的排序说明等。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 2)静态元组约束 静态元组约束是施加于单个关系的元组上的约束,它规定组成一

个元组的各个列之间的约束关系。

( 3)静态关系约束 静态关系约束是一个关系的各个元组之间或者若干关系之间存在

的各种联系或约束。常见的静态关系约束有以下四种: 实体完整性约束。实体完整性约束是指构成关系主键的属性或属

性集合不能为空。 参照完整性约束。参照完整性约束维护关系间的参照完整性不被

破坏。 函数依赖约束。函数依赖约束维护用户规定的函数依赖。例如,

如果用户定义了下列函数依赖: Name→Address,则一个人不允许出现两个地址。

统计约束。统计约束指一个关系的某属性的值与该关系的多个元组的统计值之间的关系。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 4)动态列级约束 动态列级约束是指修改列定义或列值时应满足的约束条件。

( 5)动态元组约束 动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件。 例如,职工工资调资调整时,新工资>=原来工资+工龄*1.2。

( 6)动态关系约束 动态关系约束是指加在关系变化前后状态上的限制条件。动态关系约束实现起来开销较大。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

5. 数据完整性约束的定义方法

在具体的 DBMS中,定义数据完整性约束一般是在服务器端完成的,其定义方法通常有两种:

( 1)声明式定义

即通过声明的方式定义完整性,如实体完整性约束、一些简单的域约束都是通过声明的方式定义。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 2)过程式定义

即通过编写特殊的程序,如触发器( Trigger)来定义和实现完整性控制,触发器是用户编写的一系列 SQL语句组成的程序,当对数据库做修改(包括插入、删除和更新)时,它自动被系统执行,以实现一些用户自定义的完整性约束。

触发器还可以调用存储过程,进一步实现复杂的逻辑,存储过程也是一系列 SQL语句组成的程序,可以被用户自主调用,但不能被系统自动激发执行。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

二、 SQL Server的完整性控制机制

在关系系统中,最重要的完整性约束是实体完整性和参照完整性约束,其他完整性约束条件则可以归入用户定义的完整性约束。在 SQL Server中定义这几种完整性约束的方式如表所示。

完整性约束类型

约束定义方式

完整性功能描述

实体完整性PRIMARY KEY

指定主键,确保主键不重复,不允许主键为空值

参照完整性 FOREIGN KEY

定义外键、被参照表和其主键

用户自定义完整性

DEFAULT 插入数据时,如果没有明确提供列值,则用默认值作为该列的值

CHECK 指定某个列或列组可以接受值的范围,或指定数据应满足的条件

UNIQUE 指出数据应具有惟一值,防止出现冗余

RULE 指定数据应满足的条件

TRIGGER 监视用户对数据的修改、更新和删除,并执行用户定义的动作

NOT NULL 指定列值不能为空

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

第三节 数据库的并发控制

一、并发控制概述

二、并发控制的措施

三、 SQL Server的并发控制机制

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

一、并发控制概述

并发操作:在网络环境下,数据库是一个共享资源,多个用户或应用程序可以同时对数据库的同一数据对象进行读写操作,这称为对数据库的并发操作。

并发控制:并发操作可以充分利用系统资源,提高系统效率,但是如果对并发操作不进行控制会造成数据错误。因此 DBMS对并发操作要进行控制,以保证数据的正确性,称为并发控制。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

1. 事务的概念

并发控制是以事务( Transation)为单位进行的。所谓事务是用户定义的一个逻辑上完整的数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。例如,在关系数据库中,一个事务可以是一条 SQL

语句、一组 SQL语句或整个程序。事务和程序是两个概念。一般地讲,一个程序中包含多个事务。事务不仅是并发控制的基本单位,也是数据库恢复的基本单位。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

在 SQL语言中,定义事务的语句有三条: BEGIN TRANSACTION COMMIT ROLLBACK

事务通常是以 BEGIN TRANSACTION开始,以COMMIT或 ROLLBACK结束。 COMMIT的作用是提交,即提交事务的所有操作。事务提交是将事务中所有对数据的更新写回到磁盘上的物理数据库中去,事务正常结束。 ROLLBACK的作用是回滚,即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤消,回滚到事务开始时的状态。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

2. 事务的 ACID特性

原子性 (Atomicity)

一致性 (Consistency)

隔离性 (Isolation)

持续性 (Durability)

通常简称为 ACID特性。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 1)原子性 事务中包括的诸操作要么都做,要么都不做。也就是说,事务是作为一个逻辑上整体单位被处理,不可以被分割。

( 2)一致性 事务执行的结果必须使数据库处于一个一致性状态。 当数据库中只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统在运行时发生故障,使得事务的所有操作尚未全部完成就被中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致状态,数据库系统通过重做或撤销某些事务来确保事务的一致性。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 3)隔离性

一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

( 4)持续性

持续性也称永久性 (Permanence)。持续性指一个事务一旦提交,它对数据库中数据的改变就是永久性的,接下来的其他操作或故障不应该对其执行结果有任何影响。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

3. 事务并发操作可能产生的问题 如果对事务中的并发操作不加以限制,会产生以下三类问题。( 1)丢失更新 丢失更新是指事务 1与事务 2从数据库中读入同一数据并进行修改,事务 2的提交结果覆盖了事务 1提交的结果,导致事务 1的更新被丢失。 假设在火车票售票系统,某一时刻中央数据库中存储的某一车次某一天的车票数为 100,此时有两个售票点分别执行事务 T1和T2。如果按照表 6-7的顺序执行这两个事务的操作,数据库中最终的车票余额就会发生错误(应为 98,现在却为 99),因为事务T1的更新丢失了。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

表 6-7 丢失更新

执行顺序

事务 T1数据库中

A的值 事务 T2

100

1 从数据库读 A( 100) 100

2 100从数据库读A( 100)

3 执行 A=A-1 100

4 将 A( 99)写回数据库 99

5 99 执行 A=A-1

6 99将 A( 99)写回数据库

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 2 “ ”)读 脏数据 当 T1和 T2并发执行时,在 T1对数据库更新的结果没有提交之前, T2使用了 T1的结果,而在 T2操作之后 T1又回滚,这时引起的错误是 T2读取了 T1 “ ”的 脏数据 。

表 6-8 “ ”读 脏数据

执行顺序

事务 T1数据库中

A的值 事务 T2

100

1 从数据库读 A( 100) 100

2 执行 A=A-1 100

3 将 A( 99)写回数据库 99

4 99 从数据库读 A( 99)

5 回滚(即撤销上述操作) 100

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 3)不可重复读 当 T1读取数据 A后, T2执行了对 A的更新,当 T1 再次读取数据 A(希望与第一次是相同的值)时,得到的数据与前一次不

“ ” “ ”同,这时引起的错误称为 不可重复读 。 不可重复读 有以下三种情况:

事务 1读取某一数据后,事务 2对其做了修改,当事务 1再次读该数据时,得到与前一次不同的值。

事务 1按某种条件读取某一数据后,事务 2删除了其中部分记录,当事务 1再次按该条件读取数据时,发现某些记录神密地消失了。事务 1按某种条件读取某一数据后,事务 2插入了一些记录,当事务 1再次按相同条件读取数据时,发现多了一些记录。

后两种不可重复读有时也称为幻影行现象( phantom row) .

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

表 6-9 不可重复读

执行顺序

事务 T1数据库中 A的值

事务 T2

100

1从数据库读A( 100) 100

2 100从数据库读A( 100)

3 100 执行 A=A-1

4 99将 A( 99)写回数据库

5从数据库读A( 100) 99

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

二、并发控制的措施

并发操作之所以产生错误,是因为事务执行期间相

互干扰破坏了事务的 ACID特性,特别是隔离性。

防止错误的一种办法是只允许事务串行操作,一个

事务未执行完时,不允许其它事务执行。

但事务串行操作会降低系统的效率。所以,多数

DBMS采用封锁机制进行并发控制,既保证了数据

的一致性,又保障了系统效率。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

1. 封锁及锁的类型 封锁就是事务 T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁,加锁成功后事务 T对其要操作的数据对象具有一定的控制权,在事务 T释放它的锁之前,其它的事务不能使用该数据对象。具体的控制与锁的类型有关。 基本的锁类型有两种:排它锁 (Exclusive Locks,简称 X锁 )和共享锁 (Share Locks,简称 S锁 )。

排它锁也称为独占锁或写锁。一旦事务 T对数据对象 A加上X锁,则只允许 T读取和修改 A,其他任何事务不能再对 A加任何类型的锁,从而不能读取和修改 A,直到 T释放 A上的 X锁为止。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

锁的相容性矩阵可以表达不同锁之间的相容性关系。

表 6-10 锁的相容性矩阵

T2T1

X S 无锁

X No No Yes

S No Yes Yes

无锁 Yes Yes Yes

共享锁又称读锁。如果事务 T对数据对象 A加上 S锁,其他事务

对 A可以再加 S锁,但不能加 X锁,直到事务 T释放 A上的 S

锁为止。这保证了其它事务可以读 A,但在事务 T释放锁前不能

修改 A。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

2. 封锁的粒度 封锁粒度 (Granularity)是指封锁对象的大小。封锁对象可以是逻辑单元,也可以是物理单元。

以关系数据库为例,封锁对象可以是属性值、属性值的集合、元组、关系、直至整个数据库;也可以是一些物理单元,例如页 (数据页或索引项 )、块等。

封锁粒度与系统的并发度和并发控制的开销密切相关。封锁的粒度越小,并发度越高,系统开销也越大;封锁的粒度越大,并发度越低,系统开销也越小。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

一个系统应同时支持多种封锁粒度供不同的事务选 择,这种封锁方法称为多粒度封锁 (Multiple

Granularity Locking)。 选择封锁粒度时应该综合考虑封锁开销和并发度两个因素,选择适当的封锁粒度以求得最优的效果。

通常,需要处理大量元组的事务可以以关系为封锁粒度;需要处理多个关系的大量元组的事务可以以数据库为封锁粒度;而对于一个处理少量元组的用户事务,以元组为封锁粒度比较合适。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

3. 封锁协议 简单地对数据加 X锁和 S锁并不能保证数据库的一致

性。在对数据对象加锁时,还需要约定一些规则。例

如,何时申请 X锁或 S锁、持锁时间、何时释放等。

这些规则称为封锁协议 (Locking Protocol)。对封锁

方式规定不同的规则,就形成了各种不同的封锁协

议。不同级别的封锁协议所能达到的系统一致性级别

是不同的。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 1)一级封锁协议 事务 T在修改数据之前必须先对其加 X锁,直到事务结束才释放。事务结束包括正常结束( COMMIT)和非正常结束( ROLLBACK)。如果仅仅读数据而不修改数据,则不需要对数据加锁。

“ ”一级封锁协议可有效地防止 丢失更新 ,例如,前面表 6-7所示的丢失更新的情况,如果采用 1 “级封锁协议,就可以防止 丢失

”更新 ,如表 6-11所示。 “ ”虽然一级封锁协议可有效地防止 丢失更新 ,但是,由于一级封锁协议没有要求对读数据进行加锁,所以不能保证可重复读和不

“ ”读 脏 数据。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

表 6-11 用一级封锁协议防止丢失更新

执行顺序 事务 T1 数据库中 A的值 事务 T2

1 Xlock A 100

2 从数据库读 A (100) 100

3 100 Xlock A (失败 )

4 执行 A=A –1 100 Wait

5 将 A( 99)写回数据库 99 Wait

6 Unlock A 99 Wait

7 99 Xlock A(重做成功)

8 99 从数据库读 A (99)

9 99 执行 A=A -1

10 98 将 A( 98)写回数据库

11 98 Unlock A

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 2)二级封锁协议 在一级封锁协议基础上,加上事务 T对要读取的数据加 S锁,读完后立即释放 S锁。

“ ”二级封锁协议不但能够防止丢失修改,还可进一步防止读 脏 数据。例如,前面表 6-8 “ ”所示的读 脏 数据的情况,如果采用二级

“ ”封锁协议,就可以防止读 脏 数据,如表 6-12所示。 由于二级封锁协议对数据读完后即释放 S “锁,所以不能避免 不

”可重复读 错误,这是因为 T2释放该锁后,其它事务就可以修改该数据,之后 T2若再读该数据,就会发现数据已经变化了。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

表 6-12 用二级封锁协议防止 “ ”读 脏数据

执行顺序 事务 T1数据库中 A的值 事务 T2

1 Xlock A 100

2 从数据库读 A (100) 100

3 执行 A=A –1 100

4 将 A( 99)写回数据库 99

5 99 Slock A(失败)

6 99 Wait

7 RollBack(回滚) 100 Wait

8 Unlock A 100 Wait

9 100 Slock A(重做成功)

10 100 从数据库读 A (100)

11 100 Unlock A

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 3)三级封锁协议 在一级封锁协议基础上,加上事务 T对要读取的数据加 S锁,直

到事务结束才释放。

由于三级封锁协议强调即使事务读完数据之后也不释放 S锁,从

而使得其它事务无法更改数据。所以,三级封锁协议不但防止了

“ ”丢失修改和读 脏 数据,而且防止了不可重复读。例如,前面表

6-9 “ ”所示的 不可重复读 的情况,如果采用 3级封锁协议,就可

“ ”以防止 不可重复读 ,如表 6-13所示。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

表 6-13 用 “三级封锁协议防止 ”不可重复读

时间顺序 事务 T1 数据库中 A的值

事务 T2

1 Slock A 100

2 从数据库读A(100)

100

3 其它操作 100 Xlock A(失败 )

4 … 100 Wait

5 再读 A(100) 100 Wait

6 Unlock A 100 Wait

7 100 Xlock A(重做成功)

8 100 从数据库读 A (100)

9 100 执行 A=A –1

10 99 将 A( 99)写回数据库

11 99 Unlock A

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

4. 并发调度的可串行化与两段锁协议 “事务的执行次序称为 调度 (Schedule)”。 如果多个事务依次顺序执行(串行执行),则称为事务的串行调度( serial schedule)。在串行调度中,每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行。

如果利用分时的方法,同时执行多个事务(并发执行),则称为事务的并发调度( concurrent schedule)。在事务并发执行时,有可能破坏数据库的一致性,或导致用户读了脏数据。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

当且仅当一个并发调度的执行结果与某一串行调度的执行结果相同,则称该并发调度为可串行化的调度。

由此可以得到如下结论:如果一个并发调度是可串行化的调度,则这个并发调度就是正确的调度,可以产生正确的结果。可串行化 (serializability)是判断并发调度正确性的准则。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

保证并发调度可串行性的两段锁协议( Two-Phase Locking,简称 2PL) :

是指所有的事务必须分为两个阶段对数据进行加锁与解锁,具体内容如下:

在对任何数据进行读写操作之前,事务必须获得对该数据的封锁;

在释放一个封锁之后,事务不再获得任何其他封锁。 “ ”所谓 两段 是指遵守该协议的事务分为两个阶段:获得封锁阶段 (“ ”扩展 阶段 )和释放封锁阶段 (“ ”收缩 阶段 )。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

“可以证明,如果所有并发执行的事务都遵守 两段锁协

”议 ,则对这些事务的所有可能的并发调度都是可串行

化的,因而这些调度的结果一定是正确的。

需要说明的是事务遵循两段锁协议是可串行化的充分

条件,但不是必要条件。也就是可串行化的并发调度

中,不一定所有的事务都必须遵守两段锁协议。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

5. 封锁出现的问题及解决方法 封锁机制尽管能防止事务并发操作的数据不一致性,但也会产生死锁等问题, DBMS必须妥善地解决这些问题,才能保障系统的正常运行。数据库中解决死锁问题主要有两类方法:

一类方法是采用一定措施来预防死锁的发生; 另一类方法是允许发生死锁,然后采用一定手段定期诊断系统中有无死锁,若有则解除之。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 1)预防死锁的方法。 一次封锁法 :要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。一次封锁法虽然可以预防死锁,但由于一次将数据全部加锁,势必扩大了封锁的范围,从而降低了系统的并发度。

顺序封锁法 :是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。顺序封锁法虽然可以防止死锁,但这种方法也存在降低系统并发度的问题。此外,由于事务的封锁请求可以随着事务的执行而动态地决定,很难事先确定每一个事务要封锁哪些对象,因此也就很难按规定的顺序去施加封锁。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 2)诊断与解除死锁的方法 解决死锁问题,除了前述事先预防的办法外,还可以采用事后检查诊断的方法,即允许发生死锁,然后采用一定手段定期诊断系统中有无死锁,若有则解除之。

诊断死锁的方法主要有超时法和等待图法两种: 超时法 . 如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。超时法实现简单。但其不足之处一是有可能误判死锁,事务因为其他原因使等待时间超过时限,系统会误认为发生了死锁。二是时限若设置得太长,死锁发生后不能及时发现。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

等待图法 . 事务等待图是一个有向图 G = (T, U)。 T为节点的集合(节点用圆圈表示),每个节点表示正运行的事务; U为有向边的集合(有向边用箭头线表示),每条有向边表示事务等待的情况。若 Tl等待 T2,则从 T1向 T2画一条有向边。事务等待图动态地反映了所有事务的等待情况。并发控制子系统周期性地(比如每隔 1 min)检测事务等待图,如果发现图中存在回路,则表示系统中出现了死锁。例如,在图 6-6中,左边的等待图无回路,表明无死锁,右边的等待图有回路,表明发生了死锁。

T4

T3T1

T2

T4

T3T1

T2

图 6-6 通过等待图检测死锁

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

解除死锁的方法 系统在检测诊断出死锁后,就要采取某种策略解除死锁。解除死锁通常采用的方法是选择一个处理死锁代价最小的事务,将其撤销,释放此事务持有的所有的锁,使其他事务得以继续运行下去。当然,对撤销的事务所执行的数据修改操作必须加以恢复。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

三、 SQL Server的并发控制机制

1. SQL Server 锁的粒度( 1 )行级锁 表中的行是可以锁定的最小空间。行级锁就是指事务在操纵数据

的过程中,锁定一行或者若干行数据。 行级锁占用的数据资源最少,因此大大提高了系统的并发性。( 2 )页级锁 一页可以包含多行,但一行的数据只能放在一页上,不能跨页

存放。页级锁是指在事务的操作过程中,无论事务处理多少数据,每一次都锁定一页。

在页级锁中,即使是一个事务只操纵页上的一行数据,该页上的其他数据行也被锁定。因此,使用页级锁会出现数据的浪费现象,也就是说,在同一个页上会出现数据被占用却没有使用的现象。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 3 )簇级锁 一个簇由 8 个连续的页组成。簇级锁就是指事务锁定一个簇。 簇级锁是一种特殊类型的锁,只能用在一些特殊的情况下,例

如在创建数据库和创建表时,系统分配物理空间时使用这种类型的锁。

( 4 )表级锁 表级锁是指事务在操纵某一个表的数据时,锁定了这个数据所在

的整个表。当事务处理的数据量比较大时,一般使用表级锁。 与行级锁和页级锁相比,表级锁占用的系统资源例如内存比较少,

但是占用的数据资源最大。使用表级锁时,有可能出现数据的大量浪费现象,因为表级锁锁定整个表,这样还会降低系统的并发性。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 5)数据库级锁 数据库级锁是指锁定整个数据库,防止其它用户或者事务对锁定的数据库进行访问。

数据库级锁是一种非常特殊的锁,它只是用于数据库的恢复操作过程中。这种等级的锁是一种最高等级的锁,因为它控制整个数据库的操作。只要对数据库进行恢复操作,那么就需要设置数据库为单用户模式,这样系统就能防止其他用户对该数据库进行各种操作。严格地说,数据库级锁不是一种锁,而是一种类似锁的单用户模式机制。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

2. SQL Server锁的类型及其控制 SQL Server除提供基本类型的共享锁 (S锁 )和排它锁 (X锁 )之外,还有意向锁、更新锁和模式锁三种特殊锁,这几种特殊锁 SQL Server系统自动控制,故不作详细介绍。

一般情况下, SQL Server能自动提供加锁功能,不需要用户专门设置,例如当用 SELECT语句访问数据时,系统能自动对访问的数据加共享锁;在使用INSERT、 UPDATE和 DELETE语句增加、修改和删除数据时,系统会自动给相关数据加排它锁。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

第四节 数据库的恢复技术

一、数据库故障的种类

二、数据库恢复的基本原理与实现技术

三、 SQL Server的数据库备份与恢复方法

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

一、数据库故障的种类

1.事务故障 事务故障是指事务在运行过程中由于种种原因,如输入数据的错误、运算溢出、违反了某些完整性限制、某些应用程序的错误以及并行事务发生死锁等,使事务未正常运行至终止点而产生的故障。 此类故障仅影响发生故障的事务,不会影响其它事务。

2.系统故障 系统故障是指造成系统停止运转,必须重新启动系统的任何故障。例如,特定类型的硬件故障(如 CPU故障、内存故障)、操作系统故障、 DBMS代码错误、数据库服务器出错、突然断电等。 此类故障影响正在运行的所有事务,但是并不破坏数据库。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

3.介质故障 介质故障指外存故障,即由于磁盘损坏、磁头碰撞、瞬时磁场干扰等原因导致外部存储介质上的数据库受到破坏,数据全部或部分丢失,并影响正在存取这部分数据的所有事务。介质故障又称为硬故障 (Hard Crash)。相应地前面介绍的故障为软故障 (Soft Crash)。 介质故障虽然发生的可能性较小,但是它的破坏性却是最大的,有时会造成数据的无法恢复。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

二、数据库恢复的基本原理与实现技术

数据库恢复的基本原理是利用事先建立的冗余数据(即备份数据)来恢复系统。因此,恢复机制涉及的两个关键问题是:

如何建立冗余数据; 如何利用这些冗余数据实施数据库恢复。

建立冗余数据最常用的技术是: 数据转储(即备份, backup) 登记日志文件( Logging)。

通常在一个数据库系统中,这两种方法是一起使用的。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

1. 数据转储 数据转储就是数据库管理员( DBA)定期将数据库的内容复制到其他存储介质(如磁带或非数据库所在的另外磁盘)上形成备用文件的过程。这些备用的数据文件称为后备副本或后援副本。当数据库遭到破坏后可以将后备副本重新装入,恢复数据库。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

数据转储根据转储时系统状态的不同可分为静态转储和动态转储。( 1)静态转储 静态转储是指在转储过程中,系统不运行其他事务,专门进行数据转储工作。在静态转储操作开始时,数据库处于一致状态,而在转储期间不允许其他事务对数据库进行任何存取、修改操作,数据库仍处于一致状态。 静态转储虽然简单,并且能够得到一个数据一致性的副本,但是转储必须等待正运行的事务结束才能进行,新的事务也必须等待转储结束才能执行,这就降低了数据库的可用性。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 2)动态转储 动态转储是指在转储过程中,允许其他事务对数据库进行存取或修改操作的转储方式。也就是说,转储和用户事务并发执行。

动态转储有效地克服了静态转储的缺点,它不用等待正在运行的事务结束,也不会影响新事务的开始。

动态转储的主要缺点是由于可以和事务并发执行,后援副本中的数据并不能保证正确有效和一致。

例如,在转储期间某个时刻,某事务将数据 X=100写入数据库,之后发生了转储操作,将该数据转储到磁带上,再之后该事务又执行

了回滚操作,撤销了该数据更新,那么,转储的数据就不正确了。这个问题可以利用日志文件解决,即把转储期间各事务对数据库的修改活动登记到日志文件 (Log File),使得后援副本加上日志文件能够把数据库恢复到某一时刻的正确状态。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

根据转储进行的方式不同,数据转储可以分为海量转储和增量转储。( 1)海量转储 海量转储是指每次转储全部数据库。 利用海量转储能的后备副本能够比较方便地进行数据恢复工作。但对于数据量大和更新频率高的数据库,不适合频繁地进行海量转储。

( 2)增量转储 增量转储是指每次只转储上一次转储后更新过的数据。 增量转储适用于数据库较大、但是事务处理又十分频繁的数据库系统。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

综合上面四种方式,可以将数据转储方法细分为 4类: 动态海量转储 动态增量转储 静态海量转储 静态增量转储

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

2. 登记日志文件( Logging)

日志文件是用来记录事务对数据库的更新操作的文件。主要用来恢复未完全执行完的事务。

不同的数据库系统采用的日志文件格式不完全相同,概括起来主要有两种格式 :

以记录为单位的日志文件 以数据块为单位的日志文件。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

在恢复数据库故障恢复时,系统经常要利用日志文件对事务作撤销 (UNDO)或重做 (RED0) 操作,( 1)事务撤销操作。具体过程如下: ① 反向扫描日志文件,查找应该撤销的事务。 ② 找到该事务更新的操作,对更新操作做逆操作。即如果是插入操作则做删除操作,如果是删除操作则用更新前数据旧值做插入,如是修改操作则用修改前值替代修改后值。 ③ 按上述过程反复进行,即反复做更新操作的逆操作,直到事务开始标志出现为止。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 2)事务重做操作。具体过程如下:

① 正向扫描日志文件,查找重做事务。

② 找到该事务的更新操作,对更新操作重做,如果是插入操作则将

新值插入至数据库;如果是删除操作,则将旧值删除;如果是修改

则将旧值修改成新值。

③ 如此正向反复做更新操作,直到事务结束标志出现为止。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

3. 数据库恢复策略( 1)事务故障恢复事务故障又分为可以预期的和非预期的两种事务故障。可以预期的事务故障 即在程序中可以预先估计到的错误,如存款余额为负(透支),商品库存量为 0等,此时继续取款或发货就会出现问题。这种情况可在事务的代码中加入判断和 ROLLBACK语句。当事务执行到ROLLBACK语句时,由系统对事务进行撤销操作,即执行 UNDO操作。

非预期的事务故障 即在程序中发生的未估计到的错误,如运算溢出、并发事务发生死

锁而被 选中撤销该事务等。此时由系统自动直接对该事务执行UNDO处理。事务故障的恢复是由系统在自动完成的,不需要用户干预。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

(2)系统故障恢复 发生系统故障时,有的事务的数据可能已送入磁盘上的物理数据库,而有的事务数据可能有一部分甚至全部留在内存缓冲区,尚未写回到磁盘上的物理数据库中,从而造成数据库可能处于不正确的状态。系统故障必须在系统重新启动时由 DBMS的恢复子系统把数据库恢复到正确的状态。重新启动时,分两种情况考虑恢复处理 :

对未完成事务作 UNDO处理; 对已提交事务但更新还留在缓冲区的事务进行 REDO处理。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 3)介质故障恢复 在发生介质故障时,磁盘上的物理数据库遭到毁灭性破坏。恢复方法是重装数据库,然后重做已完成的事务。步骤如下:

① 装入最新的数据库后备副本 (离故障发生时刻最近的转储副本 ),使数据库恢复到最近一次转储时的一致性状态。对动态转储的数据库副本,还须同时装入转储开始时刻的日志文件副本,利用恢复系统故障的方法 (即 RED0+UND0),才能将数据库恢复到一致性状态。

② 装入相应的日志文件副本 (转储结束时刻的日志文件副本 ),重做已完成的事务。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

4. 数据库镜像和远程备份( 1)数据库镜像 数据库镜像 (Mirror)的方法是 DBMS根据 DBA的要求,自动把整个数据库或其中的关键数据复制到另一个磁盘上形成镜像数据,并自动保证镜像数据与主数据的一致性,即每当主数据库更新时, DBMS自动把更新数据复制到镜像数据库。

一旦出现介质故障,系统可以切换到镜像磁盘继续运行,同时, DBMS利用镜像数据恢复主数据库,无需停机,大大提高了系统可用性。

在没有出现故障时,数据库镜像还可以用于并发操作,即当一个用户对数据加排它锁修改数据时,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 2)远程备份系统 远程备份即平时在一个主站点执行事务处理,使用一个远程备份站点以应付突然事件,主站点和远程备份站点相距很远,通过网络连接。

一开始所有主站点的数据都被复制到远程备份站点。以后的更新在主站点上执行,而远程站点必须与主站点同步,同步方法是:通过发送所有主站点的日志记录到远程备份站点.远程备份站点根据日志记录执行同样的操作求达到同步。

当主站点发生故障时,远程备份站点就立即接管处理。但它首先使用源于主站点的数据副本 (也许已过时 )以及收到的来自主站点的日志记录执行恢复。一旦恢复执行完成,远程备份站点就开始接替主站点处理事务。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

三、 SQL Server的数据库备份与恢复方法

1. SQL Server中的数据库备份 SQL Server 中的数据库备份即前面所介绍的数据转储(以下介绍的数据库备份均指静态数据转储)。既可以在企业管理器中备份数据库,也可以使用 SQL BACKUP语句备份数据库。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

2. SQL Server中的数据库恢复 在 SQL Server中,数据库恢复包括自动恢复和手工恢复两种方式。( 1)自动恢复 每当启动 SQL Server 数据库管理系统时,系统对会检查每个数据库的事务日志,查看是否需要进行恢复工作。

第一,如果有不完整的事务,比如有开始而没有结束的事务,系统自动对其进行回滚(即撤销 UNDO)操作,使数据库回到事务开始前的状态。

第二,如果有已经提交的事务,但其对数据库的修改没有保存到磁盘中,则系统会按照事务日志中的记录前滚(即重做REDO)操作,使数据库恢复到事务完成时状态。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 2)手工恢复 第一步:恢复前的准备。在对数据库进行恢复前,如果该数据库还处在可用状态,应对数据库的访问设置一些必要的限制。

第二步:确定恢复的顺序。恢复数据库要按照以下顺序进行:

恢复最近的完全数据库备份。 恢复完全备份之后的最近的差异数据库备份。 按日志备份的先后顺序恢复自完全或差异数据库备份之后的所有日志备份。

第三步:恢复数据库。恢复数据库既可以在企业管理器完成,也可以用 SQL语句实现。

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

复习思考题

1、 4、 5、 8 、9、 10、 12、 14、 15 、 19、 21 、27、 28、 29

Recommended