- 论坛徽章:
- 0
|
重做日志有两种类型,一种是归档模式,一种是非归档模式
书上是这么说的,归档模式就是保存所有的事务日志,相反非归档就是不保存旧事务日志。
我理解归档模式是这么工作的:当有对数据库有dml和其它的事务处理的时候,日志写进程LGWR会把你的语句写入到日志文件LOG-A中,然后数据库会把你需要该的数据调到内存中,等修改完成后(修改的事务也会被记录到LOG-A中),不知道在什么情况下,会把脏数据写回磁盘。等LOG-A被写满后,发生日志且换,此时CKPT会被触发,CKPT告知控制文件有日志且换发生,等CKPT工作完后,数据库又开始工作了,新产生的日志会被写到LOG-B中,等LOG-B也被写满了,又要发生且换了,此时归档进程会被唤起,LOG-A中的数据要被copy到一个文件里面(我是这么想的,我不知道这个文件叫什么名字),然后数据库的事务日志又源源不断的写到LOG-A中,按照这种工作方式,你的数据库即使出现问题也会被回复到down机前的最后一刻的状态。
非归档是不保存就日志的,就是LOG-A满后且换到LOG-B(不知道此时脏数据会不会被写回磁盘?),LOG-B满后再且换回LOG-A此时,LOG-A中的旧数据会被覆盖。书上术这种模式下的数据恢复是有限的,因为如果在一个记录正好被填满并进行交换时断电,以前的信息会丢失。我有点不理解,如果正常情况下日志且换,脏数据会回写,也就是LOG-A且换到LOG-B的时候,LOG-A中事务信息所涉及的到数据会被写盘,写完后那么LOG-A中的事务信息就没有用了,且换到LOG-B后,在写满LOG-B即将发生且换的时候断电,只要把LOG-B中的事务信息读出来,不就全恢复了么????怎么还会丢失呢???
我知道我写的东西里面有很多问题和很多错误,我希望大家都来积极探讨,因为这是数据库里面的一个很重要的知识点,准确的理解了这些,再做数据恢复的时候就容易的多了。。 |
|