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

存储结构之控制文件

  其实,蛮蛋疼的,体系结构要想深入的理解,还需要配合后续的备份与恢复的实验和原理。但不管啦,先稍微了解一下。
 
  控制文件是个相当小的二进制文件,最多能增长到64m左右。
 
  参数文件告诉实例控制文件的位置。而控制文件告诉实例:数据库名,数据文件的名称及其位置,在线重做日志文件的名称及其位置,以及系统和各个数据文件的SCN信息。

  我们的oracle内部的几个人,都比较喜欢往ctl上面写东东,比如:
  server process会把数据库结构的变化更新到control file
  LGWR会把当前日志序列号记录到control file
  CKPT会把检查点信息记录到control file
  ARCn会把归档日志信息记录到control file
 
  有了以上的信息,因此,在mount阶段,SMON会去读控制文件,确认它上面的记录是否正确:
   1)上次关机的SCN             A
      上次关机的checkpoint      B
   2)日志组最后一条的记录       C
      RBA指针的位置             D
   若正常关机,则 A=B C=D
   若不正常关机,则 A>B  D>C
   这时,就需要派SMON去前滚,按重做日志的记录在内存中重做一遍,直到C=D。

  以下是我的控制文件的部分摘录:
  平台是:RHEL-5.8 ora10g
   *** SERVICE NAME:() 2012-07-10 10:09:23.691
   *** SESSION ID:(159.3) 2012-07-10 10:09:23.691
   Thread 1 checkpoint: logseq 17, block 2, scn 676899
     cache-low rba: logseq 17, block 40599
       on-disk rba: logseq 17, block 40868, scn 697180
     start recovery at logseq 17, block 40599, scn 0

  我们对控制文件的一些常见操作,比如:
  1)如何多路镜像控制文件?
  正常关机,cp一份,修改pfile,生成spfile,重启数据库

  2)查看控制文件的位置?
  i  SQL> show parameter control_files

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    control_files                        string      /u01/app/oracle/oradata/ORCL/c
                                                 ontrolfile/o1_mf_7xzsjpnk_.ctl
                                                 , /u01/app/oracle/flash_recove
                                                 ry_area/ORCL/controlfile/o1_mf
                                                 _7xzsjq6j_.ctl
  ii  SQL> select name from  v$controlfile;

    NAME
   --------------------------------------------
   /u01/app/oracle/oradata/ORCL/controlfile/o1_mf_7xzsjpnk_.ctl
   /u01/app/oracle/flash_recovery_area/ORCL/controlfile/o1_mf_7xzsjq6j_.ctl

  iii SQL> select value from v$parameter where name='control