07 系统实现技术
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
11
数据库的恢复
存储器结构
存储器类型 易失性存储器(volatile storage) 内存、cache存储器 非易失性存储器(nonvolatile storage) 磁盘(联机存储) 磁带、 光盘(脱机存储) 稳定存储器(stable storage) 理论概念,数据决不会丢失
22
数据库的恢复
SQL对事务的支持
不同类型DBMS,支持程度和语法格式不一样 无begin transaction Commit Rollback 游标
23
数据库的恢复
总结
数据库未损坏,仅仅是异常中止 原则 1)已提交事务,不做任何处理 2)局部提交事务,先UNDO,再REDO 3)未提交事务,REDO 方式 日志损坏,参照纸质文档,DBA手工恢复 日志未损坏,DBMS自动恢复
17
数据库的恢复
故障类型和恢复方法
事务故障 可以预期的事务故障,即程序中可以预先估计到的错误 如存款余额透支、库存量低于临界值等 恢复过程由系统自动完成 UNDO(程序中rollback进行控制) 非预期事务故障,即程序中发生的未估计到的错误 如运算溢出、数据错误、死锁等 恢复过程由系统自动完成 系统执行UNDO
12
数据库的恢复
存储器结构
稳定存储器的实现 数据备份 磁盘数据转录到脱机存储介质(磁带、 光盘) 措施:不一定是简单的复制 硬件措施:磁盘镜像、磁盘阵列、双机容错等 软件措施:数据备份(物理备份、逻辑备份、热备份、 冷备份、增量备份、完全备份等) 数据银行 将数据保存在数据库的同时,网络传输到远程计算机存储 系统(数据银行)
output(A)
故 障
output(B)
应该如何解决
?
14
数据库的恢复
日志DB文件
定义 用来记录事务的状态和事务对数据库更新操作的文件 日志内容 前像 事务所涉及的物理块更新前的映像(旧值)BI 利用前像,使DB恢复到更新前的状态 对应操作:撤销(undo)→回滚rollback 后像 事务所涉及的物理块更新后的映像(新值)AI 利用后像,使数据库恢复到更新后的状态(更新丢失时) 对应操作:重做(redo)
4
事务
内存 read(B i) Bi B
input(A) output(B) A
数据库访问
B 访问机制 write(B i) 缓冲区 磁盘 事务操作在工作区完成 工作区 事务可以是insert、update、delete等命令的组合体 事务结束,更新数据写回缓冲块 缓冲块数据回写外存采用“延迟写”机制(避免频繁外存) Set auto < on | off > On :缓冲区更新立即写外存 Off :缓冲区更新不立即写外存 要使用commit和rollback命令辅助完成
并发操作带来的三个问题
A := 70 A := 200 1)丢失更新问题 T2: A := A * 2 T1: A := A - 30 在t7丢失了事务T1对DB的更新操作 A = 140 A = 170 原因:两个事务对同一数据并发写,引发写-写冲突
时间 t0 t1 t2 t3 t4 t5 t6 t7
24
数据库的恢复
总结
数据库毁灭性破坏 1)重建DB 2)利用最近的备份,恢复到备份点 3)备份点到故障点 日志未损坏 正向扫描日志文件,REDO已提交事务 未完成事务(局部提交和未提交),参照纸质文档 DBA重做 日志损坏 参照纸质文档,DBA顺序重做
25
数据库的并发控制
更新事务 T1 数据库中 A 的值 100 FIND A
更新事务 T2
FIND A A:=A-30 A:=A*2 UPD A 70 200
10
数据库的恢复
定义
系统能把数据库从被破坏、不正确的状态恢复到最近一个正确 的状态 DBMS的这种能力称为数据库的可恢复性(recovery) 磁盘损坏、电源故障、软件错误、机房火灾、恶意破坏 保证数据库在故障发生时,数据不丢失、不破坏 任何情况下,保持事务的原子性和持久性
故障
DBMS的恢复管理子系统
19
数据库的恢复
故障类型和恢复方法
介质故障(硬故障,Hard Crash) 磁盘物理DB遭到毁灭性破坏,如介质损坏、病毒入侵等 备份 恢复过程需要DBA参与 × || 最近转储点 故障发生点 数据恢复过程 恢复 || || ① 重建DB 装入后备副本 利用日志(redo) ② 利用备份恢复 重装最近转储的后备副本到新的磁盘,使数据库恢复到 备份时的一致状态 ③ 在日志(未损坏)中查找最近转储后所有已提交事务 REDO处理,将数据库恢复到故障前某时刻的一致状态
DBMS并发控制子系统
协调并发事务的执行,保证DB完整性,避免破坏一致性 并发:在单CPU环境下,多事务分时共享CPU 若不施加控制,容易带来3个问题 丢失更新问题 读脏数据问题 不可重复读问题 并发控制策略 封锁技术 时标技术(略)
26
数据库的并发控制
串行执行 T1→T2 A := 100 T1: A := A - 30 T2: A := A * 2 T2→T1
18
数据库的恢复
故障类型和恢复方法
undo T1 write T2
缓冲区 A B output A
×
磁盘 A B C
系统故障(软故障,Soft Crash) 硬件故障、软件错误或掉电等 C redo 磁盘物理DB未破坏 但事务异常终止运行,内存数据丢失 恢复过程由系统自动完成 重新启动时,恢复管理子系统分两种情况处理: 未完成事务:UNDO处理 已提交事务但更新驻留缓冲区:REDO处理
3
释义
事务
数据访问
每个事务Ti 有一个专用工作区,存放其访问和修改的数据 工作区的生命周期与事务一致 存储块 定长的存储单位 内(缓冲块)、外(物理块)存之间数据交换的基本单位 操作 input :把物理块内容读入到内存缓冲块 output :把缓冲块内容写到磁盘物理块 read :把数据从缓冲块读入到事务工作区 write :把数据从事务工作区写到缓冲块
5
事务
数据访问
示例
事务
Xi
set auto on update S set Sname = ‘李明’ where Sno = ‘S4’ ;
set auto off update S set Sname = ‘李明’ where Sno = ‘S4’ ; commit rollback
包含x的块 B x存在, read(X)
16
数据库的恢复
undo
缓冲区 A B output A
×
磁盘 A B C
T1 恢复的基本原则和实现方法 write 原则 :“冗余”,即数据库重复存储 T2
C redo 实现方法 平时做好两件事:转储和建立日志 周期地拷贝DB,转储到脱机存储介质 建立日志数据库,记录事务的执行信息 故障处理 若DB破坏(日志没破坏),则装入last备份,再利用日志 将这两个DB状态之间的所有更新重新做一遍 若DB未破坏,但破坏了库内数据一致性,利用日志撤消 不合法的修改(undo/redo),把DB恢复到正确状态
21
数据库的恢复
检查点方法的恢复算法
1)正向扫描日志文件 建立事务重做(redo)队列和事务撤销(undo)队列 2)队列处理 重做队列进行REDO处理 正向扫描日志文件,根据重做队列的记录对每一个重做事 务重新实施对数据库的更新操作 撤销队列进行UNDO处理 反向扫描日志文件,根据撤销队列的记录对每一个撤销事 务的更新操作执行逆操作
20
数据库的恢复
检查点技术
事务 T1 T2
检查点 tc
故障点 tf
检查点 td 时间 t
T3 检查点方法 T4 在DBS运行 T5 时,DBMS 定时设臵检查点。在检查点时刻才真正做到把对DB的修改 写到磁盘,并在日志文件写入一条检查点记录(以便恢复时 使用)。当DB需要恢复时,只有那些在检查点后面提交的事 务需要恢复 示例 T1不必恢复 T2和T4须REDO T3和T5须UNDO
系统实现技术
南京邮电大学计算机学院软件工程系
内容提纲
事务
定义、性质、特征
数据库恢复 数据库的并发控制 数据库的完整性 数据库的安全性
2
事务
定义
构成单一逻辑工作单元的操作集合 要么完整地执行,要么完全不执行 不论发生何种情况,DBS必须保证事务能正确、完整地执行 以begin transaction语句开始事务 以commit语句或rollback语句结束事务 commit(提交)语句 事务执行成功,DB进入新状态,更新写入磁盘 rollback(回退)语句 事务执行不成功,DB退回到执行事务前的状态,撤消更新
15
数据库的恢复
日志DB文件
是记录式文件,由运行记录组成,内容和结构因DBMS的不同 而异,一般格式为
事务标识 操作类型 对象标识 前像 后像 示例 下面每个操作,在日志文件中都写一个记录 1)事务T开始,记录为(T,start, , , ) 2)事务T修改对象A,记录为(T,update,A,前像,后像) 3)事务T插入对象A,记录为(T,insert,A, ,后像) 4)事务T删除对象A,记录为(T,delete,A,前像, ) 5)事务T提交,记录为(T,commit, , , ) 6)事务T回滚,记录为(T,rollback, , , )
7
事务
ACID性质
原子性(atomicity) 事务是一个不可分割的工作单元 要么全做,要么全不做 由事务管理子系统实现 一致性(consistency) 数据不会因事务的执行而遭受破坏 由完整性子系统实现
8
事务
ACID性质
隔离性(isolation) 在多个事务并发执行时,系统应保证与这些事务先后单独执 行时的结果一样 由并发控制子系统实现 持久性(durability) 一个事务一旦完成全部操作后,它对数据库的所有更新应永 久地反映在数据库中 由恢复管理子系统实现
9
事务
READ / WRITE 活动状态 局部提交 状态 提交状态
ຫໍສະໝຸດ Baidu
状态变迁图
活动状态(active) 异常中止状态 失败状态 事务执行读写操作 局部提交状态(partially committed) 写操作结果,不一定立即写回外存,可能驻留在内存缓冲区 失败状态(failed) 事务可能因某种原因随时中止 异常终止状态(aborted) 事务执行了对数据库的部分修改,应执行undo操作撤销对 数据库的修改;撤销后可重新执行事务或取消事务 提交状态(committed):事务正常结束
13
数据库的恢复
read 事务工作区 write 缓冲块
input 物理块
×
output
恢复与原子性的联系
示例:如图所示 故障后的错误处理: 1)重新执行事务 2)放弃执行事务 原因: 违反事务原子性 或全做,或全不做
银行转账系统 A=2000 B=1000 事务 A=A-100 B=B+100
包含x的块 B x存在, input(B)
磁盘
X
开 始 请求 read(X) 分配 write(X)
output(B)
事务工作区
?
磁盘缓冲区
6
系统
扫描内存
事务
示例
设银行数据库中有一转账事务T,从账号A转一笔款子($50) 到账号B,其操作如下:
read(A); A := A – 50 ; write(A); read(B) ; B := B + 50 ; write(B). T:BEGIN RANSACTION ; read(A) ; A := A – 50 ; write(A) ; if (A < 0) ROLLBACK ; else { read(B) ; B:=B+50 ; write(B) ; COMMIT ; }