oracle实例恢复
1,oracle实例恢复概念
1,应用在线重作日志到数据文件中重构对于数据库的变化(介质恢复应用归档日志)
2,从最新最近的checkpoint对应的rba开始应用redo (介质恢复应用归档日志)
3,一般数据库关闭不正常,oracle会自动进行实例恢复(而介质恢复要人工进行)
2,何时发生实例恢复
何时发生实例恢复与重作线程有关(redo thread:由实例产生的redo),
如果数据库以读写模式打开,redo thread在控制文件被标记为open;
如果数据库正常关闭,redo thread在控制文件被标记为closed;
但是如果在控制文件标记为open,但并没有一个添动的实例为redo thead提供thread enqueue;
这个时间就要实例恢复(其实也就是说数据库非正常关闭)
数据库何时进行自动化实例恢复:
1,异常关库的首次启动,也叫crash recovery
2,rac环境下,如某些实例异常中断,存活实例自动进行实例恢复
3,在实例恢复中检查点所起的重要作用
1,实例恢复用检查点确定从在线日志文件哪里开始应用redo到数据文件
2,checkpoint确保低于checkpoint scn的提交scn已保存到数据文件
也就是说自checkpoint scn开始应用redo到datafile
4,实例恢复如何实现的过程
1,实例恢复第一个阶段叫作cache recovery或者前滚rolling forward,
即把在线重作包含的所有变更应用到数据文件中
2,因为在线重作也记录了rollback data,所以前滚也会重构对应的undo segment
3,前滚之后数据库包含了提交与未提交的数据;数据库必须要把未提交的回滚了;如何回滚呢,
通过检查点的位置;确保低于checkpoint scn的提交数据已全部写入到磁盘了;
oracle就应用undo block回滚未提交的数据到一致性状态;
至此,数据库全部处于一致状态下
4,oracle会同时回滚多个事务(发生故障时的活动事务);
新事务不会去等待smon进程回滚异常中断的事务,它会自己去回滚它所需要的数据块到一致性状态
5,实例恢复的作用
1,把数据库从非一致性状态回归到一致性下
2,提交事务时,lgwr把log buffer中的内容及事务对应的scn写入到redo logfile中,但是请注意:
(注:参考提交commit的概念:http://space.itpub.net/9240380/viewspace-756756)
dbwr不会马上把修改过的dirty buffer写入到数据文件中,因为它要考虑效率;因为这个原因,
数据文件会存在一些临时性未提交的数据;而此时提交信息未同步到数据文件中
所以说想下:非法关库shutdown abort或库异常中断:必须要用实例恢复
1,把在线重作日志对数据文件已提交信息应用到数据文件中;
2,把库down时未提交的变化也要由在线重作日志应用到数据文件,这样确保undo segment的一致性;
就是更新undo segment的事务表
3,由上可知:实例恢复仅用于在线日志文件和当前操作的数据文件
6,由smon进行实例恢复,不用人工操作
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-757025/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9240380/viewspace-757025/