增量存储和海量存储的定义是?
前者只转储数据库的增量部分
后者每次都备份一整个数据库
PS:工程上,往往采取长时间后静态海量存储一次,短时间内动态增量存储一次
日志里存的是什么?作用是?
日志中保存的是事务对数据库的操作,包括事务的开始、结束、具体操作、操作前后的值等等
日志的作用是1.帮助恢复事务故障和系统故障;2.在转储中实现动态备份,不影响事务的执行
日志文件的原则?
1.先写日志再做操作(否则如果做了操作后立马发生故障,则会导致无法恢复)
2.严格按照时间的先后记录
事务故障时如何恢复的?
1.反向扫描日志
2.对执行了的操作依次执行逆操作
3.直到读取到故障事务开始的地方
PS:用户透明,系统自动完成
系统故障是如何恢复的?
1.正向扫描日志。找到故障发生前已经COMMIT的事物,放入REDO队列;找到故障发生时已经开始但是还没有COMMIT也没有ROLLBACK的事务,放入UNDO队列
2.对UNDO队列的事务按照时间从近到远,依次执行其逆操作
3.对REDO队列的事务按时间从远到近,再次执行
介质故障是如何恢复的?
1.读入数据库的副本
2.利用日志,把故障时点前已经COMMIT的事务REDO,把故障时点已经开始但是还没ROLLBACK也没COMMIT的事务UNDO
检查点是什么?为了什么目的?为了实现其目的背后是怎么做的?
检查点是数据库日志文件中一类特殊的数据。
用以实现数据库的快速恢复。
具体来说,检查点用以记录某一时刻数据库内正在执行的事务。若一个事物在检查点之前就已经完成,则我们认为它已经写入到数据库,不必在REDO。有检查点机制的日志文件,在恢复数据的时候,只需要从故障点往前找到第一个检查点,然后对于检查点中记录的事务和所有检查点之后故障点之前的事务进行REDO和UNDO就可以了。具体逻辑和普通恢复类似。