ch数据库保护实用PPT课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第28页/共96页
1、X封锁和PX协议
• X封锁:事务T对数据对象R加上X锁,则其它事务对R的任何封锁请求都不能成功,直至T释放R上的X锁。 • PX协议:任何企图更新记录R的事务必须先执行LOCK X( R),以获得对它的寻址能力,并对它取得X封锁。
第29页/共96页
举例:
时间
更新事务T1
数据库中A的值
• 系统重新启动时,数据库处于一种非一致性状态
第12页/共96页
7.1.3 故障类型和恢复方法
• (3)介质故障 • 外存发生故障,导致存储其中的数据、或数据库本身、或DBMS软件处于不正常状态
• 这类故障的破坏性较大 • 计算机病毒
• 破坏DBMS软件环境 • 破坏OS环境 • 导致数据库系统无法正常工作
4 write(A)
5
40
6 ROLLBACK
7
50
读事务T4
read(A)
数据库中A的值被恢复为50,事务T4读出的A的值为40,未提交随后又被撤 销的数据称为“脏数据”。
第25页/共96页
• 并发控制需要靠数据库的并发控制子系统来解决。如
时间 1 2 3 4 5 6 7 8
更新事务T1 read(A) A:=A-1 write(A)
第14页/共96页
(1)定期对整个数据库进行复制和转储
• 转储可以分为:
• 静态转储:在存储期间不允许对数据库进行存 取、修改。
• 动态转储:在存储期间允许对数据库进行存取、 修改。
• 转储还可以分为:
• 海量存储:每次存储全部数据库
• 增量存储:每次只存储上次转储后更新过的数
据。
第15页/共96页
第9页/共96页
7.1.3 故障类型和恢复方法
• 在运行数据库系统时,可能会出现各种各样的故障。发生故障时,可能丢失数据库中的数据。DBMS的恢 复管理子系统采取一系列措施,保证在任何情况下保持事务的原子性和持久性,确保数据不被损坏。
• 1、数据库系统中可能发生的故障
第10页/共96页
7.1.3 故障类型和恢复方法
由DBMS的事务管理子系统完成。
第3页/共96页
事务的性质——一致性
• 独立运行的事务,必须保证保持数据库的一致状态 • 即数据不会因为事务的执行而遭到破坏。
数据库的一致性状态由编写事务程序的程序员来负责,也可以由系统测试完整性约束自动完成。 由DBMS的完整性子系统完成。
第4页/共96页
事务的性质——隔离性
• 重新安装DBMS • Reload数据库副本(先前被转储的数据库) • 用日志文件执行REDO操作,不丢失对数据库的更新。 • 需DBA人工处理
第17页/共96页
数据库恢复技术——恢复
• 数据库本身未被破坏,但有些数据不可靠 • 系统重启,扫描日志文件(耗时) • 根据日志,作Undo:对更新的操作执行反向操作 • 系统自动完成
7.1.1事务的概念
• 事务定义
• 事务是由一系列操作序列构成的程序执行单元。这些 操作要么都做,要么都不做,是一个不可分割的工作 单位。 例如银行转帐。
• SQL中事务的定义
事务以Begin transaction开始,以Commit work或 Rollback work结束。 Commit work表示提交,事务正常结束。 Rollback work表示事务非正常结束,撤消事务已做 的操作,回滚到事务开始时状态。
第27页/共96页
7.2.2 排它型锁(X封锁)
• 封锁的类型 • 排它锁(X锁,eXclusive lock):事务T对数据对象R加上X锁,则其它事务对R的任何封锁请求都不 能成功,直至T释放R上的X锁。 • 共享锁(S锁,Share lock):事务T对数据对象R加上S锁,则其它事务对R的X锁请求不能成功,而 对R的S锁请求可以成功。
• 提高处理器、磁盘的利用率 • 减少等待时间
• 多个事务并发运行,由事务管理器进行调度 • 可串行化调度
• 并发运行的结果,与事务按某一顺序串行运行的结果等同 举例:图7.2中
第32页/共96页
3、由事务的ROLLBACK引起的丢失更新问
题 时间 1
更新事务T1
数据库中A的值 50
更新事务T2
2
LOCK X(A)
3
read(A)
4
A:=A-10
5
write(A)
6
UNLOCK(A)
40
7
LOCK X(A)
8
read(A)
9
A:=A*2
10
write(A)
11
80
UNLOCK(A)
12
COMMIT
13
ROLLBACK
14
50
第33页/共96页
• 上图中的情况不可原谅,因为此时数据库中A的值是错的。为了避免数据库恢复 时丢失更新,就不应该允许事务去使用一个未提交的修改。
7.2.2 排它型锁(X封锁)
• 对于删除操作,PX协议同样适用。要删除一个记录,首先也要执行LOCK(X)操作和read操作后才能删除。 • 对于插入操作,就不需要读记录,因此,可以假定“INSERT T”本包含了对新插入记录R的X封锁。
第31页/共96页
2、并发事务的可串行化
• 多个事务可能同时(交叉地)在系统中运行
数据库中A的值 50
40 100
更新事务T2
read(A) A:=A*2 write(A)
1、在第3步避免T2执行read,因为T1已经读了A的值,将要进行更新。 2、应避免T1执行write,因为T2已经在使用A值。 3、应避免T2执行write,因为T1已写了新的A值,事务T2的写操作将把T1 的写操作冲掉。
1
50
2
read(A)
3
4 A:=A-10
5 write(A)
6
40
读事务T3
read(A)
在第6步时,由于T1已更新了A的值,此时T3使用的A值仍为 50,因此造成了不一致。即读了过时的数据。
第24页/共96页
3、“脏数据”的读出
时间 更新事务T1 数据库中A的值
1
50
2
read(A)
3 A:=A-10
• PXC协议由PX协议和下面一条规则组成: • “X封锁必须保留到事务终点(COMMIT ROLLBACK)”
第34页/共96页
7.2.3 活锁与死锁
• 当多个事务请求封锁同一数据对象时,有可能出现锁的异常 • 活锁
• 多个事务申请对数据R加锁,而系统随机地加锁,导致某些事务长等 • 活锁策略
• 设定系统按事务申请锁的时间顺序进行排队
7.1.4 恢复的基本原则和实现方法
• (2)、建立日志文件 • 以日志文件的形式,记录事务对数据库的更新操
作 • 日志文件记录了数据库更新的所有日志记录的序
列 • 常见的是以记录为单位的日志文件 • 利用日志记录,可对数据库做相应的恢复
第16页/共96页
7.1.4 恢复的基本原则和实现方法
• (3)恢复 • 数据库本身(或DBMS)被破坏
第1页/共96页
7.1.2 事务的性质
事务的性质——ACID
• 原子性(Atomicity) • 一致性(Consistency) • 隔离性(Isolation) • 持久性(Durability)
第2页/共96页
事务的性质——原子性
• 事务中的操作,要么全做成,要么都不做 • 事务是不可拆分的 • 事务必须以 Commit/Rollback 结束
• 系统必须保证事务不受其它并发执行事务的影响。 • 多个并发事务之间不能相互干扰 • 并发不影响事务的执行
隔离性通过并发控制子系统实现。
第5页/共96页
事务的性质——持久性
• 一旦事务成功完成(Commit),它对数据库的更新应该是持久的 • 即使在写入磁盘之前,系统发生故障 • 在下次启动之后,也应保障数据更新的有效 持久性通过恢复管理子系统实现。
第26页/共96页
7.2.2 排它型锁(X封锁) • 封锁就是一个事务对某个数据对象加锁,取得对它一定的控制,限制 其它事务对该数据对象使用。 • 并发控制的基本方法就是封锁。
• 数据的互斥访问
• 当某事务访问某数据项时,其他任何事务均不得修改该数据项 • 对访问的数据项加锁
• 不同的加锁方式,产生不同的隔离层次,导致不同的一致性结 果,获得不同的并发度
第22页/共96页
1、丢失更新问题
时间 更新事务T1
1
2
read(A)
3
4 A:=A-1
5
6 write(A)
7
8
数据库中A的值
50
40 100
更新事务T2
read(A)
A:=A*2 write(A)
A值100,错误,第8步丢失了T1对数据库的更新操作。
第23页/共96页
2、不一致分析问题
时间 更新事务T1 数据库中A的值
更新事务T2
1
50
2
LOCK X(A)LOCK X(A)
5
A:=A-10
wait
6
write(A)
wait
7
40
wait
8
UNLOCK(A)
wait
9
(重做)LOCK X(A)
10
read(A)
11
A:=A*2
12
write(A)
13
80
UNLOCK(A)
利用PX协议,执行T1和T2。事务T1先对A封锁,写回新的A值后, T1执行解除封锁操作,并对A进第行30修页改/共。96这页 个过程能得到正确结果。
第6页/共96页
7.1.2 事务的性质
对数据库的访问是建立在读和写两个操作的基础上。 read(X):从数据库传送数据项X到事务的工作区中。 write(X):从事务的工作区中将数据项X写回数据库。
第7页/共96页
7.1.2 事务的性质 • 举例: 银行转帐:事务Ti从帐户A过户100¥到帐户B 。 T: read(A); A := A – 100; write(A); read(B); B := B + 100; write(B);
第35页/共96页
7.2.3 活锁与死锁
第36页/共96页
7.2.3 活锁与死锁
• 死锁 • 两个(或多个)事务互相申请对方加锁 对象的排它锁,造成循环等待
R2
T1
T2
R1
第37页/共96页
7.2.3 活锁与死锁
第21页/共96页
• 数据库是一7个.共2.享1资数源据,可库以的由并多个发用操户作使带用。来的问 题
• 这些用户程序可以一个一个的串行执行,每一时刻只有一个用 户程序运行,执行对数据库的存取。其他程序必须等到这个用 户程序结束后才能对数据库存取。
• 在多用户共享系统中,如果多个用户同时对同一数据进行操作 称为并发操作。可能会互相干扰,破坏了事务的隔离性。
时做好两件事情:( )和(
)
• 2、后备副本的主要作用是( )
• 3、日1、志备文份和件日志用于保存(
)
2、故障恢复
3、对数据库的更新操作
第20页/共96页
7.1.6 SQL中的恢复操作
• ORACLE中的实现方法: • COMMIT WORK [RELEASE] • ROLLBACK WORK [RELEASE] • SET AUTOCOMMIT {[IMMEDIATE|ON|OFF]}
read(X):从数据库传送数据项X到事务的工作区中。 write(X):从事务的工作区中将数据项X写回数据库。
第8页/共96页
练习:
• 1、DMBS的并发控制子系统,保证了事务

)的实现。
• 2、事务的独立执行不会破坏DB的完整性,
称为(

• 3、DBMS中实现事务持久性的子系统是:
•( ) 1、隔离性 2、事务的一致性。 3、恢复管理子系统。
x封锁必须保留到事务终点commitrollback第34页共96页设定系统按事务申请锁的时间顺序迚行排队第35页共96页活锁与死锁第36页共96页两个戒多个事务互相申请对方加锁对象的排它锁造成循环等待t1t2r2r1第37页共96页估算需要的锁对系统中的锁设定一个加锁顺序所有事务均按照该顺序迚行加锁死锁几乎无法避免允许死锁的发生对其迚行诊断和解除第38页共96页代价最小第39页共96页724共享型封锁s封锁共享锁s锁sharelock
• (1)事务故障 • 非预期的事务故障 • 事务由于某些内部条件无法继续正常执行 • 如:非法输入、找不到数据、溢出等 • 可预期的事务故障 • 应用程序可以发现的事务故障 • 该事务可在以后的某个时间重新执行
• 此时数据库中的数据处于非一致状态
第11页/共96页
7.1.3 故障类型和恢复方法
• (2)系统故障 • 由于特殊的原因导致事务无法正常执行,而系统必须重新启动 • 如停电、CPU故障等 • 一般只影响正在执行的事务,而不会破坏数据库本身以及DBMS环境
第18页/共96页
7.1.5 运行记录优先原则
• 1、至少要等相应运行记录已经写入“日志”文件后,才能允许事务往数据库中 写记录。
• 2、直至事务的所有运行记录都已写入运行“日志”文件后,才能允许事务完成 “END TRANSACTION”处理。
第19页/共96页
练习:
• 1、为了能在出故障时,做好恢复,应在平
第13页/共96页
7.1.4 恢复的基本原则和实现方 法
• (1)定期对整个数据库进行复制和转储 • 冗余技术是数据库恢复的保障
• 建立数据的冗余 • 与数据库分别存储
• 利用冗余数据,重建数据,使其达到一致的状态 • 建立整个数据库的冗余
• 将整个数据库进行备份(冗余的数据库) • 需要时将备份数据库恢复(重载)至系统中
相关文档
最新文档