检查点:

是一个数据库事件,用于减少崩溃恢复时间,检查点位置决定了实例恢复的起始位置由后台进程触发,触发时ckpt进程通知dbwn进程将数据缓冲区的脏数据写入到数据文件,ckpt进程同时负责更新数据文件的头部信息及控制文件上的检查点信息
 
检查点触发条件:
         在日志切换的时候(自动切换或手动切换)
         数据库用immediate ,transaction ,normal选项shutdown数据库的时候
         用户手动触发(alter system checkpoint)
         alter tablespace tablespace_name begin | end bakcup
         alter tablespace tablespace_name offline
         alter database datafile '<dir>' offline
         alter tablespace | datafile read only
 
select name,CHECKPOINT_CHANGE# from v$datafile;从控制文件中查看CKPT号
select name,CHECKPOINT_CHANGE# from v$datafile_header;从数据文件头部文件查看CKPT号
以控制文件中的CKPT检查点号为准!所有数据文件头部中记录的CKPT号都必须与他相同,如个别不同,则代表个别文件损坏。则数据库有可能启不来!
 
实例恢复前滚:从最后一次发生检查点的位置往下
SMON进程进行实例恢复时,会从控制文件中获得检查点位置。于是,SMON进程到联机日志文件中,找到该检查点位置,然后从该检查点位置开始往下,应用所有的重做条目,从而在buffer cache里又恢复了实例崩溃那个时间点的状态。这个过程叫做前滚,前滚完毕以后,buffer cache里既有崩溃时已经提交还没有写入数据文件的脏数据块,也还有事务被突然终止,而导致的既没有提交又没有回滚的事务所弄脏的数据块
 
回滚: 
前滚一旦完毕,SMON进程立即打开数据库。但是,这时的数据库中还含有那些中间状态的、既没有提交又没有回滚的脏块,这种脏块是不能存在于数据库中的,因为它们并没有被提交,必须被回滚。打开数据库以后,SMON进程会在后台进行回滚。

       有时,数据库打开以后,SMON进程还没来得及回滚这些中间状态的数据块时,就有用户进程发出读取这些数据块的请求。这时,服务器进程在将这些块返回给用户之前,由服务器进程负责进行回滚,回滚完毕后,将数据块的内容返回给用户。

 
select * from v$fast_start_servers;
select * from v$fast_start_transactions;
查看正在回滚的内容和事务
 
show parameter fast_start_mtty_target #设置回滚时间,指定多长时间完成实例恢复
recovery_parallelism    ##参数设置前滚并行参数
fast_start_parallel_rollback    ##设置回滚并行参数(FALSE NONE;LOW 2*CPU_COUNT;HIGH 4*CPU_COUNT)