数据库原理与应用(第二版)Chapter6课件_第1页
数据库原理与应用(第二版)Chapter6课件_第2页
数据库原理与应用(第二版)Chapter6课件_第3页
数据库原理与应用(第二版)Chapter6课件_第4页
数据库原理与应用(第二版)Chapter6课件_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

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

文档简介

第六章数据库的保护第六章数据库的保护16.1数据的安全性

数据库的安全性是指保护数据库中的数据不因用户的非法使用而造成破坏、更改和泄露机密。也就是数据库中的数据不允许受到任何的恶意侵害或未经授权的存取和修改。安全性的问题一般采用如下的处理办法:(1)用户标识和鉴定(2)存取控制(3)定义视图(4)审计

(5)数据加密有关利用SQL语句实现视图定义和存取控制内容,可参考3.5节和3.6节。6.1数据的安全性数据库的安全性是指保护数据库中的数据不26.2数据的完整性

数据库的完整性是指数据的正确性、一致性及相容性。为了维护数据的完整性,DBMS必须提供一种机制来检查数据库的数据,看其是否符合语义规定的条件。这些加在数据库数据之上的语义约束条件称为数据库完整性约束条件,它们作为模式的一部分存入数据库中。而DBMS中检查数据是否满足完整性条件的机制称为完整性检查。6.2数据的完整性数据库的完整性是指数据的正确性、一致性36.2.1完整性约束条件完整性约束条件作用的对象可以有列级、元组级和关系级三种粒度:列级的约束:主要是对其取值类型、范围、精度等的约束条件。元组的约束:是指对记录中各个字段之间的联系的约束。关系的约束:是指对若干记录间、关系之间的联系的约束。完整性约束条件涉及的以上三类对象,其状态可以是静态的,也可以是动态的:静态对象是反映数据库状态合理性的约束。动态对象的约束是反映数据状态变迁的约束。

6.2.1完整性约束条件完整性约束条件作用的对象可以有列级41.静态列级约束

静态列级约束是对一个列(字段)的取值域的说明.对数据类型的约束,包括数据的类型、长度、单位、精度等。

对取值范围或取值集合的约束。

对空值的约束:空值表示未定义或未知的值,它与零值和空格不同。2.静态元组约束静态元组约束就是规定组成一个元组的各个列之间的约束关系。例如,若一个人的职称为正教授,则其基本工资必须在1000元以上,当输入工资时,必须考虑其职称的值以确定其输入的合理性。1.静态列级约束53.静态关系约束在一个关系中的各个元组之间或若干关系之间常常存在着各种联系和约束。(1)实体完整性约束(2)参照完整性约束(3)函数依赖约束(4)统计约束:某个字段值与一个关系多个元组统计值之间的约束关系。4.动态列级约束动态列级约束是修改列定义或列值时应满足的约束条件,包括下面的几方面。(1)

修改列定义时的约束(2)

修改列值时的约束3.静态关系约束65.动态元组约束动态元组约束是指修改某个元组的值时需要参考其旧值,并且在新旧值之间需要满足某种约束条件。例如:工资调整时的规则是在原工资基础上增加原工资的10%。6.动态状态约束动态关系约束是加在关系变化前后状态上的限制条件。动态关系在实现时系统开销较大。5.动态元组约束76.2.2完整性控制

DBMS的完整性控制机制有三方面的功能:(1)定义功能,即提供定义完整性约束条件的机制。(2)检查功能,即检查用户发出的操作请求是否违背了完整性约束条件。(3)如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。6.2.2完整性控制DBMS的完整性控制机制有三方面的功8根据对检查是否违背控制机制时机可以将约束分为两类:(1)

立即执行约束:这类约束是指在招待用户事务时,对事务中的某一更新语句招待完毕后,马上对此数据进行完整性检查。(2)

