深入分析Oracle数据库中的checkpoint_change#
本文地址:http://wallimn.iteye.com/blog/1199561,转载请保留。
1、系统检查点(记录在控制文件中)SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
539625
2、数据文件检查点(记录在控制文件中)SQL> select file#,checkpoint_change#,last_change# from v$datafile;
FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------
1 539625
2 539625
3 539625
4 539625
5 539625
3、数据文件头检查点(记录在数据文件中)SQL> select file#,checkpoint_change# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 539625
2 539625
3 539625
4 539625
5 539625
以上三个checkpoint_change#要一致(只读、脱机表空间除外),数据库才能正常打开。否则会需要进行一步的处理。正常关库时,会生成新的检查点,写入上述三个checkpoint_change#,同时数据文件中的last_change#也会记录下该检查点,也就是说三个checkpoint_change#与last_change#记录着同一个值。
通过以下SQL可以证明
SQL> shutdown immediate
SQL> startup mount
SQL> select file#,checkpoint_change#,last_change# from v$datafile;
FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------
1 540270 540270
2 540270 540270
3 540270 540270
4 540270 540270
5 540270 540270
SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
540270
SQL> select file#,checkpoint_change# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 540270