《数据库系统概论》- 课本理论整理07之数据库恢复技术
事务的基本概念
事务的ACID特性
【事务】是【恢复】和【并发控制】的基本单位。
保证事务ACID特性是事务管理的基本任务。
ACID特性遭到破坏的因素
- 多个事务并发运行时,不同事务的操作交叉执行 (必须保证多个事务交叉执行的时候不会对彼此产生影响)
- 事务在运行过程中被强行停止(必须保证被强行终止的事务对DB和其他事务不会产生影响)
数据库恢复概述
恢复子系统是DBMS的重要组成部分,占真个系统代码的10%以上,DB所采用的恢复技术是否有效对系统的可靠程序起到决定的作用。
DBS中故障的种类
1.事务内部的故障
BEGIN TRANSACTION 读取账户甲方余额BALANCE01; BALANCE01 = BALANCE01 - AMOUNT; /*AMOUNT为转账金额 🍎 第一次更新*/ IF(BALANCE01 < 0)THEN { 打印"金额不足,不能转账!" /*事务内部课程造成事务被回滚的情况*/ ROLLBACK; /*撤销刚才的修改,恢复事务*/ } ELSE { 读取账户乙的余额BALANCE02; BALANCE02 = BALANCE02 + AMOUNT; /*🍎 第二次更新*/ COMMIT; /*提交事务*/ }
上述的两个更新操作要么全部完成要么全部不做,否则就会使数据处于不一致状态。
事务内部存在非预期的故障,无法由应用程序处理的。
eg: 运算溢出、并发事务发生死锁而被选中撤销该事务、违反了某些完整性限制而被终止等
事务故障即事务没有达到预期的终点(COMMIT或ROLLBACK) DB可能处于不正确状态。
恢复程序要在不影响其他事务运行的情况下,强行回滚该事务。
【事务撤销(UNDO)】 =》 撤销该事务已经作出的任何对DB的修改。
2.系统故障 - 软故障(soft crash)
【系统故障】=》造成系统停止运转的任何事件,使得系统要重新启动。
eg:
硬件错误(CPU故障)、OS故障、DBMS代码错误、系统断电等
将事务已提交的结果重新写入DB。所以系统重新启动后,恢复子系统除需要撤销所有未完成的事务外还要重做(REDO)所有已经提交的事务,以将DB恢复到一致状态。
3.介质故障 - 硬故障(hard crash)
硬故障是指外存故障eg: 磁盘损坏、磁头碰撞、瞬时强磁场干扰等
4.计算机病毒 - 一种人为的故障或破坏
总结
各类故障对DB的影响有两种可能性:
- DB本身被破坏
- DB没有被破坏,但数据可能不正确(事务的运行被非正常终止造成的)
恢复的方法: 冗余
数据库中任何一部分【被破坏或不正确的数据】可以根据存储在系统别处的【冗余数据】来重建.
恢复的实现技术
恢复机制设计的两个关键问题是: 【1.如何建立冗余数据】【2.如何利用这些冗余数据实施数据库恢复】
建立冗余数据常用技术【1.数据转储】【2.登记日志文件(logging)】
数据转储分类
- 动态海量转储
- 动态增量转储
- 静态海量转储
- 静态增量转储
登记日志文件
恢复策略
事务故障恢复
【事务故障】事务在运行到终止点前被终止(此时恢复子系统利用日志文件撤销(UNDO)此事务对DB已经做出的修改)。
事务故障恢复由系统自动完成,对用户透明。
系统故障恢复
系统故障造成DB不一致状态的原因两个
- 未完成事务对DB的更新可能已写入DB(不该做的做了)
- 已提交事务对DB的更新可能还留在缓冲区每来得及写入DB(该做的没做
介质故障恢复
发生介质故障后,磁盘上的物理数据和日志文件被破坏,恢复方法是重装DB然后重做已经完成的事务。
数据库镜像 - 主从数据库(也是目前企业级开发数据库后备处理通用措施)
介质故障是对系统影响最为严重的一种故障。
随着磁盘容量越来越大,价格越来越便宜,DBMS提供DB Mirror功能用于数据库恢复
自动将整个DB或其中的关键数据复制到 ====》 另一个磁盘上,每当主DB更新时,DBMS自动把更新后的数据复制过去,由DBMS自动保证Data和主数据库的一致性
在没有出现故障的时候,数据库镜像可以提供并发操作,即当一个用户对数据加排他锁修改数据的时候,其他用户可以读镜像数据库上的数据而不必等待该用户释放锁。
在实际实施中只选择对关键数据和日志文件进行镜像处理,而不是面对整个DB。
小结
- 数据库最基本要求: 保证数据一致性
- 事务是DB的逻辑工作单位
- 只要DBMS保证DB的【原子性 - 要么全成功要么全失败】【一致性 - 从一个一致性转到另一个一致性状态】【隔离性 - 事务之间相互独立】【持久性 - 事务对DB的更改是持久化的】就能保证DB处于一致状态.
- 为了保证事务的ACID properties, DBMS必须对事务故障、系统故障和介质故障进行恢复。
- 数据转储和登记日志文件是恢复中最常实用的技术。
- 恢复的基本原理: 利用存储在【后备副本】、【日志文件】和【数据库镜像中的冗余数据】来重建DB
- 【事务】不仅是【恢复的基本单位】,也是【并发控制的基本单位】。
- 为了保证事务的【隔离性和一致性】,DBMS需要进行并发操作进行控制。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具