延迟执行约束:这类约束是指在整个事务执行完毕后才进行完整性检查。根据对检查是否违背控制机制时机可以将约束分为两类:96.3并发控制数据库是一个共享资源,可以供多个用户使用。允许多个用户同时使用的数据库系统称为多用户数据库系统。在多用户共享系统中,如果多个事务同时对同一数据进行操作称为并发操作。若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性。所以数据库管理系统必须提供并发控制机制。6.3并发控制数据库是一个共享资源,可以供多个用户使用106.3.1并发控制概述1.事务所谓事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。事务是并发控制的基本单位,保证事务ACID特性是事务处理的重要任务,而事务ACID特性可能遭到破坏的原因之一是多个事务对数据库的并发操作造成的。6.3.1并发控制概述1.事务112.事务的ACID特性原子性(Atomicity):原子性是指事务处理是有或无的命题,一旦启动,整个事务或者提交,或者放弃。一致性(Consistency):一致性是指事务处理的所有进程都不能违背规定的商务规则。而这些商务规则规定了数据的一致性。隔离性(Isolation):隔离性是指多个事务处理之间的并发控制,即保证各个事务之间不互相影响。持久性(Durability):持久性是指一旦完成了事务处理,事务处理的结果就应该得到维持。2.事务的ACID特性123.并发操作带来的数据的不一致性问题例如,考虑飞机订票系统中的一个活动序列:①甲售票点(甲事务)读出某航班的机票余额A,设A=16;②乙售票点(乙事务)读出同一航班的机票余额A,也为16;③甲售票点卖出一张机票,修改余额AA-1,所以A为15,把A写回数据库;④乙售票点也卖出一张机票,修改余额AA-1,所以A为15,把A写回数据库;简单分析结果可知,订票系统分明卖出了两张机票,数据库中的机票余额只减少1。3.并发操作带来的数据的不一致性问题13并发操作带来的不一致性包括三类:(1)丢失修改(LostUpdata):两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失(2)不可重复读(Non-RepeatableRead):事务T1读取数据后,实务T2执行更新操作,使T1无法再现前一次读取结果(3)读“脏”数据(DirtyRead):事务T1修改某一数据,将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤消,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据为“脏”数据,即不正确数据。并发操作带来的不一致性包括三类:14封锁是实现并发控制的一个非常重要的技术。所谓封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。6.3.2封锁和封锁协议封锁是实现并发控制的一个非常重要的技术。6.3.2封锁和封15基本的封锁类型有两种:排它锁(X锁)和共享锁(S锁)

(1)排它锁:若事务T对数据对象A加X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。(2)共享锁:若事务T对数据对象A加S锁,则事务T可以读取A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。基本的封锁类型有两种:排它锁(X锁)和共享锁(S锁)16T2T1XS—XS—NNYNYYYYYY:相容请求N:不相容请求封锁类型的相容矩阵T2XS—XNNYY:相容请求封锁类型的17在运用X锁和S锁两种基本封锁对数据对象加锁,还需要约定一些规则,例如何时申请X锁或S锁、封锁时间、何时释放等。称这些规则为封锁协议(LockingProtocol)。对封锁方式规定不同的规则,就形成了各种不同的封锁协议。(1)一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。一级封锁协议可防止丢失修改,并保证事务T是可恢复的。

在运用X锁和S锁两种基本封锁对数据对象加锁,还需要约定一些规18(2)二级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。二级封锁协议除防止了丢失修改,还可以进一步防止读“脏”数据。(3)三级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。三级封锁协议除防止了丢失修改和不读“脏”数据外,还进一步防止了不可重复读。(2)二级封锁协议:一级封锁协议加上事务T在读取数据R之前19

X锁S锁一致性保证

操作结束释放事务结束释放操作结束释放事务结束释放不丢失修改不读“脏”数据可重复读一级封锁协议

二级封锁协议

√√

√√

三级封锁协议

√√√√不同级别的封锁协议

X锁S锁一致性保证

操作结束释放事务结束释放操作结束释放事201.活锁

如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。然后T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求……T2有可能永远等待,这就是活锁的情形。避免活锁的简单方法是采用先来先服务的策略,当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第1个事务获得锁。6.3.3活锁和死锁

1.活锁6.3.3活锁和死锁212.死锁

如果事务T1封锁了数据R1,T2封锁了数据R2,然后T1又请求封锁R2,因T2已封锁了R2,于是T1等待T2释放R2上的锁。接着T2又申请封锁R1,因T1已封锁了R1,T2也只能等待T1释放R1上的锁。这样就出现了T1在等待,而T2又在等待T1的局面,T1和T2两个事务永远不能结束,形成死锁。

