记录RBA(redo byte address),SCN号与oracle数据库恢复过程有着密切的关系,只有很好地理解了这层关系,才能深刻地理解恢复的原理,从而才能很好地解决这方面的问题。

  SCN与CHECKPOINT

  CKPT进程在checkpoint发生时,将当时的SCN号写入数据文件头和控制文件,同时通知DBWR进程将数据块写到数据文件。

  CKPT进程也会在控制文件中记录RBA(redo byte address),以标志Recovery需要从日志中哪个地方开始。与checkpoint相关的SCN号有四个,其中三个存在控制文件中,一个存放在数据文件头中。

  这四个分别是:

  一、Start SCN号

  ORACLE将Start SCN号存放在数据文件头中。

  这个SCN用于检查数据库启动过程是否需要做Media Recovery.

  我们可以通过以下SQL语句查询:

  select name,checkpoint_change# from v$datafile_header;

  二、System Checkpoint SCN

  当checkpoint完成后,ORACLE将System Checkpoint SCN号存放在控制文件中。我们可以通过下面SQL语句查询:

  select checkpoint_change# from v$database;

  三、Datafile Checkpoint SCN

  当checkpoint完成后,ORACLE将Datafile Checkpoint SCN号存放在控制文件中。我们可以通过下面SQL语句查询linux视频教程下载所有数据文件的Datafile Checkpoinnt SCN号。

  select name,checkpoint_change# from v$datafile;

  四、End SCN (Stop SCN)号

  ORACLE将End SCN号存放在控制文件中。

  这个SCN号用于检查数据库启动过程是否需要做Instance Recovery.

  我们可以通过以下SQL语句查询:

  select name,last_change# from v$datafile;

  在数据库正常运行的情况下,对可读写的,online的数据文件,该SCN号为NULL.

  我们作个小的试验,内容如下:

  在执行检查点进程之前SCN号如下:

  --select checkpoint_change# from v$database;

  System Checkpoint SCN 4609061

  --select name,checkpoint_change# from v$datafile;

  Datafile Checkpoint SCN 4609061

  --select name,checkpoint_change# from v$datafile_header

  Start SCN 4609061

  --select name,last_change# from v$datafile;

  End SCN空

  执行alter system checkpoint。后的SCN号如下:

  --select checkpoint_change# from v$database;

  System Checkpoint SCN 4609630

  --select name,checkpoint_change# from v$datafile;

  Datafile Checkpoint SCN 4609630

  --select name,checkpoint_change# from v$datafile_header;

  Start SCN 4609630

  --select name,last_change# from v$datafile;

  End SCN null