第9章 数据库保护.ppt_第1页
第9章 数据库保护.ppt_第2页
第9章 数据库保护.ppt_第3页
第9章 数据库保护.ppt_第4页
第9章 数据库保护.ppt_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第九章 数据库保护,学习内容,数据库完全性控制 数据库完整性控制 并发控制 数据库的恢复,数据库管理系统(DBMS)除了提供对数据的查询操作和更新操作以外,还必须对数据库中的各种操作加以监控并对数据进行保护,如要保证对数据的操作没有违反完整性规则,防止对数据的非法存取,防范系统故障造成的数据丢失和数据库处于不一致性状态。DBMS对数据库的安全保护功能包括:安全性控制、完整性控制、并发性控制和数据库恢复。,概 述,数据库的安全性是指保护数据库,以防止非法使用所造 成数据的泄露、更改或破坏。(对象:非法用户或非法操作) 安全性保护范围: 计算机外部环境保护 自然环境 社会环境 设备环境 计算机内部

2、系统保护 网络数据传输安全 计算机系统中的安全问题 操作系统安全 数据库系统安全 应用系统安全,安全性,计算机系统的安全控制模型,安全控制,用户标识和鉴定 数据库系统是不允许一个未经授权的用户对数据库进行 操作的。 用户标识和鉴定是系统提供的最外层的安全保护措施, 其方法是由系统提供一定的方式让用户标识自己的名字或身 份,系统内部记录着所有合法用户的标识,每次用户要求进 入系统时,由系统进行核实,通过鉴定后才提供机器的使用 权。 用户标识和鉴定的方法有用户名、口令等,也可使用某 种计算过程和函数,物理特征鉴别等手段。,安全控制,存取权限控制 又称为访问控制,规定不同的用户对于不同的数据对象允许

3、执行的操作权。 构成: 定义用户权限,并将用户权限(用户标识、数据对象和操作类型)以授权表的形式存放在数据字典中。 系统进行权限检查,拒绝用户的非法操作。,安全控制,安全控制,存取控制:用户对于不同的对象有不同的权限;不同的用户对同一对象的权限也可能不同;用户可以将自己拥有的权限授给其他用户。其中授权粒度是衡量授权机制的重要指标。在关系数据库中,授权粒度包括关系、记录或属性。粒度越细,授权子系统越灵活,能够提供的安全性就越完善。但访问控制受主体主观随意性的影响较大,其安全力度尚显不足。 SQLServer中使用GRANT、REVOKE实现。,定义视图 为不同的用户定义不同的视图,可以限制各个用

4、户的 访问范围,把保密的数据对无权访问的用户隐藏起来。 如:限制USER1只能对数学系的学生信息进行操作。 可采取两种方法:一是对USER1授权;二是定义一个数学 系学生信息的视图,基于该视图定义存取权限。 但视图机制的安全保护功能太不精细,往往不能达到 应用系统的要求,其主要功能在于提供了数据库的逻辑独 立性。,安全控制,数据加密 主要防止通过不正常渠道非法访问数据。如偷取存储数据的磁盘,在通信线路上窃取数据等。 数据加密是防止数据库中数据在存储和传输中失密的有效手段。 加密的思想是根据一定的算法将原始数据(明文)加密成不可直接识别的格式(密文),从而使不知道解密算法的人无法获得数据的内容。

5、 加密方法主要有替换方法和置换方法。 由于加密解密过程会占用较多的系统资源,降低了数据库的性能。因此一般适用于保密要求特别高的数据。,安全性控制,审计 审计是一种监视措施,跟踪记录有关数据的访问活动。 审计追踪把用户对数据库的所有操作自动记录来放入审 计日志中。日志中记录操作类型、操作终端标识与操作者标 识、操作日期、操作所涉及数据、数据的前象和后象等。 审计功能会增加系统开销。,安全性控制,SQLServer的安全性控制,第一层 操作系统的登录权限,SQL Server 的安全体系结构,第二层 SQLServer的登录权限,第三层 数据库的访问权限,第四层 数据库对象的访问权限,SQL Se

