第十章数据库恢复技术
一、数据库的恢复
1、事务的概念:事务是一个操作序列。事务以BEGIN TRANSACTION语句开始,以COMMIT(提交)语句或ROLLBACK(回退或撤消)语句结束。 一个程序的执行可通过若干事务的执行序列来完成。
2、事务的性质:
原子性(atomicity):这些操作要么什么都做,要么都不做,是一个不可分割的工作单位。
一致性(consistency):一个符合逻辑的稳定状态到另一个符合逻辑的稳定状态
隔离性(isolation):并发执行的事务之间是不能互相干扰的
持久性(durability):一个事务一旦提交对数据的改变就是永久的。
3、故障类型和恢复方法
故障类型恢复方法:
- 事务故障:应用程序自动进行恢复;
- 系统故障:重新启动时则恢复子系统将所有非正常终止的事务回退,恢复到正确状态;
- 介质故障:通过DBMS把其他务份磁盘或第三级介质中的内容再复制回来
4、恢复的基本原则和实现方法
恢复的基本原则:“冗余”,即数据的重复存储。
实现方法有:
(1)定期对数据库进行复制或转储(dump)。(静态转储(无运行事务时进行)、动态转储(随时可以,转储与事务并发执行)、海量转储(一次性转储全部数据库)和增量转储(每次只转储更新部分)。)
(2)建立“日志”文件。(更新操作,用于恢复)
5、运行记录优先原则(即先记录,再更新,先记完,再结束)
(1)至少要等相应的运行记录已经写入“日志”文件后,才能允许事务往数据库在写数据。
(2)直到事务的所有运行记录都已写入运行“日志”文件后,才能允许事务完成“END TRANSACTION”处理。
具有有检查点的恢复技术:P303UNDO队列与REDO队列
重新开始文件/检查点(日志文件中)
第十一章并发调度的可串行性
1、并发控制带来的三类问题:
- (1)丢失更新的问题(同时读,同时修改,后者的修改使得前者的修改丢失了)
- (2)不可重复读(一个事务要都多次,另一个事务要修改)
- (3)读“脏数据”。(一个读,一个写了又撤销; 未提交的随后又被撤销)
P311图11.2
问题的主要原因:办法操作破坏了事务的隔离性
2、为解决并发控制带来的问题,通常要采用封锁(locking)技术,常用的封锁有:排它型封锁(X封锁)(写锁)和共享型封锁(S封锁)(读锁)两种。
X最强,IS最弱
P322图11.11数据锁的相容矩阵
3、死锁和活锁
活锁:是指某个事务永远处于等待状态,得不到执行的现象。
方法:采用“先来先服务”策略。
死锁:有两个或以上的事务处于等待状态,每个事务都在等待另一个事务解除封锁,它才能继续执行下去,结果任何一个事务都无法执行,这种现象就是死锁。
方法:由DBMS中的“死锁测试程序”来检查,如发现死锁则牺牲一个事务,并做回退操作,解除它的所有封锁。
意向锁:对于某个结点加意向锁,则说明该节点的下层结点正在被加锁。
4、并发事务正确调度的准则是事务可串行化。
5、事务遵守两段锁协议是可串行化调度的充分条件