在数据库中解决死锁问题主要有两类方法,一类方法是采取一定措施来预防死锁的发生,另一类方法是允许发生死锁,采用一定手段定期诊断系统中有无死锁,若有则解除之。2.死锁22(1)死锁的预防

一次封锁法:要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。(2)死锁的诊断与解除

超时法:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁等待图法:等待图是一个有向图,并发控制子系统周期性地检测事务等待图,如果发现图中存在回路,则表示系统中出现了死锁。(1)死锁的预防23定义多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们的结果相同,我们称这种调度策略为可串行化(Serializable)的调度。可串行性(Serializability)是并发事务正确性的准则。按这个准则规定,一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。为了保证并发操作的正确性,DBMS的并发控制机制必须提供一定的手段来保证调度是可串行化的。两段锁(Two-PhaseLocking,简称2PL)协议就是保证并发调度可串行性的封锁协议。6.3.4并发调度的可串行性定义多个事务的并发执行是正确的,当且仅当其结果与按某一次序24两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。①在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁。这一阶段也称为扩展阶段。②在释放一个封锁之后,事务不再申请和获得任何其他封锁。这一阶段称为收缩阶段。事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。6.3.5两段锁协议两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。6.25封锁对象的大小称为封锁粒度(Granularity)。封锁对象可以是逻辑单元,也可以是物理单元。以关系数据库为例,封锁对象可以是属性值、属性值的集合、元组、关系、索引项、整个索引直至整个数据库;也可以是这样一些物理单元:页(数据页或索引页)、块等。封锁的粒度越大,数据库所能够封锁的数据单元就越少,并发度就越小,系统开销也越小;反之,封锁的粒度越小,并发度较高,但系统开销也就越大。6.3.6封锁的粒度

封锁对象的大小称为封锁粒度(Granularity)。封锁对261.多粒度封锁多粒度树的根结点是整个数据库,表示最大的数据粒度。叶结点表示最小的数据粒度。多粒度封锁协议允许多粒度树中的每个结点被独立地加锁。对一个结点意味着这个结点的所有后裔结点也被加以同样类型的锁。在多粒度封锁中一个数据对象可能以两种方式封锁:显式封锁和隐式封锁。1.多粒度封锁272.意向锁

如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任一结点加锁时,必须先对它的上层结点加意向锁。有三种常用的意向锁:(1)意向共享锁(IS锁):如果对一个数据对象加IS锁,表示它的后裔结点拟(意向)加S锁。(2)意向排它锁(IX锁):如果对一个数据对象加IX锁,表示它的后裔结点拟(意向)加X锁。(3)共享意向排它锁:如果对一个数据对象加SIX锁,表示对它先加S锁,再加IX锁,即SIX=S+IX。例如对某个表加SIX锁,则表示该事务要读整个表(所以要对该表加S锁),同时会更新个别元组(所以要对该表加IX锁)。2.意向锁286.4备份与恢复

为了保证各种故障发生后,数据库中的数据能从一种错误状态恢复到某种逻辑一致的状态,数据库系统必须提供恢复功能。6.4.1恢复的原理数据库运行过程中,可能发生的故障主要有三类,不同的故障其恢复的方法也不一样。6.4备份与恢复为了保证各种故障发生后,数据库中的数据能29事务故障:事务在运行过程中由于种种原因,使事务未运行至正常终止点而被迫停止,这种情况称为事务故障。系统故障:是指系统在运行时,由于某种原因,致使所有正在运行的事务都以非正常方式停止。这时内存中的数据缓冲区的信息全部丢失,但存储在外部存储器上的数据未受影响。介质故障:系统在运行中,由于硬件故障,使存储在外存中的数据部分丢失或全部丢失。

事务故障:事务在运行过程中由于种种原因,使事务未运行至正常306.4.2恢复的实现技术数据转储转储是指DBA将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。重装后备副本只能将数据恢复到转储时的状态,要想恢复到故障发生时的状态,必须重新运行自转储以后的所有更新事务。2.登录日志(logging)文件日志文件是用来记录事务对数据库的更新操作的文件。

