oracle实例恢复是是值oracle由于突然断电,导致DB_BUEER_CACHE里面的赃块没有写到磁盘上(提交和未提交的数据都有),这样就造成了数据的丢失,而oracle是通过SMON进程来实现实例恢复来解决数据丢失的。
1:什么时候需要实例恢复
oracle在启动到mount状态下会检查两个检查点,第一个是数据文件头部和控制文件里面的检查点,两个不一致就要做实例恢复,另外一个是控制文件记载的STOP
SCN ,两者不一致也要做检查点。
2:实例恢复怎么实现
oracle增加了增量检查点机制,来减少实例恢复的时间,增量检查点会每三秒提醒DBWR写赃块,同时会更新控制文件里面所记载的检查点位置(赃块在DB_BUFFER_CACHE里面会以第一次开始变赃的时间排序,检查点之前的赃块是写到了磁盘上的赃块,检查点之后的是没有写到磁盘上的,也是实例恢复需要的),实例在mount之后,SMON会读取控制文件中记载的CRBA(检查点所在的日志地址),从这个点一直前滚到ON_DISK_RBA(LGWR最后记下的日志信息),在这两个RBA中间的数据就是实例恢复的段。
3:实例恢复过程
数据库启动到mount,利用日志前滚,将所有的数据恢复出来(提交未提交的都恢复出来),数据打开,SMON借助UNDO信息回滚未提交的数据,从而实现数据的零丢失。
4:实例恢复参数:
既然实例恢复是有个时间段(日志上看是从CRBA到ON_DISK_RBA),那么就可以通过参数来设置这一时间,其实也就是触发增量检查点。FAST_START_MTTR_TARGET通过这一参数可以设置你需要实例恢复的时间,oracle会自动根据系统本身的IO能力来决定在规定时间类将完成实例恢复。这一参数也覆盖了原来的log_checkpoint_interval
(日志上有多少个块对应的赃数据没有写后会写赃),log_checkpoint_timeout(多少时间触发增量检查点写赃)。另外增量检查点oracle会在3秒触发,以及在日志文件写到了90%的时候会触发。