SQL> select checkpoint_change# from v$datafile;
CHECKPOINT_CHANGE#
------------------
621349
621349
621349
621349
SQL> select checkpoint_change# from v$datafile_header;
CHECKPOINT_CHANGE#
------------------
622097
622097
622097
622097
using backup datafile
此时需要media recovery,datafile scn>dataheader scn
SQL> select checkpoint_change# from v$datafile;
CHECKPOINT_CHANGE#
------------------
622059
622059
622059
622059
SQL> select checkpoint_change# from v$datafile_header;
CHECKPOINT_CHANGE#
------------------
622059
622059
622059
621820
关于重建controlfile noresetlogs和resetlogs
no resetlogs 在重建时取current redolog的最新scn作为datafile scn此时数据库一致
resetlogs 在重建时取datafile header的scn作为datafile scn
两种的system checkpoint scn都为0
resetlogs
重置redolog 的sequence,如果日志文件不存在就重建,resetlogs为避免恢复后的库用到恢复前的redo entries产生不一致而重置关于redolog的信息
redolog和checkpoint
根据
select name,value from v$mystat a,v$statname b where a.statistic#=b.statistic# and name like '%redo%';
来查看每次操作产生的redolog的量
alter system dump logfile '/xxx'
REDO RECORD - Thread:1 RBA: 0x000001.00000068.014c LEN: 0x0044 VLD: 0x02
SCN: 0x0000.0007463f SUBSCN: 1 06/05/2010 14:35:34
CHANGE #1 MEDIA RECOVERY MARKER SCN:0x0000.00000000 SEQ: 0 OP:23.1
Block Written - afn: 2 rdba: 0x00800029 BFT:(1024,8388649) non-BFT:(2,41)
scn: 0x0000.000745da seq: 0x01 flg:0x04
redo entries样例
各种操作首先放在sga log buffer, buffer cache,undo cache里,其中log buffer满1/3,1MB,commit时,由lgwr写入redo log 里,记录当时checkpoint scn
由于数据库还没checkpoint,所以controlfile scn,datafile scn,header scn和redo entries的scn不一致,在checkpoint后达到一致
所以数据库的各个操作产生的redo首先放在log buffer里,此时commit就写入redolog,dbwr还未写磁盘,
此时redolog出现问题,这个操作相当于没有发生过,dbwr写入磁盘的,因为checkpoint本身的关系(增量checkpoint,数据写而undo未写的),数据文件是不一致的