记录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