SCN由两部分组成,高位SCN Wrap由2Bytes记录,低位SCN Base由4Bytes记录。
select dbms_flashback.get_system_change_number from dual;
通常在事务提交或回滚时改变,并不是任何时候都会改变的。
(1)数据文件头中包含该数据文件的checkpoint SCN (checkpoint 计数,scn,时间,stop scn无穷大)
(2)日志文件头包含了Low SCN和Next SCN,正在使用的redo,next scn为无穷多大。查看v$log;
oracle在进行恢复时,根据低SCN和高SCN来判断需要恢复的信息位于哪个日志或归档文件中。
checkpoint
DBWR写脏数据
CKPT通知DBWR写,并更新数据文件头及控制文件上的检查点信息
检查点是为了缩短恢复时间
常规检查点需要写出全部脏数据,又叫完全检查点。同时跟新数据文件及控制文件。
LRBA:Low RBA ,第一次对数据库块修改对应的Redo Block Address。
如果一个数据块被多次修改,它在检查点队列上的位置不会改变。
相对应的,有HRBA。
增量检查点时,CKPT进程只更新控制文件中的检查点SCN及RBA信息。
v$latch 存在多个子latch,可以查看v$latch_children。
检查点队列CKPTQ
文件检查点队列FILEQ (表空间offline等操作时会触发)
每个buffer的header上都存在CKPTQ和FILEQ队列信息,双向连边。dirty buffer才有,否则为null。
10g开始,额外增加了对象检查点队列,OBJQ。
Low cache RBA 是下一次恢复的起点 (已经写入到磁盘的dirty buffer?)
On disk RBA则是已经写入到磁盘的RBA地址,是恢复时,前滚的终点。 (已经写入到磁盘的redo?)
LOG SWITCH触发的是增量检查点,但会促使数据文件头与控制文件信息的同步。
控制文件中的heartbeat每3秒更新一次,验证实例存活。
log_checkpoint_to_alert参数设置为true,则在告警日志中,记录log switch checkpoint信息。
数据文件头中的ctl checkpoint cnt比ckpt cnt小1,目的是什么?
开始SCN记录在数据文件头。结束SCN记录在控制文件中。数据库打开后,将控制文件中的结束SCN置为无穷大。
查看数据库安装了哪些组件 v$option 视图。
FAST_START_MTTR_TARGET 参数定义了数据库进行crash恢复时间,单位是秒。
v$mttr_target_advice视图评估在不同FAST_START_MTTR_TARGET设置下,系统需要进行的IO次数等操作。
statistic_level参数设置为typical或者ALL,才会收集MTTR建议信息。
查询视图v$statistic_level,查看数据库目前收集什么信息。
v$instance_recovery查看数据库当前实例恢复状态。(系统运行过程中,不是恢复过程中。查看如果现在数据库挂了,需要多长时间恢复。系统每次执行检查点后,会重新计算。在很繁忙的系统中,预估恢复时间可能会大于FAST_START_MTTR_TARGET,因为DBWR来不及写,甚至检查点不能及时完成。)
10g新特性,自动调整检查点,利用系统地IO负载时段写出数据。FAST_START_MTTR_TARGET参数未设置时,该功能生效。
Low cache RBA:指在cache中,最低的RBA地址,实例恢复的起点。
on disk RBA:是磁盘上最高的重做值,实例恢复的终点。
除了shutdown abort之外,其他关闭方式都是执行了完全检查点,不需要实例恢复。
实例恢复包括两个步骤:1. cache recovery 2.transaction recovery。
FAST_START_PARALLEL_ROLLBACK 参数,控制并行回滚度,false 禁用,low 不超过2倍cpu_count, high 不超过4倍cpu_count。
v$rollstat 回滚段相关视图
v$fast_start_transaction 视图,显示正在回滚的事务的相关信息。
数据库重启之后,v$transaction事务表中的事务信息将消失,恢复事务变成死事务。
查看死事务恢复进度 x$ktuxe
bootstrape$
BBED