1. 事务概念
1.1概念
事务是一系列的数据库操作,是数据库应用程序的基本逻辑单元。
事务使用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位
1.2定义事务语句
BEGIN TRANSACTION; #开始事务
COMMIT; #提交事务(将事务所有对数据库的更新写到磁盘上的物理数据库中)
ROLLBACK; #回滚事务(将事务所有对数据库已完成的操作全部撤销,会滚到事务开始时的状态)
1.3事务特性ACID
Atomicity原子性:事务的所有操作要不都做,要么都不做。
Consistency一致性:事务执行的结果是数据库从一个一致性状态变到另一个一致性状态。
Isolation隔离性:一个事务的执行不能被其他事务干扰。
Durability持续性:事务一旦被提交,它对数据库数据的改变就应是永久性的。
1.4影响事务ACID特性的因素及相关处理技术
事务运行被终止(数据库恢复技术)
事务之间相互干扰(并发控制技术)
2.事务处理技术
数据库恢复技术和并发控制技术
3.数据库恢复技术
3.1概念
计算机系统的硬件故障、软件错误、误操作、恶意破坏,造成运行事务非正常中断,甚至破坏数据库,RDBMS使用恢复子系统把数据库从错误状态恢复到某一已知的正确状态(一致性状态)
3.2故障种类
3.2.1事务故障
影响
影响单个事务,不影响其他事务。
类型
程序可控回滚(ROLLBACK)-->UNDO(撤销)
事务执行故障(如运算溢出、并发死锁等)-->UNDO(撤销)
3.2.2系统故障
概念
某事件造成RDBS停止运转,需要重启RDBS。如操作系统故障、DBMS代码错误、系统断电等。
影响
影响所有事务,但不损坏数据库。
类型
已完成事务未写入磁盘-->REDO(重做)
未完成事务写入磁盘-->UNDO(撤销)
3.2.3介质故障
影响
数据库部分或全部损坏,数据丢失。如磁盘损坏。
3.2.4计算机病毒
影响
影响计算机整体系统
3.3恢复技术
3.3.1原理
建立冗余数据
3.3.2常用技术
数据转储+登记日志文件。
另:主从同步技术(即数据库镜像技术)
3.3.3数据转储
静态转储
在系统中无运行事务时进行转储操作
优点:得到一个数据一致性副本。
缺点:必须等待用户事务结束后才可进行,降低数据库可用性。
动态转储
在转储期间允许执行事务
优点:不影响用户事务执行
缺点:不能保证正确有效,转出过程中数据会随用户事务而改变,得到的不是一致性副本
海量转储
每次转储为全量转储
增量转储
每次只转储上一次转储后更新过的数据
3.3.4登记日志文件
概念
记录事务对数据库的更新操作的文件
原则
先写日志文件、后写数据库
登记的次序严格按照并发事务执行的时间次序
分类
以记录为单位的日志文件
日志记录:事务开始(BEGIN TRANSACTION)标记、事务的所有数据库更新操作、事务结束(COMMIT/ROLLBACK)标记。这三个每一个都是一种日志记录。
每个日志记录的内容:事务标识(标明是那个事务)、操作类型(插入/删除/修改)、操作对象(记录内部标识)、更新前的旧值(insert此项为空值)、更新后的新值(delete此项为空值)
以数据块为单位的日志文件
日志文件的内容:事务标识、更新前的数据块、更新后的数据块。
3.3.5恢复策略
事务故障
思想:恢复子系统利用日志文件UNDO该事务
步骤
反向扫描日志文件,查找该事务的更新操作
对该事务的更新操作执行逆操作
继续反向扫描日志文件,找到其他更新操作,并作逆处理
重复上述步骤,直至事务开始标记
系统故障
思想:未完成事务写入数据库采用UNDO操作;已完成事务未写入数据库采用REDO操作。
步骤
找到故障发生前已经提交的事务(既有事务开始标记,也有事务结束标记中的COMMIT标记),将该事务放入重做队列(REDO-LIST)
找到故障发生时尚未完成的事务(只有事务开始标记,没有事务结束标记中的COMMIT标记),将该事务放入撤销队列(UNDO-LIST)
反向扫描日志文件,逆操作执行撤销事务
正向扫描日志文件,重做每个重做事务
介质故障
思想:重装数据库,重做已完成的事务
步骤
重装数据库,装入最新的转储副本(转储开始时刻的副本),恢复到最新的具有一致性状态的数据(对于动态转储的副本,还需采用与恢复系统故障相同的方法,进行UNDO+REDO方法,恢复数据一致性)
装入相应的日志文件副本(转储结束时刻的副本),重做已完成的事务(只做REDO-LIST里的事务即可)
3.3.6带有检查点的恢复技术
思想
在日志文件中增加一类新的记录:检查点记录,增加一个重新开始文件,使用恢复子系统来动态维护日志。
使用
恢复技术用于系统故障
概念
检查点记录内容
建立检查点时刻所有正在执行的事务清单
这些事务各自的最近一个日志记录的地址
重新开始文件记录内容
记录各个检查点记录在日志文件中的地址
动态维护日志文件
把当前日志缓冲区的所有日志记录写入磁盘的日志文件上
在日志文件中写入一个检查点记录
把当前数据缓冲区的所有数据记录写入磁盘的数据库中
把检查点记录在日志文件中的地址写入一个重新开始文件
通过检查点方法恢复的步骤
从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录
由该检查点记录得到此刻正在执行的事务清单ACTIVE-LIST,建立UNDO-LIST和REDO-LIST,并将ACTIVE-LIST中的事务放入UNDO-LIST
从检查点开始正向扫描日志文件,如果有新开始的事务(有BEGIN TRANSACTION标记),放入UNDO-LIST,如果有新提交的事务(有COMMIT标记),放入REDO-LIST,重复,直至日志文件结束
对UNDO-LIST中的每个事务反向执行UNDO操作,对REDO-LIST中每个事务正向执行REDO操作
3.3.7数据库镜像技术(主从同步技术)
概念
根据DBA的要求,自动把整个数据库或其中的关键数据复制到另一个磁盘上,每当主数据库更新时,DBMS自动把更新后的数据复制过去,由DBMS保证朱从数据库的一致性。