6、rver数据库对象,SQLServer的安全性控制,验证模式,SQLServer的安全认证模式: Windows身份验证模式:允许使用Windows的用户对SQL服务器的登 录访问 混合验证模式:支持Windows安全认证和SQLServer安全认证,设置验证模式,在对象资源管理器中选择已连接的服务器,右击后选择“属性”菜单。然后在打开的窗口中选择“安全性”选项卡。,SQLServer的安全性控制,用户和角色管理,概念: 用户:具有合法身份的数据库使用者 角色:具有相同权限的组合 分类:服务器级用户或角色;数据库级用户或角色,SQLServer的安全性控制,登录帐户 创建登录账户,在“对象资源

7、管理器”中选择【安全性】【登录名】上右击,并在展开菜单中选择【新建登录名】; 在打开的窗口中输入登录名和密码; 设置用户所属的“服务器角色”; 在“用户映射”选项卡中选择用户可访问的数据库; 新建用户登录检测。,SQLServer的安全性控制,SQLServer的安全性控制,用户和角色管理,数据库用户 登录用户只有成为数据库用户后,才能访问数据库 dbo用户:数据库对象拥有者(创建者),在其所拥 有的数据库中拥有所有的权限 guest用户:允许任意一个登录用户访问存在guest用 户的数据库 创建新用户,SQLServer的安全性控制,创建数据库用户步骤: 打开某数据库的【安全性】中的【用户】

8、项,右击选择【新建 用户】 在弹出对话框中输入“用户名”,并选择与其关联的登录用户。 在“新建用户”对话框的“安全对象”选项卡中,设置用户的权 限。,SQLServer的安全性控制,用户和角色管理,数据库角色:内置数据库角色和用户自定义数据库角色 新建数据库角色 展开数据库文件夹,选中【安全性】【角色】项,右击选 择“新建数据库角色”; 输入角色名称; 单击“所有者”按钮,设置用户或角色类型 添加角色成员 在“选项页”列表中打开“安全对象”选项卡,完成角色的权限 设置;,SQLServer的安全性控制,SQLServer的安全性控制,内置数据库角色,服务器角色: 系统预定义的(9 种包括pub

9、lic),用户不能新建 展开服务器文件夹,展开【安全性】【服务器角 色】项,右击任一角色后选择【属性】 ; 添加角色成员; 确定,SQLServer的安全性控制,完整性是为了保证数据库中存储的数据的正确性、有效性和相容性。即所有数据都符合现实世界语义。如:每个人的身份证号必须是惟一的;人的性别只能是男或女等。(对象:不合语义的数据),DBMS完整性控制机制功能: 定义功能(DDL) 检查功能: 执行Insert、Delete和Update后;(立即执行约束) 提交事务后;(延迟执行约束) 违约处理:违背完整性约束条件时DBMS应采取的动作 拒绝(NO ACTION):不执行该操作; 级连(CA

10、SCADE):执行其他操作;,完整性控制,为了实现完整性控制,数据库管理员应向DBMS提出一组完整性规则来检查数据库中的数据,看其是否满足语义约束。这些语义约束构成了数据库的完整性规则,这组规则作为DBMS控制数据完整性的依据。 完整性规则主要由以下三部分构成: 触发条件:规定系统什么时候使用规则检查数据:可分为立即执行 和延迟执行两种方式。(何时检查) 约束条件:规定系统检查用户发出的操作请求违背了什么样的完整 性约束条件;(检查什么) 违约响应:规定系统如果发现用户的操作请求违背了完整性约束条 件,应该采取一定的动作来保证数据的完整性,即违约时要做的事 情。(怎样处理) 完整性规则的执行由

11、系统处理。其中完整性约束条件是完整性控制机制的核心。,完整性控制,完整性约束条件分类(依使用对象): 结构约束:同一关系的不同属性、元组或若干关系间应满足的约束 条件(元组约束或关系约束) 函数依赖约束 实体完整性约束 参照完整性约束 统计约束:某属性值与关系中的多个元组的统计值应满足的约束如:奖金不能高于所有员工平均工资的10% 值的约束:(列级约束) 数据类型的约束:数据类型、长度、单位和精度等。 数据格式的约束:如日期YY.MM.DD 取值范围的约束:如salary在20005000 空值的约束,完整性控制,完整性控制,实现参照完整性的问题,外键的空值问题 【例】在职工部门数据库中,EM