登录日志文件遵循两条原则:(1)登录的次序严格按并行事务执行的时间次序。(2)必须先写日志文件,后写数据库文件。6.4.2恢复的实现技术数据转储316.4.3恢复策略1.事务故障的恢复发生事务故障时,恢复程序应撤销(UNDO)此事务已对数据库进行的修改,做法如下:①反向扫描文件日志(即从后向前扫描日志文件),查找事务的更新操作。②对该事务的更新操作执行逆操作③继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。④如此处理下去,直到读到此事务开始标记,事务故障恢复完毕。6.4.3恢复策略1.事务故障的恢复322.系统故障的恢复①正向扫描文件日志,找出故障发生前已经提交的事务,将其事务标记为重做队列。同时还要找出故障发生时尚未完成的事务,将其标记入撤销队列。

②对撤销队列中的各个事务进行撤销(UNDO)处理,即反向扫描日志文件,对每一个UNDO事务的更新操作执行逆操作。

③对重做队列中的各个事务进行重做(REDO)处理,即正向扫描日志文件,对每一个REDO事务的更新执行操作

2.系统故障的恢复333.介质故障的恢复

发生介质故障后,磁盘上的物理数据和日志文件被破坏。恢复方法是重装数据库,然后重做已完成的事务。具体做法如下:①装入最新的后备数据库副本,使数据库恢复到最近一次转储时的一致性状态。②装入有关的日志文件副本,重做已完成的事务。3.介质故障的恢复346.5SQLServer的保护技术

6.5.1安全性

SQLServer的安全模型中包括以下几部分:①SQLServer登录认证②数据库用户账号管理③权限管理④角色管理6.5SQLServer的保护技术6.5.1安全性351.SQLServer登录认证

(1)Windows认证模式

(2)SQLServer认证模式

(3)混合认证模式

2.用户账号管理

创建新数据库用户账号3.权限管理

(1)对象权限(2)语句权限4.角色管理

(1)服务器角色(2)数据库角色1.SQLServer登录认证366.5.2数据库完整性1.SQLServer完整性概述

(1)实体完整性:把数据表中每条记录看作一个实体,要求所有的记录都有唯一的标识,即主键。表中定义的UNIQUE、PRIMARYKEY和IDENTITY约束就是实体完整性的体现。(2)域完整性:指数据库表中的列必须满足某种特定的数据类型或约束。其中约束又包括取值范围、精度等规定。表中的CHECK、FOREIGNKEY约束和DEFAULT、NOTNULL定义都属于域完整性的范畴。6.5.2数据库完整性1.SQLServer完整性概述37(3)参照完整性:指两个表的主关键字和外关键字的数据应对应一致,它是建立在外关键字和主关键字之间或外关键字和惟一性关键字之间的关系上。(4)用户定义的完整性:用户定义的完整性即是针对某个特定关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。(3)参照完整性:指两个表的主关键字和外关键字的数据应对应382.约束

约束是自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件。

(1)主关键字约束:指定表的一列或几列的组合的值在表中具有惟一性。(2)外关键字约束:当一个表中的一个列或多个列的组合和其它表中的主关键字定义相同时,就可以将这些列或列的组合定义为外关键字。2.约束39(3)惟一性约束:指定一个或多个列的组合的值具有惟一性,以防止在列中输入重复的值。(4)检查约束:对输入列或整个表中的值设置检查条件,以限制输入值保证数据库的数据完整性。(5)缺省约束:通过定义列的缺省值或使用数据库的缺省值对象绑定表的列,来指定列的缺省值。(3)惟一性约束:指定一个或多个列的组合的值具有惟一性,以403.规则规则就是数据库中对存储在表的列或用户自定义数据类型中的值的规定和限制。可以用CREATERULE命令创建规则,用DROPRULE命令删除规则。创建规则后,规则仅仅只是一个存在于数据库中的对象,并未发生作用。因此需要将规则与数据库表或用户自定义对象联系起来,从而达到创建规则的目的。这个过程叫做“绑定”。存储过程Sp_bindrule可以绑定一个规则到表的一个列或一个用户自定义数据类型上。3.规则414.缺省值

