事务
这一章需要额外注意,事务的务是任务的务,不要写成事物。
概念:事务是数据库的操作序列,这些操作要么全做,要么全不做,是不可分割的工作单位。一般来说,一个程序包含多个事务。
事务是恢复的基本单位,也是并发控制的基本单位。
定义事务的SQL语句
开始语句:BEGIN TRANSACTION;
结束语句:COMMIT; //表示提交事务的所有操作即表示事务正确结束
ROLLBACK; //表示回滚,即事务运行中发生了某种故障,需要对已完成的操作进行撤销,回滚到事务开始的状态
事务的四个特性(ACID)
原子性、一致性、隔离性、持续性。
原子性:一个事务要么全做,要么全不做。
一致性:事务执行的结果一定是使数据库从一个一致性状态变到另一个一致性状态。
隔离性:一个事务的执行不能被其他事务干扰。
持续性(永久性):一个事务一旦提交,它对数据库中的数据的改变应该是永久性的。
数据库系统的故障分类
事务内部的故障、系统故障、介质故障、计算机病毒
事务内部的故障:事务内部的故障更多的是非预期的,是不能由应用程序处理的
恢复策略:事务撤销(UNDO)
恢复程序要在不影响其他事务运行的情况下,强行回滚该事务。即撤销该事务已经做出的任何对数据库的修改,使得该事务好像根本没有启动一样。
系统故障(软故障):造成系统停止运转的任何事情,使得系统要重新启动。比如:硬件错误、操作系统故障、DAMS代码错误、系统断电等
特点:影响正在运行的所有事务,但不会对数据库造成破坏。
恢复策略:撤销未完成的事务,重做(REDO)已提交的事务。
介质故障(硬故障):外存故障,如:磁盘损坏、磁头碰撞、瞬时强磁场干扰等
特点:破坏数据库并影响正在存取该部分数据的所有事务。
恢复策略:重装数据库,重做已完成的事务。
计算机病毒:是一种人为造成的破坏或故障
特点:可以对计算机系统包括数据造成危害。
数据库恢复技术
数据转储、登记日志文件
恢复的基本原理:冗余
利用存储在后备副本、日志文件和数据库镜像中的冗余数据来重建数据库。
数据转储
概念:DBA定期的将整个数据库复制到磁带、磁盘或其他存储介质上保存起来的过程。
主要应用于介质故障。
数据转储根据系统是否运行事务可以分为:静态转储(在系统无运行事务时进行)和动态转储(转储期间允许对数据库进行存取或修改)
根据转储的范围可以分为:海量转储(每次转储全部数据库)和增量转储(每次只转储上一次转储后更新过的数据)
静态转储
优点:简单、得到的一定是一个数据一致性的副本。
缺点:降低了数据库的可用性
动态转储
优点:不用等待正在运行的用户事务
缺点:转储结束时后援副本上的数据并不能保证正确有效。(因此需要建立日志文件)
登记日志文件
概念: 用来记录事务对象对数据库更新操作的文件
目的:记录对数据的每一次更新操作
日志记录:每个事务的开始标记、结束标记、更新操作均为日志文件中的一个日志记录。
作用:必须和可以
必须:1、事务故障恢复和系统故障恢复必须使用日志文件。
2、在动态转储中必须建立日志文件。后援副本和日志文件结合起来才能有效地恢复数据库。
可以:在静态转储方式中也可以建立日志文件。这样不必重新运行那些已完成的事务程序就可以把数据库恢复到故障前某一时刻的正确状态。
原则:1、登记的次序严格按并发事务执行的时间次序
2、必须先写日志文件,后写数据库
原因:如果先写了数据库修改,而在日志文件中没有登记这个修改,以后就无法恢复这个修改了。而如果是先写了日志文件,但没有修改数据库,按日志文件恢复时,不过是多执行了一次不必要的UNDO操作,并不会影响数据库的正确性。