日期:2014-05-16  浏览次数:20519 次

深入分析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