缺省值是往用户输入记录时没有指定具体数据的列中自动插入的数据。可以利用CREATEDEFAULT和DROPDEFAULT命令创建和删除缺省值。同规则一样,需要将缺省值与数据库表或用户自定义对象绑定。存储过程Sp_bindefault可以绑定一个缺省值到表的一个列或一个用户自定义数据类型上。4.缺省值426.5.3并发控制事务

在程序中用BEGINTRANSACTION

命令来标识一个事务的开始,用COMMITTRANSACTION

命令标识事务结束。2.事务回滚

事务回滚是指当事务中的某一语句执行失败时,将对数据库的操作恢复到事务执行前或某个指定位置。可以用ROLLBACKTRANSACTION命令回滚事务。6.5.3并发控制事务433.锁

SQLServer中可以对以下的对象进行锁定:①数据行(Row):数据页中的单行数据;②索引行(Key):索引页中的单行数据,即索引的键值;③页(Page):页是SQLServer存取数据的基本单位,其大小为8KB;④盘区(Extent):一个盘区由8个连续的页组成;⑤表(Table);⑥数据库(Database);3.锁446.5.4备份与恢复

1.

备份的类型

双机热备份

双工备份

磁盘镜像

数据库备份技术

2.日志的概念3.备份或转储4.SQLServer的备份类型全备份增量备份表(Table)备份6.5.4备份与恢复1.备份的类型455.动态备份和静态备份

动态备份:在做备份时不中断数据库的运行,不中断数据库上的应用程序和事务处理。静态备份是在做备份时没有任何数据库事务在运行,这种备份方式应是首选的备份方式。6.恢复恢复也称为重载或重入,是指当磁盘损坏或数据库崩溃时,通过转储或卸载的备份重新安装数据库的过程。7.镜像镜像的实质也是备份,即在同一时刻保存数据的两个或多个副本。镜像与转储有本质的不同,转储是定期或不定期的,是间断和非实时的;而镜像是连续或实时的。5.动态备份和静态备份468.SQLServer的镜像配置选择

(1)基本镜像配置:将用户数据库的事务日志设备和master设备镜像在另外一个独立的硬盘上;(2)标准镜像配置:将用户数据库设备、事务日志设备和master设备镜像在另外一个独立的硬盘上。8.SQLServer的镜像配置选择47第六章数据库的保护第六章数据库的保护486.1数据的安全性

数据库的安全性是指保护数据库中的数据不因用户的非法使用而造成破坏、更改和泄露机密。也就是数据库中的数据不允许受到任何的恶意侵害或未经授权的存取和修改。安全性的问题一般采用如下的处理办法:(1)用户标识和鉴定(2)存取控制(3)定义视图(4)审计

(5)数据加密有关利用SQL语句实现视图定义和存取控制内容,可参考3.5节和3.6节。6.1数据的安全性数据库的安全性是指保护数据库中的数据不496.2数据的完整性

数据库的完整性是指数据的正确性、一致性及相容性。为了维护数据的完整性,DBMS必须提供一种机制来检查数据库的数据,看其是否符合语义规定的条件。这些加在数据库数据之上的语义约束条件称为数据库完整性约束条件,它们作为模式的一部分存入数据库中。而DBMS中检查数据是否满足完整性条件的机制称为完整性检查。6.2数据的完整性数据库的完整性是指数据的正确性、一致性506.2.1完整性约束条件完整性约束条件作用的对象可以有列级、元组级和关系级三种粒度:列级的约束:主要是对其取值类型、范围、精度等的约束条件。元组的约束:是指对记录中各个字段之间的联系的约束。关系的约束:是指对若干记录间、关系之间的联系的约束。完整性约束条件涉及的以上三类对象,其状态可以是静态的,也可以是动态的:静态对象是反映数据库状态合理性的约束。动态对象的约束是反映数据状态变迁的约束。

6.2.1完整性约束条件完整性约束条件作用的对象可以有列级511.静态列级约束

静态列级约束是对一个列(字段)的取值域的说明.对数据类型的约束,包括数据的类型、长度、单位、精度等。

对取值范围或取值集合的约束。