12、P关系包含有外码Deptno 若某元组的Deptno为空值,表示这个职工尚未分配到任何具体的部门工作 和应用环境的语义是相符 【例】学生选课数据库中,S关系为被参照关系,其主码为Sno,SC为参照关系,外码为Sno。 若SC的Sno为空值:表明尚不存在的某个学生,或者某个不知学号的学生,选修了某门课程,其成绩记录在Grade中。 与学校的应用环境是不相符的,因此SC的Sno列不能取空值。,完整性控制,删除被参照关系的某个元组的问题 级连删除(CASCADES) 将参照关系中外码值与被参照关系中要删除元组主码值相对应的元组一起删除 受限删除(RESTRICTED) 当参照关系中没有任何元组的外码

13、值与要删除的被参照关系的元组的主码值相对应时,系统才执行删除操作,否则拒绝此删除操作 置空值删除(NULLIFIES) 删除被参照关系的元组,并将参照关系中与被参照关系中被删除元组主码值相等的外码值置为空值。,SCS,完整性控制,【例】要删除S关系中Sno=950001的元组,而SC关系中有4个元组的Sno都等于950001。 级连删除:将SC关系中所有4个Sno=950001的元组一起 删除。 如果参照关系同时又是另一个关系的被参照关系,则这种删除操作会继续级联下去 受限删除:系统将拒绝执行此删除操作。 置空值删除:将SC关系中所有Sno=950001的元组的Sno 值置为空值。,在学生选课

14、数据库中,显然第一种方法和第二种方法都是对的。第三种方法不符合应用环境语义。,完整性控制,修改关系的主码问题 不允许修改主码:先删除,然后插入 允许修改主码:必须保证唯一性和非空性 修改被参照关系的问题 级连修改:修改被参照关系中主码值同时,用相同的方法修改参照关系中相应的外码值。 受限修改:只当参照关系中没有任何元组的外码值等于被参照关系中某个元组的主码值时,这个元组的主码值才能被修改。 置空值修改:修改被参照关系中主码值,同时将参照关系中相应的外码值置为空值。,完整性控制,【例】将S关系中Sno=950001的元组中Sno值改为960123。而SC关系中有 4个元组的Sno=950001

15、级连修改:将SC关系中4个Sno=950001元组中的Sno值也改 为960123。如果参照关系同时又是另一个关系的被参照关 系,则这种修改操作会继续级联下去。 受限修改:只有SC中没有任何元组的Sno=950001时,才能 修改S表中Sno=950001的元组的Sno值改为960123。 置空值修改:将S表中Sno=950001的元组的Sno值改为 960123。而将SC表中所有Sno=950001的元组的Sno值置为 空值。,在学生选课数据库中只有第一种方法是正确的。,完整性控制,在参照关系中插入元组问题 受限插入:仅当被参照关系中存在相应的元组,其主码值与 参照关系插入元组的外码值相同时

16、,系统才执行插入操作, 否则拒绝此操作。 递归插入:首先向被参照关系中插入相应的元组,其主码值 等于参照关系插入元组的外码值,然后向参照关系插入元组。 【例】向SC关系插入(99001,1,90)元组,而S关系中尚没有Sno=99001的学生 受限插入:系统将拒绝向SC关系插入(99001,1,90)元组 递归插入:系统将首先向S关系插入Sno=99001的元组,然后向SC关系插入(99001,1,90)元组。,用SQL语言定义关系模式的完整性约束条件: 实体完整性约束:关系中主关键字的值唯一标识一个记 录,且值不能为空或部分为空。 (Primary Key) 参照完整性约束:也称引用完整性,

17、用于描述多个实体或 表间的关系。 (Foreign key References) 用户自定义约束:具体应用领域所涉及的数据必须满足的 语义要求。如选课关系中成绩不能为负数; (Check,Default,Unique),SQLServer中的完整性控制,创建或修改基本表时还可以对表进一步定义,如主键、空值的设定,使数据库用户能够根据应用的需要对基本表的定义做出更为精确和详尽的规定。 列约束是对某一个特定列的约束,包含在列定义中,直接跟在该 列的其他定义之后,用空格分隔,不必指定列名; 表约束与列定义相互独立,不包括在列定义中,通常用于对多个 列一起进行约束,与列定义用,分隔,定义表约束时必须

