控制文件
6.1 控制文件介绍
控制文件是一个很小的二进制文件
定义当前数据库的物理状态
保证数据库的完整性
需求的
   在数据库启动到 mount状态时使用,帮助数据库启动
控制文件在数据库服务器启动过程中必须是可写的。没有控制文件数据库不能 mount,并且恢复时也是困难的。
数据库创建的过程中创建控制文件。默认的至少一个控制文件在数据库创建时创建。
6.2 查看控制文件的位置
1.通过 spfile
 Strings spfileSID.ora
2.通过 show parameter spfile
3.selecet * from v$controlfile;
6.3 数据库启动的过程
1.Unmount
 启动进程
 读取 $oracle_home/dbs中的spfile文件
 分配 sga
 启动后台进程
 打开 alter.log和trace 文件
2.mount
 实例和启动的数据库绑定
 加载并启动控制文件
 读取控制文件中包含的数据库名字和数据文件和联机重做日志的状态
3.open
   开启 redo文件和数据文件
  
6.4 controlfile中包含的内容
   数据库的名字和 dbid
   数据库创建的时间
   表空间的名字
   数据文件和联机重做日志的名称和位置
 联机重做日志的顺序号
 备份信息
 联机重做日志信息
6.5 特点
每个数据库至少有两个控制文件,并且存放在不同的磁盘上。数据库同时给每个控制文件同时写信息,读只读第一个控制文件,如果控制文件中的任何一个损坏的时,实例失败。
6.6 备份控制文件的条件
1.增加,删除,或者重命名数据文件时
2.增加,删除表空间时,或者表空间可读可写状态时
3.增加或者删除重做日志文件或组时。
   6.7 控制文件大小的决定因素
       主要是受在创建数据库文件时的 maxdatafiles ,maxlogfiles,maxlogmembers,maxloghistory,maxinstances参数决定的。
   6.8 创建控制文件
       6.8.1 创建初始控制文件
              初始化参数文件是在创建数据库时创建的,控制文件的名称是由初始化参数文件中的 control_files参数决定的。下面是一个control_files的初始化参数的例子

 

          Control_files=(‘/ u01/oracle/prod/control01.ctl’,

 

‘/ u01/oracle/prod/control02.ctl’,

 

‘/ u01/oracle/prod/control03.ctl’)

 

              如果在数据库创建时参数文件指定的控制文件的文件名存在则使用controlfile reuse,否则将会报错。如果创建的新的控制文件与旧的控制文件的尺寸不一致时,不能使用controlfile reuse。
        6.8.2创建额外的控制文件,重命名和修改控制文件的位置
              Alter system set control_file=’’,’’;
              Shutdown immediate
              Cp controlfile01.log control02.log
              Startup
        6.8.3 创建新的控制文件
              创建新的控制文件的条件
1. 数据文件中所有的控制文件已经永久损坏,并且没有备份
2. 你想修改在创建数据库时的一些参数时。这些参数包含数据库的名字, maxlogfiles,maxlogmembers,maxloghistory,maxdatafiles,
maxinstances.
 步骤
       1. 列出说有的数据文件和联机重做日志文件
          Select member from v$logfile;
          Select name from v$datafile;
          Select value from v$parameter where name=’control_files’
 
       2. 关闭数据库
          Shutdown immediate
       3. 备份所有的数据文件和重做日志文件数据库
       4. 启动新的实例到 unmount状态
       5. 使用 create controlfile命令创建数据库
           如果重命名数据库的名字时,必须使用 resetlogs,其他则可以使用noresetlogs。
      6. 备份新的控制文件
      7. 编辑 control_files,使控制文件中参数和初始化参数中的值一致,控制文件中不包含备份信息,如果想更改数据库的名字,则需要修改db_name指定新的名称。
       8. 如果有必要则恢复数据库,如果不能恢复数据库则调到下一步。
如果控制文件是恢复数据库中的一部分则恢复数据库。如果使用 noresetlogs创建控制文件,你可以恢复数据库完成后,关闭数据库恢复。
如果新创建的控制文件使用了 resetlogs语句,你必须使用 using backup control file。如果数据文件和连接重组日志丢失,则用工具恢复他们。
       9. 使用下面的方法打开数据库
如果没有执行恢复,或者执行步骤完成后关闭了数据库的恢复,用
Alter database open;
如果在创建 controlfile时使用了resetlogs创建了控制文件时,使用alter database open resetlogs;
   6.9 备份控制文件
       备份到指定文件
       Alter database backup controlfile to ‘/u01/backup/controlfile.bkp’;
       或者备份到 trace文件中
      Alter database backup controlfile to trace;
   6.7 创建新的控制文件
         在下列情况下你必须创建新的控制文件
         1.数据库中的所有控制文件都损坏,并且没有备份
         2.你要更改数据库的名称
       
   6.8相关的动态性能参数
       V$controlfile
          Status 如果名字不能确定 这这个值是 invalid
                 如果这个名字能确定则这个值为空
          Name   是控制文件的路径加名称
     IS_RECOVERY_DEST_FILE  表明控制文件是否在闪回区。
     Block_size 控制文件的块大小
     File_size_blks 控制文件的大小
 
       V$controlfile_record_section