对空值的约束:空值表示未定义或未知的值,它与零值和空格不同。2.静态元组约束静态元组约束就是规定组成一个元组的各个列之间的约束关系。例如,若一个人的职称为正教授,则其基本工资必须在1000元以上,当输入工资时,必须考虑其职称的值以确定其输入的合理性。1.静态列级约束523.静态关系约束在一个关系中的各个元组之间或若干关系之间常常存在着各种联系和约束。(1)实体完整性约束(2)参照完整性约束(3)函数依赖约束(4)统计约束:某个字段值与一个关系多个元组统计值之间的约束关系。4.动态列级约束动态列级约束是修改列定义或列值时应满足的约束条件,包括下面的几方面。(1)

修改列定义时的约束(2)

修改列值时的约束3.静态关系约束535.动态元组约束动态元组约束是指修改某个元组的值时需要参考其旧值,并且在新旧值之间需要满足某种约束条件。例如:工资调整时的规则是在原工资基础上增加原工资的10%。6.动态状态约束动态关系约束是加在关系变化前后状态上的限制条件。动态关系在实现时系统开销较大。5.动态元组约束546.2.2完整性控制

DBMS的完整性控制机制有三方面的功能:(1)定义功能,即提供定义完整性约束条件的机制。(2)检查功能,即检查用户发出的操作请求是否违背了完整性约束条件。(3)如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。6.2.2完整性控制DBMS的完整性控制机制有三方面的功55根据对检查是否违背控制机制时机可以将约束分为两类:(1)

立即执行约束:这类约束是指在招待用户事务时,对事务中的某一更新语句招待完毕后,马上对此数据进行完整性检查。(2)

延迟执行约束:这类约束是指在整个事务执行完毕后才进行完整性检查。根据对检查是否违背控制机制时机可以将约束分为两类:566.3并发控制数据库是一个共享资源,可以供多个用户使用。允许多个用户同时使用的数据库系统称为多用户数据库系统。在多用户共享系统中,如果多个事务同时对同一数据进行操作称为并发操作。若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性。所以数据库管理系统必须提供并发控制机制。6.3并发控制数据库是一个共享资源,可以供多个用户使用576.3.1并发控制概述1.事务所谓事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。事务是并发控制的基本单位,保证事务ACID特性是事务处理的重要任务,而事务ACID特性可能遭到破坏的原因之一是多个事务对数据库的并发操作造成的。6.3.1并发控制概述1.事务582.事务的ACID特性原子性(Atomicity):原子性是指事务处理是有或无的命题,一旦启动,整个事务或者提交,或者放弃。一致性(Consistency):一致性是指事务处理的所有进程都不能违背规定的商务规则。而这些商务规则规定了数据的一致性。隔离性(Isolation):隔离性是指多个事务处理之间的并发控制,即保证各个事务之间不互相影响。持久性(Durability):持久性是指一旦完成了事务处理,事务处理的结果就应该得到维持。2.事务的ACID特性593.并发操作带来的数据的不一致性问题例如,考虑飞机订票系统中的一个活动序列:①甲售票点(甲事务)读出某航班的机票余额A,设A=16;②乙售票点(乙事务)读出同一航班的机票余额A,也为16;③甲售票点卖出一张机票,修改余额AA-1,所以A为15,把A写回数据库;④乙售票点也卖出一张机票,修改余额AA-1,所以A为15,把A写回数据库;简单分析结果可知,订票系统分明卖出了两张机票,数据库中的机票余额只减少1。3.并发操作带来的数据的不一致性问题60并发操作带来的不一致性包括三类:(1)丢失修改(LostUpdata):两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失(2)不可重复读(Non-RepeatableRead):事务T1读取数据后,实务T2执行更新操作,使T1无法再现前一次读取结果(3)读“脏”数据(DirtyRead):事务T1修改某一数据,将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤消,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据为“脏”数据,即不正确数据。并发操作带来的不一致性包括三类:61封锁是实现并发控制的一个非常重要的技术。所谓封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。6.3.2封锁和封锁协议封锁是实现并发控制的一个非常重要的技术。6.3.2封锁和封62基本的封锁类型有两种:排它锁(X锁)和共享锁(S锁)

