保证数据库数据的可靠性。数据库
一个简单的例子:并发
在扣除余额到余额增长的步骤之间,若是出现了系统性的故障,硬件故障,致使整个流程没有顺利完成,就会致使错帐。atom
简单分析可知出错是由于整个流程并非原子性的,或者说,想要完成原子性,可是没有对中间错误发生的预案。日志
事务的基本特性有四个特性,ACID,保证了事务的原子性,一致性,永久性,隔离性。对象
事务被视为不可分割的最小单元,事务的全部操做要么所有提交成功,要么所有失败回滚。队列
回滚能够用回滚日志(Undo Log)来实现,回滚日志记录着事务所执行的修改操做,在回滚时反向执行这些修改操做便可。事务
数据库在事务执行先后都保持一致性状态。在一致性状态下,全部事务对同一个数据的读取结果都是相同的。若是出问题可能会致使不可重复读,幻影读等问题。ci
一个事务所作的修改在最终提交之前,对其它事务是不可见的。在并发的时候使用锁机制来保证隔离性。it
一旦事务提交,则其所作的修改将会永远保存到数据库中。即便系统发生崩溃,事务执行的结果也不能丢失。io
系统发生崩溃能够用重作日志(Redo Log)进行恢复,从而实现持久性。与回滚日志记录数据的逻辑修改不一样,重作日志记录的是数据页的物理修改。
事务的目的是保障在任何状况下,无论是正常运行仍是发生了系统故障,不管是单用户,串行执行仍是多用户并发执行都要保证事务的执行。
关于锁和并发的问题放在下一章讲 [锁与并发](./数据库概论 (八))
日志文件是用来记录事务对数据库的更新操做的文件,日志每每以记录为最小单位,或者以数据库定义的数据块为最小单位。
重点是为了记录:哪一个事务改变了哪一个数据块。
并非全部的操做都要写日志文件,只有在要把数据写到数据库中的时候才须要先写日志文件,再写数据库
由于能够经过日志文件恢复UNDO失败的数据库操做,若是先写数据库那么若是出现了错误就没有机会恢复刚刚的修改了。
由恢复子系统利用日志文件撤销刚刚发生的对数据库的修改。此处的恢复操做是对用户透明的,用户不须要干预此处的修复。
形成不一致的缘由
恢复的方法
首先要转入最新的,正常的数据库备份副本,使之恢复到最近的正常状态。
而后对于备份以后的数据,咱们要经过存储的日志文件来恢复,重作全部已经完成的事务。