没有合适的资源?快使用搜索试试~ 我知道了~
hello大家好,好久不见!今天我们继续学习《教妹学数据库系统》。教妹学数据库,没见过这么酷炫的标题吧?“语不惊人死不休”,没错,标题就是这么酷炫。 我的妹妹小埋18岁,校园中女神一般的存在,成绩优异体育万能,个性温柔正直善良。然而,只有我知道,众人眼中光芒万丈的小埋,在过去是一个披着仓鼠斗篷,满地打滚,除了吃就是睡和玩的超级宅女。而这一切的转变,是从那一天晚上开始的。 从此之后,小埋经常让我帮她辅导功课。今天她想了解数据库系统中的故障恢复。本篇教程通过我与小埋的对话的方式来谈一谈故障恢复。 故障恢复(failure recovery) 故障发生后,DBMS将数据库恢复到最新的一致性状态 故障
资源推荐
资源详情
资源评论
(教妹学数据库系统)(十二)故障恢复(教妹学数据库系统)(十二)故障恢复
hello大家好,好久不见!今天我们继续学习《教妹学数据库系统》。教妹学数据库,没见过这么酷炫的标题吧?“语不惊人死
不休”,没错,标题就是这么酷炫。
我的妹妹小埋18岁,校园中女神一般的存在,成绩优异体育万能,个性温柔正直善良。然而,只有我知道,众人眼中光芒万
丈的小埋,在过去是一个披着仓鼠斗篷,满地打滚,除了吃就是睡和玩的超级宅女。而这一切的转变,是从那一天晚上开始
的。
从此之后,小埋经常让我帮她辅导功课。今天她想了解数据库系统中的故障恢复故障恢复。本篇教程通过我与小埋的对话的方式来谈一
谈故障恢复故障恢复。
故障恢复故障恢复(failure recovery)
故障发生后,DBMS将数据库恢复到最新的一致性状态
故障故障(Failure)的类型的类型
事务故障事务故障
逻辑错误(LogicalErrors)
事务由于内部错误(internalerror)而无法完成,如违反完整性约束(integrityconstraint)
内部状态错误(InternalStateErrors)
DBMS由于内部状态错误(如死锁)而必须中止活跃事务(activetxn)
系统故障系统故障(SystemFailures)
软件故障(SoftwareFailures)
DBMS实现的bug所导致的故障
硬件故障(HardwareFailures)
运行DBMS的计算机发生崩溃(crash),如断电
假设系统崩溃不会损坏非易失存储器中的数据
存储介质故障存储介质故障(StorageMediaFailures)
非易失存储器发生故障,损坏了存储的数据
假设数据损坏可以被检测,如使用校验码(checksum)
任何DBMS都无法从这种故障中恢复,必须从备份(archive)中还原(restore)
Buffer Pool Policies
DBMS在故障恢复时会做2种操作
撤销(Undo)
Undo未完成事务(incomplete txn)对数据库的修改
重做(Redo)
Redo已提交事务(committed txn)对数据库的修改
DBMS如何支持undo和redo取决于DBMS如何管理缓冲池(bufferpool)
STEAL策略策略
DBMS是否允许将未提交事务所做的修改未提交事务所做的修改写到磁盘并覆盖现有数据?
STEAL:允许
NO-STEAL:不允许
FORCE策略策略
DBMS是否要求事务在提交前必须将其所做的修改事务在提交前必须将其所做的修改全部写回磁盘?
FORCE:要求
NO-FORCE:不要求
缓冲池策略缓冲池策略(Buffer Pool Policies)
例如:NO-STEAL+FORCE
shadow paging
NO-STEAL ⇒ 未提交事务不可能将其修改写回磁盘 ⇒ 无需undo
FORCE ⇒ 已提交事务已将其修改全部写回磁盘 ⇒ 无需redo
优点: 实现简单
缺点: 缓冲池得能存得下所有未提交事务所做的修改
Write-Ahead Logging(WAL)
预写式日志预写式日志(WAL)
DBMS在数据文件(datafile)之外维护一个日志文件(logfile),用于记录事务对数据库的修改记录事务对数据库的修改。
假定日志文件存储在稳定存储器(stable stroage)中
日志记录(log record)包含undo或redo时所需的信息
DBMS在将修改过的的对象写到磁盘之前,必须先将修改此对象的日志记录刷写到磁盘。在将修改过的的对象写到磁盘之前,必须先将修改此对象的日志记录刷写到磁盘。
WAL协议协议(WAL Protocol)
当事务当事务Ti启动时,向日志中写入记录启动时,向日志中写入记录
tid:Ti的ID(txn ID)
当当Ti提交时,向日志中写入记录提交时,向日志中写入记录
在DBMS向应用程序返回确认消息之前,必须保证Ti的所有日志记录都已刷写到磁盘
当当Ti修改对象修改对象A时,向日志中写入记录时,向日志中写入记录
oid:A的ID(object ID)
before:A修改前的值(undo时用)
after:A修改后的值(redo时用)
基于基于WAL的故障恢复的故障恢复
第1部分:事务正常执行时的行为
记录日志
按照缓冲池策略将修改过的对象写到磁盘
第2部分: 故障恢复时的行为
根据日志和缓冲池策略,对事务进行undo或redo
根据日志的事务分类根据日志的事务分类
根据日志将事务分为3类
已提交事务已提交事务(Committed Txn)
既有,又有
不完整事务不完整事务(Incomplete Txn)
只有,而没有
已中止事务已中止事务(AbortedTxn)
既有,又有
在事务正常执行和故障恢复过程中,如果如果T所做的修改已全部撤销,则将日志记录写到日志所做的修改已全部撤销,则将日志记录写到日志
已中止事务相当于从未执行过相当于从未执行过,故不需要undo,更不需要redo
WAL协议的分类协议的分类
根据缓冲池策略的不同,可以实现3类WAL协议
UndoLogging: WAL+STEAL+FORCE
RedoLogging: WAL+NO-STEAL+NO-FORCE
Redo+UndoLogging: WAL+STEAL+NO-FORCE
WAL Undo Logging
基于基于Undo Logging的事务正常执行时的行为的事务正常执行时的行为
剩余13页未读,继续阅读
资源评论
weixin_38701952
- 粉丝: 5
- 资源: 977
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功