第3章 · 播客 第9集
数据库系统 · 故障恢复、检查点与备份
🎙️ 本集播客:第9集:四类故障的破坏性排序,事务故障与系统故障恢复的完整步骤、Undo 与 Redo 队列的方向,检查点技术四步,DBA 的恢复操作,以及冷热备份、完全增量累积三种备份方式的组合与恢复顺序。 语音由微软 Edge 神经网络语音预生成(女声·晓伊,男声·云希)。点击下方任意对话可直接从该句开始播,当前句朗读时下一句已预先加载,无缝衔接。
明
阿明
小雅姐,故障恢复这块步骤太多,Undo、Redo 的方向我老记反。先从故障分类说起?
雅
小雅
对,方向跟着故障类型走,先分类后对号入座。原文说数据库的故障可用事务的故障来表示,主要分为四类:事务故障、系统故障、介质故障、计算机病毒。逐个看定义。事务故障:事务在运行过程中由于种种原因,如输入数据的错误、运算溢出、违反了某些完整性限制、某些应用程序的错误,以及并发事务发生死锁等,使事务未运行至正常终止点就被撤销。
雅
小雅
先把故障分清楚,恢复策略跟着故障类型走。原文说数据库的故障可用事务的故障来表示,主要分为四类:事务故障、系统故障、介质故障、计算机病毒。逐个看定义。事务故障:事务在运行过程中由于种种原因,如输入数据的错误、运算溢出、违反了某些完整性限制、某些应用程序的错误,以及并发事务发生死锁等,使事务未运行至正常终止点就被撤销。
雅
小雅
系统故障:系统在运行过程中,由于某种原因,如操作系统或数据库管理系统代码错误、操作员操作失误、特定类型的硬件错误如 CPU 故障、突然停电等造成系统停止运行,致使事务在执行过程中以非正常方式终止,这时内存中的信息丢失,但存储在外存储设备上的数据不会受影响。介质故障:系统在运行过程中,由于某种硬件故障,如磁盘损坏、磁头碰撞或由于操作系统的某种潜在的错误、瞬时强磁场干扰,使存储在外存上的数据部分损失或全部损失,称为介质故障。这类故障比前两类故障的可能性虽然小得多,但破坏性却最大。
明
阿明
四种故障的名字我记住了,那「事务为什么会被撤销」的原因清单也算事务故障的定义一部分吧?
雅
小雅
对,原因清单本身就是选项:输入数据的错误、运算溢出、违反了某些完整性限制、某些应用程序的错误,以及并发事务发生死锁。注意最后一条——死锁也能引起事务故障,这两节是串着的。
明
阿明
「内存信息丢失但外存不受影响」是系统故障,「外存数据损失」是介质故障,破坏性最大也标出来了。
明
阿明
病毒那条还有什么细节吗?
雅
小雅
有一句可能出判断:有的病毒一侵入系统就马上摧毁系统,有的病毒有较长的潜伏期,有的病毒则只在特定的日期发生破坏作用,有的病毒感染系统所有的程序和数据,有的只影响特定的程序和数据。而且目前大多数病毒是在 PC 和其兼容机上传播的。这组「有的一有的」排比就是选择题的选项池。
雅
小雅
然后是恢复总纲:在发生某种故障使数据库当前的状态已经不再正确时,把数据库恢复到已知为正确的某一状态,这就是恢复的基本含义——恢复数据库本身。目前数据库系统中最常用的恢复方法是转储和登记日志文件,可根据故障的不同类型采用不同的恢复策略。
明
阿明
事务故障的恢复步骤?
雅
小雅
先记一句定性:事务故障的恢复是由系统自动完成的,不需要用户干预。步骤四步:第一,反向扫描文件日志,查找该事务的更新操作;第二,对该事务的更新操作执行逆操作;第三,继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理;第四,如此处理下去,直至读到此事务的开始标记,事务故障恢复完成。关键词「反向扫描」加「逆操作」,全是 Undo 方向。
明
阿明
系统故障的恢复是不是也要用户动手?
雅
小雅
不用,原文:系统故障的恢复是在重新启动时自动完成的,不需要用户干预。但原因要先懂:系统故障发生时,造成数据库不一致状态的原因有两个,一是由于一些未完成事务对数据库的更新已写入数据库;二是由于一些已提交事务对数据库的更新还留在缓冲区没来得及写入数据库。恢复分三步:第一步,正向扫描日志文件,找出在故障发生前已经提交的事务,将其事务标识记入重做 Redo 队列;同时找出故障发生时尚未完成的事务,将其事务标识记入撤销 Undo 队列。
雅
小雅
第二步,对撤销队列中的各个事务进行撤销处理:反向扫描日志文件,对每个 Undo 事务的更新操作执行逆操作。第三步,对重做队列中的各个事务进行重做处理:正向扫描日志文件,对每个 Redo 事务重新执行日志文件登记的操作。所以方向口诀:Undo 反向做逆操作,Redo 正向重做。第 6 步口诀送你:没做完的撤销、做完了没落盘的重做。
明
阿明
介质故障的恢复呢?这个要 DBA 出场了吧。
雅
小雅
对,介质故障和病毒破坏时磁盘上的物理数据库被破坏,恢复操作分三步:第一,装入最新的数据库后备副本,使数据库恢复到最近一次转储时的一致性状态;第二,从故障点开始反向读日志文件,找出已提交事务标识将其记入重做队列;第三,从起始点开始正向阅读日志文件,根据重做队列中的记录,重做所有已完成事务,将数据库恢复至故障前某一时刻的一致状态。先装副本再顺着日志重做,这是和系统故障恢复最大的区别——系统故障数据还在盘上,不用装副本。
明
阿明
检查点技术是干嘛的?
雅
小雅
先记检查点记录的内容,可包括:建立检查点时刻所有正在执行的事务清单;这些事务最近一个日志记录的地址。采用检查点的恢复步骤原文给了五步,我给你串成流程:第一步,从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录。第二步,由该检查点记录得到检查点建立时所有正在执行的事务清单队列 A。第三步,建立重做队列 R 和撤销队列 U,把 A 队列放入 U 队列中,R 队列为空。
雅
小雅
第四步,从检查点开始正向扫描日志文件,若有新开始的事务 T1,则把 T1 放入 U 队列,若有提交的事务 T2,则把 T2 从 U 队列移到 R 队列,直至日志文件结束。第五步,对 U 队列的每个事务执行 Undo 操作,对 R 队列的每个事务执行 Redo 操作。注意第四步那个「从 U 移到 R」的动作:提交了才进 Redo,没提交的一直留在 Undo。
明
阿明
DBA 要做的操作呢?我记得有个两句的版本。
雅
小雅
DBA 要做的基本操作是两条:重装最近转储的后援副本;运行日志文件,执行系统提供的恢复命令。简答直接写这两条。还有一句收尾定性:数据库安全和恢复是数据库系统正常运行的保证,大型数据库管理系统一般都提供了实现安全机制的保证,但小型的数据库管理系统并非都具有相应功能,因此有时需要人工的辅助措施。
明
阿明
备份那节,冷备份热备份怎么分?恢复流程呢?
雅
小雅
备份和恢复计划的制订遵循两个原则:保证数据丢失的情况尽量少或完全不丢失;备份和恢复时间尽量短,保证系统最大的可用性。按备份内容分为物理备份和逻辑备份两类。物理备份是在操作系统层面上对数据库的数据文件进行备份,分为冷备份和热备份两种。冷备份是将数据库正常关闭,在停止状态下利用操作系统的 copy、cp、tar、cpio 等命令将数据库的文件全部备份下来。
雅
小雅
热备份则是不关闭数据库,将数据库中需要备份的数据文件依次置于备份状态,相对保持静止,再利用同样的命令备份,备份完毕后再将数据文件恢复为正常状态;另外一种热备份方式是利用备份软件,例如 veritas 公司的 netbackup、legato 公司的 network 等,在数据库正常运行的状态下将数据文件备份出来。
明
阿明
冷备份要停库、热备份不停库,就这个区别?
雅
小雅
对,冷备份的关键词是正常关闭、停止状态;热备份的关键词是不关闭数据库、置于备份状态相对静止。然后是三种方式的组合:完全备份是将数据库的内容全部备份,作为增量、累积的基础;增量备份是只备份上次完全、增量或累积备份以来修改的数据;累积备份是备份自上次完全或累积备份以来修改过的数据。一个备份周期通常由一个完全备份和多个增量、累积备份组成。
明
阿明
增量备份和累积备份的差别,我每次都要想半天。
雅
小雅
用基点区分:增量备份的基点是上一次任何一种备份,所以每份只装最近一小段改动,文件小、时间少;累积备份的基点是上一次完全备份或累积备份,它要把中间所有增量漏掉的改动都兜住,越到后期越大。恢复顺序原文给死:首先从完全备份恢复数据库,然后按照时间顺序从早到晚依次导入多个增量和累积备份文件。
明
阿明
逻辑备份呢?那些工具名要背吗?
雅
小雅
逻辑备份是指利用各数据库系统自带的工具软件备份和恢复数据库的内容,例如 Oracle 的导出工具为 exp,导入工具为 imp,可以按照表、表空间、用户、全库等四个层次备份和恢复数据;Sybase 的全库备份命令是 dump database,全库恢复命令是 load database,另外也可利用 BCP 命令来备份和恢复指定表。
雅
小雅
定性两句:在数据库容量不大的情况下逻辑备份是一个非常有效的手段,既简单又方便;但针对大型数据库的备份和恢复一般结合磁带库采用物理的完全、增量、累积三种备份方式相组合来进行;无论任何时候逻辑备份都是一种非常有效的手段,特别适合于日常维护中的部分指定表的备份和恢复。四个层次「表、表空间、用户、全库」是可考细节。
雅
小雅
本集必背:四类故障是事务故障、系统故障、介质故障、计算机病毒,介质故障可能性小但破坏性最大,系统故障内存信息丢失外存不受影响;恢复靠转储和登记日志文件;事务故障恢复系统自动完成、反向扫描执行逆操作;系统故障恢复重启时自动完成、正向扫描建 Redo Undo 两个队列、Undo 反向逆操作、Redo 正向重做;介质故障先装最新后备副本再重做已完成事务;
雅
小雅
检查点记录正在执行的事务清单和最近日志记录地址,恢复时新事务进 U、提交的从 U 移到 R;DBA 两操作是重装后援副本、运行日志文件执行恢复命令;冷备份停库、热备份不停库;完全备份是基础、增量基点是上次任何备份、累积基点是上次完全或累积;恢复先完全再按时间从早到晚;逻辑备份 Oracle 用 exp 和 imp,四个层次表、表空间、用户、全库。
明
阿明
Undo 反向 Redo 正向,这回焊死了。下一集?
雅
小雅
分布式数据库:定义、特点、四大优点、12 条目标、六层模式结构、数据分片与三级透明性、DDBMS 四成分,最后还有和并行数据库的区别——原文花大力气写的一节,下一集全是硬骨头。