Oracle手工恢复控制文件的深入解析

      v$database.CHECKPOINT_CHANGE#  (last scn checkpointed)
      v$database.CONTROLFILE_SEQUENCE# (control file sequence number incremented by control file transactions)
      v$database.CONTROLFILE_CHANGE# (last scn in backup control file ;null if the control file is not a backup)
      v$datafile.CHECKPOINT_CHANGE#  (scn at last checkpoint)
      v$datafile_header. CHECKPOINT_CHANGE# (datafile checkpoint change#
      v$log.FIRST_CHANGE# (lowest system change number(SCN) in the log
 
v$database.CHECKPOINT_CHANGE# 代表是数据库最后一次进行完全检查点的scn号。只有在进行完全检查点的时候才进行更新,更新的值为当前现在数据库的current_scn值。
 v$database.CONTROLFILE_CHANGE# (代表从备份中恢复过来的控制文件的最后一个scn号假如是刚刚从备份中恢复,如果控制文件不是从备份中恢复过来的,那么该值为null,但是当控制文件在数据库打开的时候,那么该值会随着增量检查点和完全检查点或是数据库结构变化时会设置为当下的current_scn值。
 
SYS@orcl#select CHECKPOINT_CHANGE#,CONTROLFILE_SEQUENCE#,CONTROLFILE_CHANGE# from v$database;
 
CHECKPOINT_CHANGE# CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE#
 ------------------ --------------------- -------------------
            4921905                14285            4922868
 23:13:45 SYS@orcl#select CHECKPOINT_CHANGE#,CONTROLFILE_SEQUENCE#,CONTROLFILE_CHANGE# from v$database;
 
CHECKPOINT_CHANGE# CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE#
 ------------------ --------------------- -------------------
            4935440                14311            4935548
 
23:13:46 SYS@orcl#select current_scn from v$database;
 
CURRENT_SCN
 -----------
    4935575
 
23:13:46 SYS@orcl#alter system checkpoint;
 select CHECKPOINT_CHANGE#,CONTROLFILE_SEQUENCE#,CONTROLFILE_CHANGE# from v$database;
 系统已更改。
 
23:13:46 SYS@orcl#
 
CHECKPOINT_CHANGE# CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE#
 ------------------ --------------------- -------------------
            4935576                14313            4935578
 
23:13:49 SYS@orcl#
 23:14:09 SYS@orcl#select CHECKPOINT_CHANGE#,CONTROLFILE_SEQUENCE#,CONTROLFILE_CHANGE# from v$database;
 
CHECKPOINT_CHANGE# CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE#
 ------------------ --------------------- -------------------
            4935576                14314            4935649
 
23:16:42 SYS@orcl#alter system switch logfile;
 
系统已更改。
 
23:16:52 SYS@orcl#select CHECKPOINT_CHANGE#,CONTROLFILE_SEQUENCE#,CONTROLFILE_CHANGE# from v$database;
 
CHECKPOINT_CHANGE# CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE#
 ------------------ --------------------- -------------------
            4935576                14318            4935675
 
23:16:55 SYS@orcl#
 
v$database.CONTROLFILE_SEQUENCE# (代表根据数据库的变化进行增加的序列,在查询的时候显示的是当前的控制文件是在哪个sequence号,随着增量检查点和完全检查点或是数据库结构变化而incremental。
 
v$datafile.CHECKPOINT_CHANGE#  (这个值代表的是数据文件中最后一个last checkpoint 的scn号与v$database 中的CHECKPOINT_CHANGE#相同。也就是说当进行完全检查点的时候,需要数据文件中的scn和控制文件中的scn保持一致性。当我们启动到数据库mount状态下然后dump数据文件看到的checkpoint scn正是这个值,在进行数据库启动要验证该值)
 23:26:05 SYS@orcl#select CHECKPOINT_CHANGE#,CONTROLFILE_SEQUENCE#,CONTROLFILE_CHANGE# from v$database;
 
CHECKPOINT_CHANGE# CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE#
 ------------------ --------------------- -------------------
            4935675                14332            4937039
 
23:26:30 SYS@orcl#select checkpoint_change# from v$datafile;
 
CHECKPOINT_CHANGE#
 ------------------
            4935675
            4935675
            4935675
            4935675
            4935675
            4935675
            4935675
            4935675
            4935675
            4935675
            4935675
 
CHECKPOINT_CHANGE#
 ------------------
            4935675
 
已选择12行。
 
23:26:31 SYS@orcl#alter system checkpoint;
 
系统已更改。
 
23:27:27 SYS@orcl#select CHECKPOINT_CHANGE#,CONTROLFILE_SEQUENCE#,CONTROLFILE_CHANGE# from v$database;
 
CHECKPOINT_CHANGE# CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE#
 ------------------ --------------------- -------------------
            4937086                14336            4937088
 
23:27:31 SYS@orcl#select checkpoint_change# from v$datafile;
 
CHECKPOINT_CHANGE#
 ------------------
            4937086
            4937086
            4937086
            4937086
            4937086
            4937086
            4937086
            4937086
            4937086
            4937086
            4937086
 
CHECKPOINT_CHANGE#
 ------------------
            4937086
 
已选择12行。
 
23:27:32 SYS@orcl#
 v$datafile_header. CHECKPOINT_CHANGE# (代表数据文件头的检查点scn,这个值和数据文件的检查点相一致,在数据库运行到open状态进行的数据文件dump文件中的header 中的checkpoint scn就是此值。)

相关推荐