alter session set events 'immediate trace name FILE_HDRS level 10';
当我们使用file_hdrs事件来转储数据文件头信息时,Oracle会转储两部分信息: 1. 一部分来自控制文件 2. 一部分来自数据文件 在数据库启动过程中,这两部分信息要用来进行启动验证。
在数据库open的过程中,Oracle要进行检查中包含以下: 第一次检查数据文件头中的Checkpoint cnt是否与对应控制文件中的Checkpoint cnt一致.如果相等,进行第二次检查. 第二次检查数据文件头的开始SCN和对应控制文件中的结束SCN是否一致如果结束SCN等于开始SCN,则不需要对那个文件进行恢复.对每个数据文件都完成检查后,打开数据库.同时将每个数据文件的结束SCN设置为无穷大.
在控制文件和数据文件头都记录一个检查点计数(chkpt cnt或checkpoint cnt)而且数据文件头还记录了一个控制文件检查点计数(ctl cnt),ctl cnt比控制文件中的ckpt cnt要小1,这是因为当检查点更新控制文件和数据文件头上的chkpt cnt/checkpoint cnt信息时,在更新控制文件之前,可以获得当前的控制文件的clt cnt,这个信息被记入到数据文件头中,为什么要写这个ctl cnt到数据文件头?是因为不能保证当前更新控制文件上的checkpoint cnt一定会成功(数据库可能突然crash了),记录之前成功的ctl cnt可以确保上一次的checkpoint是成功完成的。