(1)排它锁:若事务T对数据对象A加X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。(2)共享锁:若事务T对数据对象A加S锁,则事务T可以读取A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。基本的封锁类型有两种:排它锁(X锁)和共享锁(S锁)63T2T1XS—XS—NNYNYYYYYY:相容请求N:不相容请求封锁类型的相容矩阵T2XS—XNNYY:相容请求封锁类型的64在运用X锁和S锁两种基本封锁对数据对象加锁,还需要约定一些规则,例如何时申请X锁或S锁、封锁时间、何时释放等。称这些规则为封锁协议(LockingProtocol)。对封锁方式规定不同的规则,就形成了各种不同的封锁协议。(1)一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。一级封锁协议可防止丢失修改,并保证事务T是可恢复的。

在运用X锁和S锁两种基本封锁对数据对象加锁,还需要约定一些规65(2)二级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。二级封锁协议除防止了丢失修改,还可以进一步防止读“脏”数据。(3)三级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。三级封锁协议除防止了丢失修改和不读“脏”数据外,还进一步防止了不可重复读。(2)二级封锁协议:一级封锁协议加上事务T在读取数据R之前66

X锁S锁一致性保证

操作结束释放事务结束释放操作结束释放事务结束释放不丢失修改不读“脏”数据可重复读一级封锁协议

二级封锁协议

√√

√√

三级封锁协议

√√√√不同级别的封锁协议

X锁S锁一致性保证

操作结束释放事务结束释放操作结束释放事671.活锁

如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。然后T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求……T2有可能永远等待,这就是活锁的情形。避免活锁的简单方法是采用先来先服务的策略,当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第1个事务获得锁。6.3.3活锁和死锁

1.活锁6.3.3活锁和死锁682.死锁

如果事务T1封锁了数据R1,T2封锁了数据R2,然后T1又请求封锁R2,因T2已封锁了R2,于是T1等待T2释放R2上的锁。接着T2又申请封锁R1,因T1已封锁了R1,T2也只能等待T1释放R1上的锁。这样就出现了T1在等待,而T2又在等待T1的局面,T1和T2两个事务永远不能结束,形成死锁。

在数据库中解决死锁问题主要有两类方法,一类方法是采取一定措施来预防死锁的发生,另一类方法是允许发生死锁,采用一定手段定期诊断系统中有无死锁,若有则解除之。2.死锁69(1)死锁的预防

一次封锁法:要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。(2)死锁的诊断与解除

超时法:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁等待图法:等待图是一个有向图,并发控制子系统周期性地检测事务等待图,如果发现图中存在回路,则表示系统中出现了死锁。(1)死锁的预防70定义多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们的结果相同,我们称这种调度策略为可串行化(Serializable)的调度。可串行性(Serializability)是并发事务正确性的准则。按这个准则规定,一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。为了保证并发操作的正确性,DBMS的并发控制机制必须提供一定的手段来保证调度是可串行化的。两段锁(Two-PhaseLocking,简称2PL)协议就是保证并发调度可串行性的封锁协议。6.3.4并发调度的可串行性定义多个事务的并发执行是正确的,当且仅当其结果与按某一次序71两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。①在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁。这一阶段也称为扩展阶段。②在释放一个封锁之后,事务不再申请和获得任何其他封锁。这一阶段称为收缩阶段。事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。6.3.5两段锁协议两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。6.72封锁对象的大小称为封锁粒度(Granularity)。封锁对象可以是逻辑单元,也可以是物理单元。以关系数据库为例,封锁对象可以是属性值、属性值的集合、元组、关系、索引项、整个索引直至整个数据库;也可以是这样一些物理单元:页(数据页或索引页)、块等。封锁的粒度越大,数据库所能够封锁的数据单元就越少,并发度就越小,系统开销也越小;反之,封锁的粒度越小,并发度较高,但系统开销也就越大。6.3.6封锁的粒度

封锁对象的大小称为封锁粒度(Granularity)。封锁对731.多粒度封锁多粒度树的根结点是整个数据库,表示最大的数据粒度。叶结点表示最小的数据粒度。多粒度封锁协议允许多粒度树中的每个结点被独立地加锁。对一个结点意味着这个结点的所有后裔结点也被加以同样类型的锁。在多粒度封锁中一个数据对象可能以两种方式封锁:显式封锁和隐式封锁。1.多粒度封锁742.意向锁

