The dynamic performance table used for checkpoint is obviously named
SQL> DESC x $ kcccp
Name null? Type
-----------------------------------------------------------------------------
ADDR raw (4)
Indx number
Inst_id number
Cptno number
Cpsta number
Cpflg number
Cpdrt number
Cprdb number
Cplrba_seq number
Cplrba_bno number
Cplrba_bof number
Cpodr_seq number
Cpodr_bno number
Cpodr_bof number
Cpods varchar2 (16)
Cpodt varchar2 (20)
Cpodt_ I number
Cphbt number/* ckpt heartbeat once every three seconds. The heartbeat information is displayed here. Update once every three seconds */
Cprls varchar2 (16)
Cprlc number
Cpmid number
Cpsdr_seq number
Cpsdr_bno number
Cpsdr_adb number
The main fields include:
· Cplrba _ seq: The first part of the lrba-log serial number of the last incremental checkpoint;
· Cplrba _ BNO: the second part of lrba corresponding to the last incremental checkpoint-Number of log blocks;
· Cplrba _ BOF: the log offset of the third part of lrba corresponding to the last incremental checkpoint;
· Cpodr _ seq: The first part of the last RBA that has been written into the log file-log serial number;
· Cpodr _ BNO: the second part of the last RBA that has been written into the log file-Number of log blocks;
· Cpodr _ BOF: the second part of the last RBA that has been written into the log file-log offset;
· Cphbt: updates every three seconds and writes the heartbeat part of the control file. The SCN number.
In other words, when the instance is restored, the redo entry to be applied must be from cplrba _ * To cpodr.
Full checkpoint
SQL> select cplrba_seq as cur_seq #,
2 cplrba_bno as cur_blk #,
3 cpodr_seq as stop_seq #,
4 cpodr_bno as stop_blk #
5 from x $ kcccp
6 where cpodr_seq> 0;
Cur_seq # cur_blk # stop_seq # stop_blk #
----------------------------------------
37 97550 37 97778
SQL> select count (*) from V $ BH where dirty = 'y ';
Count (*)
----------
63
SQL> alter system checkpoint;
The system has been changed.
SQL> select count (*) from V $ BH where dirty = 'y ';
Count (*)
----------
0
Obviously, after the command is issued, all dirty blocks in the memory are written into the data file, so there is no dirty block in the memory.
Open the tracking file and you can see:
Beginning global checkpoint up to RBA [0x25. 17df2. 10], SCN: 662364
Completed checkpoint up to RBA [0x25. 17df2. 10], SCN: 662364
SQL> select to_number ('25', 'xx') from dual;
To_number ('25', 'xx ')
--------------------
37
SQL> select to_number ('17df2 ', 'xxxxxxxx') from dual;
To_number ('17df2 ', 'xxxxxxxx ')
-----------------------------
97778
Compare it with the query results of X $ kcccp. You can also see that in the full checkpoint, the redo entry corresponding to the dirty blocks written to the data file corresponds to the redo entry specified by stop_seq # And stop_blk.
Remember first, and then add