文来自【风骨散人】
合作整理
事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
事务和程序是两个概念
事务是恢复和并发控制的基本单位
COMMIT
BEGIN TRANSACTION
SQL 语句1
SQL 语句2
......
COMMIT
事务正常结束
"提交" 事务的所有操作 ->(读+更新)
事务中所有对数据库的更新写回到磁盘上的物理数据库中
ROLLBACK
BEGIN TRANSACTION
SQL 语句1
SQL 语句2
......
ROLLBACK
事务异常终止
事务运行的过程中发生了故障,不能继续执行
系统将事务中对数据库的所有已完成的操作全部撤销
事务滚回到"开始"时的状态
事务是数据库的逻辑工作单位,即事务中包括的诸操作要么都做,要么都不做
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态
一致性状态
数据库中只包含成功事务提交的结果
不一致状态
数据库系统运行中发生故障,有些事务尚未完成就被迫中断;
这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态
支付宝转帐:小明扫码支付1000元到小李的账户
定义一个事务,该事务包括两个操作
A | B |
---|---|
小明-1000 | |
小李+1000 |
这两个操作要么全做,要么全不做
全做或者全不做,数据库都处于一致性状态。
如果只做一个操作,用户逻辑上就会发生错误,总量上少了1千,数据库就处于不一致性状态。
只可能是少不可能是多,因为A操作不发生,B操作也不会发生。
一个事务的执行不能被其他事务干扰
保证事务ACID特性是事务处理的任务
破坏事务ACID特性的因素:
数据库管理系统必须具有把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)的功能,这就是数据库的恢复管理系统对故障的对策
有的是可以通过事务程序本身发现的
支付宝转帐:小明转账一定金额到小李的账户
BEGIN TRANSACTION
读小明账户的余额BALANCE;
BALANCE=BALANCE-AMOUNT; /*AMOUNT 为转账金额*/
IF(BALANCE < 0 ) THEN
{
打印‘金额不足,不能转账’; /*事务内部可能造成事务被回滚的情况*/
ROLLBACK; /*撤销刚才的修改,恢复事务*/
}
ELSE
{
读小李账户的余额BALANCE1;
BALANCE1=BALANCE1+AMOUNT;
写回BALANCE1;
COMMIT;
}
非预期的,不能由事务程序处理的。
事务内部更多的故障是非预期的,是不能由应用程序处理的。
事务故障意味着
事务故障的恢复:事务撤消(UNDO)
称为软故障,是指造成系统停止运转的任何事件,使得系统要重新启动。
发生系统故障时,一些尚未完成的事务的结果可能已送入物理数据库,造成数据库可能处于不正确状态。
恢复策略: 系统重新启动时,恢复程序让所有非正常终止的事务回滚,强行撤消(UNDO)所有未完成事务
发生系统故障时,有些已完成的事务可能有一部分甚至全部留在缓冲区,尚未写回到磁盘上的物理数据库中,系统故障使得这些事务对数据库的修改部分或全部丢失
恢复策略: 系统重新启动时,恢复程序需要重做(REDO)所有已提交的事务
称为硬故障,指外存故障
计算机病毒已成为计算机系统的主要威胁,自然也是数据库系统的主要威胁
数据库一旦被破坏仍要用恢复技术把数据库加以恢复
各类故障,对数据库的影响有两种可能性
恢复操作的基本原理: 冗余
利用存储在系统别处的冗余数据来重建数据库中已被破坏或不正确的那部分数据
恢复的实现技术: 复杂
一个大型数据库产品,恢复子系统的代码要占全部代码的10%以上
转储是指数据库管理员定期地将整个数据库复制到磁带、磁盘或其他存储介质上保存起来的过程
备用的数据文本称为后备副本(backup)或后援副本
数据库遭到破坏后可以将后备副本重新装入
重装后备副本只能将数据库恢复到转储时的状态
上图中:
静态转储与动态转储:
静态:
动态:
小结:
利用动态转储得到的副本进行故障恢复
需要把动态转储期间各事务对数据库的修改活动登记下来,建立日志文件
后备副本加上日志文件就能把数据库恢复到某一时刻的正确状态
海量转储与增量转储:
什么是日志文件
日志文件的格式
以记录为单位的日志文件内容
以上均作为日志文件中的一个日志记录 (log record)
以记录为单位的日志文件,每条日志记录的内容
以数据块为单位的日志文件,每条日志记录的内容
具体作用:
为保证数据库是可恢复的,登记日志文件时必须遵循两条原则
为什么要先写日志文件
事务故障:事务在运行至正常终止点前被终止
恢复方法:
由恢复子系统利用日志文件撤消(UNDO)此事务已对数据库进行的修改
事务故障的恢复由系统自动完成,对用户是透明的,不需要用户干预
系统故障造成数据库不一致状态的原因
恢复方法
系统故障的恢复由系统在重新启动时自动完成,不需要用户干预
两个问题:
解决方案:
具有检查点(checkpoint)的恢复技术
周期性地执行如下操作:建立检查点,保存数据库状态。
具体步骤是:
恢复子系统可以定期或不定期地建立检查点,保存数据库状态
系统出现故障时,恢复子系统将根据事务的不同状态采取不同的恢复策略
T1:在检查点之前提交
T2:在检查点之前开始执行,在检查点之后故障点之前提交
T3:在检查点之前开始执行,在故障点时还未完成
T4:在检查点之后开始执行,在故障点之前提交
T5:在检查点之后开始执行,在故障点时还未完成
恢复策略
介质故障是对系统影响最为严重的一种故障,严重影响数据库的可用性
提高数据库可用性的解决方案
数据库镜像
频繁地复制数据自然会降低系统运行效率
事务的概念和性质
故障的种类
恢复中最经常使用的技术
恢复的基本原理
事务
本文出自大学教材,《数据库系统概论》高等教育出版社,作者为王珊和萨师煊老师,本文不同于前文是自己写的,这篇是笔记倾向,特此注明,如果看到本文的概况后,想要详细了解,请购买该书籍。
王珊,女,1944年生,工学硕士,中国人民大学信息学院教授、博士生导师,研究方向是高性能数据库新技术、内存数据库技术、Video数据库技术、数据库信息检索新技术研究、数据仓库与商务智能技术等。科研和教学成果曾获得国家科技进步二等奖、电子部科技进步特等奖、北京市科技进步一等奖、北京市科技进步二等奖、教育部科技进步二等奖、北京市科技进步一等奖、国家级优秀教材奖等多项奖励;曾获得国家人事部授予的有突出贡献的中青年专家、北京市优秀教师、全国优秀教师、首都劳动奖章、全国五一劳动奖章、国家级教学名师等荣誉称号。
萨师煊(1922年12月27日—2010年7月11日),中国人民大学经济信息管理系的创建人之一,曾担任中国人民大学经济信息管理系采主任、名誉系主任。是中国数据库学科的奠基人之一,曾担任中国计算机学会常务理事、软件专业委员会常务委员数据库学组组长。
名家的书肯定是要比我写的好,而且本来就是总结的人家的书,倒不是我的文章没有作用,只是带你看个大概。