18、指出要 约束的那些列的名称。完整性约束的基本语法格式为: CONSTRAINT 约束名:约束不指定名称时,系统会给定一个名称。 约束类型:必须指定。,CREATE TABLE 表名 ( 列级约束,n,表级约束 ),ALTER TABLE 表名 ADD column 约束|约束,SQLServer中的完整性约束定义,PRIMARY KEY约束 用于定义基本表的主键,起唯一标识作用,其值NOT NULL,也不能重复。自动建立聚集索引。 PRIMARY KEY既可用于列约束,也可用于表约束。 每个表中只允许定义一个PRIMARY KEY约束。 定义列约束时,其语法格式如下: CONSTRAINT P

19、RIMARY KEY 定义表约束时,即将某些列的组合定义为主键,其语法格式如下: CONSTRAINT PRIMARY KEY(,),【例1】 CREATE TABLE S(SNO CHAR(5) NOT NULL Constraint S_PRIM PRIMARY KEY,SN CHAR(8),AGE NUMERIC(2); (列级) 【例2】 CREATE TABLE SC(SNO CHAR(5) NOT NULL,CNO CHAR(5) NOT NULL,SCORE NUMERIC(3),Constraint SC_PRIM PRIMARY KEY(SNO,CNO);(表级),SQLSe

20、rver中的完整性约束定义,UNIQUE约束 用于指明基本表在某一列或多个列的组合上的取值必须唯一。 定义了UNIQUE约束的那些列称为唯一键,系统自动为唯一键建立唯一索引。唯一键允许为空,但最多只可以出现一个NULL值。 UNIQUE既可用于列约束,也可用于表约束。 一个表中可定义多个UNIQUE约束。 语法格式如下: CONSTRAINT UNIQUE CONSTRAINT UNIQUE(,),【例1】 CREATE TABLE S(SNO CHAR(6),SN CHAR(8) CONSTRAINT SN_UNIQ UNIQUE,SEX CHAR(2),AGE NUMERIC(2); (列

21、级) 【例2】 CREATE TABLE S ( SNO CHAR(5),SN CHAR(8),SEX CHAR(2), CONSTRAINT S_UNIQ UNIQUE(SN); (表级),SQLServer中的完整性约束定义,FOREIGN KEY约束 指定某一个列或一组列作为外键,其中,包含外键的表称为从表(或子表),包含外键所引用的主键或唯一键的表称主表(或父表)。 FOREIGN KEY既可用于列约束,也可用于表约束, 其语法格式为: CONSTRAINT FOREIGN KEY(,) REFERENCES (,),【例1】列级 CREATE TABLE SC(Sno CHAR(9)

22、 NOT NULL REFERENCES S(sno), Cno CHAR(4) NOT NULL, Grade SMALLINT, PRIMARY KEY(Sno, Cno) 【例2】表级 CREATE TABLE SC(Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT, PRIMARY KEY(Sno, Cno), FOREIGN KEY(Sno) REFERENCES S(Sno), FOREIGN KEY(Cno) REFERENCES C (Cno),SQLServer中的完整性约束定义,Student,Depart

23、ment,子表,父表,参照,SQLServer中的完整性约束定义,为保证Insert、Update、Delete操作时父表与子表中值的一致性(即主键与外键值的一致),通常数据库会做如下处理: NO ACTION:仅允许更改在子表没有相应外键值的父表记录。 CASCADE:父表与子表对应值均被更新或删除。 SET NULL:允许更新或删除父表中的值,子表中相应外键值置为 NULL。 SET DEFAULT:允许更新或删除父表中的值,子表中相应外键值 置为默认值。,SQLServer中的完整性约束定义,列级 SNO char(10) References S (SNO) On Delete No

24、Action On Update Cascade, . 表级 Foreign Key(SNO) References S(SNO) On Delete No Action On Update Cascade, .,SQLServer中的完整性约束定义,【例】 CREATE TABLE SC(SNO CHAR(5) REFERENCES S(SNO) ON DELETE NO ACTION ,CNO CHAR(5),SCORE NUMERIC(5,1),【例】 CREATE TABLE SC(SNO CHAR(5) ,CNO CHAR(5),SCORE NUMERIC(5,1),FOREIGN

25、KEY(SNO) REFERENCES S(SNO) ON DELETE NO ACTION),CHECK约束 用来约束字段取值所允许的范围,如,一个字段只能输 入整数,而且限定在0-100的整数,以此来保证域的完整性。 CHECK既可用于列约束,也可用于表约束, 其语法格式为: CONSTRAINT CHECK (),【例】 CREATE TABLE SC(SNO CHAR(5),CNO CHAR(5),SCORE NUMERIC(5,1) CONSTRAINT SCORE_CHK CHECK(SCORE=0 AND SCORE =100);,SQLServer中的完整性约束定义,ALTER

26、 TABLE语句: 添加约束: ALTER TABLE S ADD CONSTRAINT Sno_Pri PRIMARY KEY(sno); ALTER TABLE S ADD CONSTRAINT Age_Check CHECK(age35); ALTER TABLE SC ADD CONSTRAINT F_SNO FOREIGN KEY(SNO) REFERENCES S(SNO) 删除约束: ALTER TABLE S DROP CONSTRAINT Sno_Pri,SQLServer中的完整性约束定义,DEFAULT约束 提供字段的默认值。可用于列约束或表约束,其语法 格式分别为: C

27、ONSTRAINT DEFAULT 默认值 CONSTRAINT DEFAULT 默认值 FOR ,【例1】 CREATE TABLE SC(SNO CHAR(5),CNO CHAR(5) DEFAULT 001, SCORE NUMERIC(5,1); (列级) 【例2】 CREATE TABLE SC(SNO CHAR(5),CNO CHAR(5),SCORE NUMERIC(5,1), CONSTRAINT CNO_DEFAULT DEFAULT 001 FOR CNO); (表级),SQLServer中的完整性约束定义,【例1】建立学生登记表S,要求学号在9000099999之间,姓名

28、不能取空值,年龄小于30,性别只能是“男”或“女”。 这里我们可以定义5个完整性约束,分别是: 主码约束:StudentKey 学号取值范围约束:C1 姓名非空约束:C2 年龄取值范围约束:C3 性别取值约束:C4,CREATE TABLE S (Sno int CONSTRAINT C1 CHECK(Sno BETWEEN 90000 AND 99999), Sname Char(20) CONSTRAINT C2 NOT NULL, Sage int CONSTRAINT C3 CHECK(Sage30), Ssex Char(2) CONSTRAINT C4 CHECK(Ssex IN(

29、男, 女), CONSTRAINT StudentKey PRIMARY KEY(Sno);,示例,sno int CONSTRAINT studentkey primary key CONSTRAINT C1 Check(sno),【例2】创建教师表Teacher(Tno,Ename,Job,Salary,Deduct),要求Tno为主键,应发工资即实发工资列Salary与扣除项Deduct的差应不低于3000元。,CREATE TABLE Teacher ( Tno CHAR(4) PRIMARY KEY, Ename CHAR(10), Job CHAR(8), Salary NUMER

30、IC(7,2), Deduct NUMERIC(7,2), CONSTRAINTS C1 CHECK(Salary-Deduct=3000),示例,已知如下关系: 雇员(雇员编号,雇员名,工作编号,工资,电话) 工作(工作编号,最低工资,最高工资) 若须定义以下约束,分别写出相应SQL语句: 创建表并定义:雇员编号是雇员表的主码,工作编号是工作表的主码,雇员表中的工作编号是参照工作表中的工作编号的外码。 添加约束: 雇员表中的电话取唯一值。 雇员工资的默认值为1000。 工资表中最低工资小于最高工资。,练习,CREATE TABLE Works(Wno int PRIMARY KEY,Lsal

31、ary money,Hsalary money) CREATE TABLE Employee(Eno int Not Null PRIMARY KEY ,Ename char(10),Wno int REFERENCES Work(Wno),Salary money,Tel char(11),2. ALTER TABLE Employee ADD CONSTRAINT T_unique UNIQUE(Tel);,3. ALTER TABLE Employee ADD CONSTRAINT S_Default DEFAULT 1000 FOR Salary;,4. ALTER TABLE Wor

32、ks ADD CONSTRAINT S_Check CHECK(LsalaryHsalary);,练习答案,DBMS可以处理两类完整性约束: 非过程式(Non-Procedural)约束 Create table 或 Alter table 过程式(Procedural)约束 通过触发器实现。,当指定的表上发生特定的操作,系统便激活Trigger程序 由触发器名、激活操作(Insert,Update,Delete)和操 作的执行过程组成。,工作机理,触发器,CREATE TRIGGER ON For|After|Instead of Insert,Update,Delete As IF Upd

33、ate()AND|ORUPDATE() SQL语句,【例】:创建一个触发器,当向S表中更新一条记录时,自动显示S表中记录。 Create Trigger change_display On S After Insert,Update,Delete As Select * from S,触发器,完全性控制 完整性控制 并发控制 数据库的恢复机制,事务的基本概念,多用户对数据库系统进行并行操作时,若不进行控制可能会产生操作 冲突,破坏数据的完整性。DBMS的并发控制是以事务为单位进行的。 事务是由用户定义的一组操作序列,是一个不可分割的工作单位。 事务的特性(ACID性质): 原子性(Atomic

34、ity):事务是不可分割的工作单位,要么不做,要么全做。 一致性(Consistency):事务对数据库的作用是使数据库从一个一致状态转变到另一个一致状态。所谓一致状态是指数据库中只包含成功事务提交后的结果。 隔离性(Isolation):多个事务并发执行,应像每个事务按串行调度执行一样。即一个事务的执行不受其他事务的干扰。 持久性(Durability):一个事务成功完成后,它对数据库的改变必须是永久的,即使系统可能出现故障,DBMS也能恢复。,事务活动状态,事务的定义语句,事务开始语句: 【格式】:BEGIN TRANSACTION 事务提交语句: 【格式】:COMMIT WORK 功能:

35、表示一个事务的正常结束。该语句成功执行后,DBMS将从上一个事务结束后到该语句之间的所有SQL语句对数据库的操作保存到数据库中。 事务撤消(回滚)语句: 【格式】:ROLLBACK WORK 功能:表示一个事务的非正常结束。该语句执行后,DBMS将从上一个事务结束后到该语句之间的所有SQL语句对数据库的操作撤消掉,数据库恢复到事务执行前的状态。,事务的定义,【例】在银行应用中,将用户A账户中的1万元转移到用户B的账户上。 Begin Transaction Update Account set balance=balance-10000 where cid=A Update Account s

36、et balance=balance+10000 where cid=B Commit,无事务定义时,分步操作: Update Account set balance=balance-10000 where cid=A Update Account set balance=balance+10000 where cid=B 现假设: Update Account set balance=balance-10000 where cid=A ( 成功 ) Update Account set balance=balance+10000 where cid=B ( 失败 ) 造成经济损失!,事务调度

37、,调度是指令在系统中执行的时间顺序。一组事务的一个调度必须 包含这一组事务的全部指令,并且必须保持指令在各个事务中出 现的顺序。 【例】:R2(A)W2(A)R1(A)R1(B)R2(B)W2(B)C1C2 R2(A)R1(A)W2(A)R1(B)R2(B)C1W2(B)C2 读操作:Ri(A) 写操作Wi(B) 提交Ci 操作系统可能产生许多不同的调度,有些可能使数据库处于不一 致状态,DBMS必须保证事务调度执行后数据库总处于一致状态。 【例】 :T1和T2事务分别售票1张,正确结果是售票2张。 R1(A,100)R2(A,100)W1(A,99)W2(A,99)C1C2(仅售1张) 正确

38、调度:R1(A,100)W1(A,99)R2(A,99)W2(A,98)C1C2,T1 T2 R1(A) R2(A) R1(B) W2(A) C1 R2(B) W2(B) C2,并发控制,事务活动中,只有当一个事务完全结束,另一个事务才 开始执行,这种方式称为事务的串行执行。 事务执行中,若多个事务在时间上可以重叠执行,这种 执行方式称为事务的并发执行。 多个用户并发存取数据时,可能发生多个事务同时存取 同一数据的情况,若不加以控制,将破坏数据库中数据 的一致性。,并发控制,并发操作带来的数据不一致情况有:丢失修改、不可重复读、读“脏”数据(污读)。,丢失修改,两个事务T1和T2对同一数据进行

39、修改,并发执行时T1把T2或T2把T1修改的结果覆盖掉,造成更新的数据丢失的问题。,并发控制,读“脏”数据,一个事务读取了某个失败事务运行过程中的数据。,并发控制,不可重复读,事务T1读取数据R后,事务T2更新了R,当T1再读取R时,得到两次读取值不一致的结果。,并发调度的可串行化,并发事务的调度是随机的,不同的调度可以产生不同的结果。 所有事务的串行调度策略一定是正确的调度策略。 若多个事务在某个调度下的执行结果与这些事务在某个串行调度下 的执行结果相同,那么这个调度一定是正确的。我们把这种调度称 为可串行化的调度。 【例】: T1:读B;A=B+1;写回A。 T2:读A;B=A+1;写回B

40、。 假设A,B的初值为4,若按T1T2顺序执行,结果为A=5,B=6; 若按T2 T1顺序执行,结果为A=6,B=5。当并发调度时,只要执行结果是两者之一,则认为结果正确。,错误调度:读B;读A;A=B+1,写回A;B=A+1,写回B(A=5,B=5),【例】 T1:read(A); A:=A-5; write(A); read(B); B:=B+5; write(B).;,并发调度的可串行化,T2:read(B); B:=B-5; write(B);,执行前 A:10, B:10 调度1:串行调度T1 T2,结果A=5,B=10 调度2:串行调度T2 T1,结果A=5,B=10,并发调度的可

41、串行性,可串行化调度,A=5,B=10,并发调度的可串行性,不可串行化调度:A5,B15,并发控制-封锁,数据不一致的主要原因是并发操作并没有保证事务的隔离性。 实现并发控制的重要技术是封锁。即限制事务内和事务外对数据 的操作。 封锁环节:申请加锁、获得锁、释放锁 事务对某个数据对象进行操作前,需获得相应的锁,以保证数据 操作的正确性和一致性。 封锁类型:共享锁(S,或读锁)和排它锁(X,或写锁) 共享锁:若事务T给对象R加了S锁,那么T可以读R,但不能修改R;其它事务只能再给R加S锁,而不能加X锁,直到T释放了R上的S锁为止。 排它锁:若事务T给对象R加了X锁,则T可以读取和修改R,但其它事

42、务不能给R再加任何类型的锁和进行任何操作。,封锁,并发锁和排它锁的相容矩阵,封锁协议,在封锁时,要考虑一定的封锁规则,例如,何时开始 封锁、封锁多长时间、何时释放等,这些封锁规则称为 封锁协议。 对封锁方式规定不同的规则,就形成了不同级别的封 锁协议。不同级别的封锁协议所能达到的系统一致性 级别是不同的。 针对并发操作所带来的丢失更新、污读和不可重读等 到数据不一致性问题,可以通过三级封锁协议在不同 程度上给予解决。,封锁协议,一级封锁协议,给事务T要修改的数据R加X锁(XLOCK R),直至事务结束。可以解决丢失修改问题。,T1 T2 XLock A XLock A 读A 读A A=A-1

43、A=A-1 写回A 写回A Unlock A Unlock A,封锁协议,二级封锁协议,一级封锁协议加上事务T对要读取的数据加S(SLOCK R)锁,读完后立即释放S锁。除可以防止丢失修改外,还可防止污读。,Slock B 等待 等待 获得Slock B 读B=100 Unlock B,封锁协议,三级封锁协议,一级封锁协议加上事务T对要读取的数据加S锁,直至事务结束。可以防止丢失修改、污读和不可重复读。,封锁协议,两段锁协议(2PL),实现可串行化调度的充分条件。 所有事务必须分为两个阶段:对数据加锁和解锁。 两段锁协议具体含义: 在对任何数据进行读、写之前,首先封锁该数据。 在释放一个封锁之

44、后,事务不再申请和获得任何其 它封锁。,封锁出现的问题与解决办法,T1遵守两段锁协议,而T2没有遵守两段锁协议。,封锁出现的问题与解决办法,死锁与活锁,封锁技术可解决并行操作引起的数据不一致问题,但也可带来一些新问题,即活锁与死锁。,活锁,当某个事务请求对某数据的排他性封锁时,由于其它事务一直优先得到对该数据的封锁而使事务一直处于等待状态,这种状态形成活锁。,解决办法:采用先来先服务的方法,先申请的事务先获得数据的封锁权,封锁出现的问题与解决办法,死锁,事务T1在对数据R1封锁后,又要求对数据R2封锁,而事务T2已获得对数据R2的封锁,又要求对数据R1封锁,这样两个事务由于都不能得到封锁而处于

45、等待状态,这种状态称为死锁。,封锁出现的问题与解决办法,死锁,互斥条件,不可抢占,部分分配,循环等待,产生条件,封锁出现的问题与解决办法,数据库恢复,计算机故障原因很多,硬件故障、软件错误、人为破坏、灾害故障 等。这些情况会影响数据库数据的正确性,甚至破坏数据库,造成 数据的丢失。 系统具有检测故障并把数据从错误状态恢复到某一正确状态的功 能,这就是数据库的恢复。 数据库系统故障大致分为: 事务故障:非预期的、不正常的程序结束所造成的故障。如输入 错误、运算溢出、资源不足、死锁等。 系统故障:系统运行过程中,由于某种原因造成系统停止运转, 致使所有正在运行的事务非正常方式终止,要求系统重新启动

46、。 如CPU故障、操作系统故障、断电等。 介质故障:系统运行过程中,由于辅助存储器介质受到破坏,使 存储在外存中的数据部分或全部丢失。 其它故障:,数据库恢复,原理:数据冗余。即利用存储在系统之外的冗余数据修 复受破坏的系统或数据。 恢复系统提供功能:一是生成冗余数据;二是冗余重建。 生成冗余数据常用技术:登记日志文件和数据转储。,日志文件是用来记录事务对数据库的更新操作的文件。 主要内容:更新数据库的事务标识;操作的类型(插入、删除或修 改);操作对象;更新前数据的旧值;更新后数据的新值;事务处 理中各个关键时刻(事务开始、结束及回写时间)。 登记日志文件严格按并发事务执行的时间执行,遵循“

47、先写日志文 件,后写数据库”的原则。,数据库恢复,日志文件,数据库恢复,数据转储,数据转储是定期地将整个数据库复制到多个存储设备(磁 带或磁盘) 上保存起来的过程。 转储十分破费时间和资源,不能频繁进行。应根据实际情 况确定转储周期。 转储方式 依转储时系统状态:静态转储和动态转储 依转储方式:海量转储和增量转储,数据库恢复,事务内部故障与恢复,导致原因:输入数据错误、运算溢出、死锁等。 恢复任务:利用日志文件撤销事务对数据库的修改。 此恢复操作称为事务撤销(UNDO),具体做法: 反向扫描日志文件,查找该事务的更新操作。 对事务的更新操作执行反操作,即已插入的新记录进行删除 操作,对已删除的

48、记录进行插入操作,对修改的数据恢复旧值, 用旧值代替新值。,数据库恢复,系统故障与恢复,导致原因:硬件错误、操作系统或DBMS代码错误、断电等。 系统故障后,对数据库的影响有两种情况: 未完成事务对数据库的更新已写入数据库:重新启动后,强行撤销所有未完成事务,清除对事务所做的修改。这些未完成事务在日志文件中只有BEGIN TRANSCATION标记,而无COMMIT标记。 已提交事务对数据库的更新结果还保留在缓冲区中,尚未写到磁盘上:此时应将事务已提交的结果重做写入数据库。这类恢复操作称为事务重做(REDO)。这种己提交事务在日志文件中既有BEGIN TRANSCATION标记,也有COMMIT标记。,已提交REDO,数据库恢复,系统故障与恢复,恢复方法: 正向扫描日志文件,查找尚未提交的事务,将其事务标识记入撤销队列。同时查找已经提交的事务,将其事务标识记入重做队列。 对撤销队列中的各个事务进行撤销处理。方法同事务故障中所介绍的撤销

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论