如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任一结点加锁时,必须先对它的上层结点加意向锁。有三种常用的意向锁:(1)意向共享锁(IS锁):如果对一个数据对象加IS锁,表示它的后裔结点拟(意向)加S锁。(2)意向排它锁(IX锁):如果对一个数据对象加IX锁,表示它的后裔结点拟(意向)加X锁。(3)共享意向排它锁:如果对一个数据对象加SIX锁,表示对它先加S锁,再加IX锁,即SIX=S+IX。例如对某个表加SIX锁,则表示该事务要读整个表(所以要对该表加S锁),同时会更新个别元组(所以要对该表加IX锁)。2.意向锁756.4备份与恢复

为了保证各种故障发生后,数据库中的数据能从一种错误状态恢复到某种逻辑一致的状态,数据库系统必须提供恢复功能。6.4.1恢复的原理数据库运行过程中,可能发生的故障主要有三类,不同的故障其恢复的方法也不一样。6.4备份与恢复为了保证各种故障发生后,数据库中的数据能76事务故障:事务在运行过程中由于种种原因,使事务未运行至正常终止点而被迫停止,这种情况称为事务故障。系统故障:是指系统在运行时,由于某种原因,致使所有正在运行的事务都以非正常方式停止。这时内存中的数据缓冲区的信息全部丢失,但存储在外部存储器上的数据未受影响。介质故障:系统在运行中,由于硬件故障,使存储在外存中的数据部分丢失或全部丢失。

事务故障:事务在运行过程中由于种种原因,使事务未运行至正常776.4.2恢复的实现技术数据转储转储是指DBA将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。重装后备副本只能将数据恢复到转储时的状态,要想恢复到故障发生时的状态,必须重新运行自转储以后的所有更新事务。2.登录日志(logging)文件日志文件是用来记录事务对数据库的更新操作的文件。

登录日志文件遵循两条原则:(1)登录的次序严格按并行事务执行的时间次序。(2)必须先写日志文件,后写数据库文件。6.4.2恢复的实现技术数据转储786.4.3恢复策略1.事务故障的恢复发生事务故障时,恢复程序应撤销(UNDO)此事务已对数据库进行的修改,做法如下:①反向扫描文件日志(即从后向前扫描日志文件),查找事务的更新操作。②对该事务的更新操作执行逆操作③继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。④如此处理下去,直到读到此事务开始标记,事务故障恢复完毕。6.4.3恢复策略1.事务故障的恢复792.系统故障的恢复①正向扫描文件日志,找出故障发生前已经提交的事务,将其事务标记为重做队列。同时还要找出故障发生时尚未完成的事务,将其标记入撤销队列。

②对撤销队列中的各个事务进行撤销(UNDO)处理,即反向扫描日志文件,对每一个UNDO事务的更新操作执行逆操作。

③对重做队列中的各个事务进行重做(REDO)处理,即正向扫描日志文件,对每一个REDO事务的更新执行操作

2.系统故障的恢复803.介质故障的恢复

发生介质故障后,磁盘上的物理数据和日志文件被破坏。恢复方法是重装数据库,然后重做已完成的事务。具体做法如下:①装入最新的后备数据库副本,使数据库恢复到最近一次转储时的一致性状态。②装入有关的日志文件副本,重做已完成的事务。3.介质故障的恢复816.5SQLServer的保护技术

6.5.1安全性

SQLServer的安全模型中包括以下几部分:①SQLServer登录认证②数据库用户账号管理③权限管理④角色管理6.5SQLServer的保护技术6.5.1安全性821.SQLServer登录认证

(1)Windows认证模式

(2)SQLServer认证模式

(3)混合认证模式

2.用户账号管理

创建新数据库用户账号3.权限管理

(1)对象权限(2)语句权限4.角色管理

(1)服务器角色(2)数据库角色1.SQLServer登录认证836.5.2数据库完整性1.SQLServer完整性概述

(1)实体完整性:把数据表中每条记录看作一个实体,要求所有的记录都有唯一的标识,即主键。表中定义的UNIQUE、PRIMARYKEY和IDENTITY约束就是实体完整性的体现。(2)域完整性:指数据库表中的列必须满足某种特定的数据类型或约束。其中约束又包括取值范围、精度等规定。表中的

温馨提示

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

评论

0/150

提交评论