首页 > 代码库 > oracle_控制文件--笔记

oracle_控制文件--笔记

oracle数据库物理文件大致有8种

  1.     参数文件(parameter file)
  2.     跟踪文件(trace file)
  3.     警告文件(alert file)
  4.     数据文件(data file)
  5.     临时文件(temp file)
  6.     控制文件(control file)
  7.     重做日志文件(redo log file)
  8.     密码文件(password file)

 

我认为最重要的是数据文件和重做日志文件。因为就算其他文件都损坏了,我也能恢复出需要的其他数据。
(数据管理的重心是重在预防,而不是亡羊补牢)


控制文件是什么?控制文件的作用?
    其实吧,控制文件是一个很小的二进制文件,用于记录数据库的物理结构。
    ----(也是说,把它需要重建策成跟踪文件才能用文本工具打开阅览内容)。
    

控制文件记录着oracle很重要的信息。

    比如说:

  1.         创建数据库的时间戳,
  2.         数据文件的名字及位置,
  3.         重做日志文件的名字及位置,
  4.         检查点信息(Checkpoint),
  5.         表空间信息
  6.         日志历史记录(Log History)
  7.         归档日志的信息
  8.         备份信息
  9.         当前的日志序列号(Log Sequence Number)


控制文件以数据的重要性来分可分为两种: 不可覆盖部分可覆盖部分

        不可覆盖部分:记录着数据文件,重做日志文件的名称和位置,表空间信息,检查点信息等。
            (数据库启动-->参数文件-->控制文件-->数据,重做日志文件)-----文件的联系
        
        可覆盖部分: 归档日志文件信息和RMAN备份信息。
        control_file_record_keep_time参数决定着这两者的保存时间。(一般默认是7天)


与控制文件相关的视图
   
     v$controlfile_record_section----录了几乎全部的controlfile中的相关信息。
    SQL> desc v$controlfile_record_section
     Name                                      
     ----------------
     TYPE                                      -------类型
     RECORD_SIZE                               ------每个类型每条记录占用的空间       
     RECORDS_TOTAL                             ------每个类型所能保留的最大记录数       
     RECORDS_USED                              -------每个类型当前已占用的记录数
     FIRST_INDEX                                 
     LAST_INDEX                                        
     LAST_RECID                                         

    v$controlfile---"name列",记录每个控制文件的存储的位置。
    或---
    参数文件----control_files参数也记录着控制文件的位置.

    SQL> select name from v$controlfile
      2  /
    NAME
    --------------------------------------------------------------------------
    /home/app/oracle/oradata/orcl/control01.ctl
    /home/app/oracle/flash_recovery_area/orcl/control02.ctl




    SQL> select value from v$parameter2 where name=<control_files>;
    VALUE
    -----------------------------------------------------------------------------
    /home/app/oracle/oradata/orcl/control01.ctl
    /home/app/oracle/flash_recovery_area/orcl/control02.ctl



    看来我的oracle的控制文件当前只有一个备份,即共两个而已。
    但控制文件太重要了!
    oracle官方建议至少应该拥有控制文件的三个以上的副本!
    
---而您可以通过多路复用技术,将控制文件的副本创建到不同的磁盘上。
    然后再修改初始化参数文件spfile中的 control_files 参数,使之包含所有的控制文件.
    也就是说,把oracle中的控制文件全包含到spfile文件中。

这样做的好处有哪些呢?

    如果你的磁盘坏了,oracle仍能够快速恢复。(是不是很方便?)
    


-----下面是如何使用多路复用技术了。
    
    1.查看$controlfile,我oracle的控制文件有1个。
    SQL> select name from v$controlfile;
    NAME
    --------------------------------------------------------------------------------
    /home/app/oracle/oradata/orcl/control01.ctl
            
    2.oracle离线。
    SQL> shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.

    
    3.在你的操作系统上手动备份控制文件。注意:控制文件的手动备份一定要在数据库停止后再执行!
      [oracle@yzh ~]$ cp /home/app/oracle/oradata/orcl/control01.ctl /oracle1
    [oracle@yzh ~]$ cp /home/app/oracle/oradata/orcl/control01.ctl /oracle2


    4.SQL> startuo nomount      
      -------非安装启动,这种方式启动下可执行:重建控制文件、重建数据库
    
    5. 接着呢,修改 spfile 中的 control_files 这个属性,为其增加2个控制文件信息,
       存放在/oracle1/和/oracle2/下。

    SQL> alter system set control_files=
      2  </home/app/oracle/oradata/orcl/control01.ctl>,
      3  </oracle1/control01.ctl>,
      4  </oracle2/control01.ctl> scope=spfile
      5  /
    System altered.


    6.启动oracle,查看控制文件,多了两个控制文件。
    SQL> startup
    SQL> select name from v$controlfile;

    NAME
    --------------------------------------------------------------------------------
    /home/app/oracle/oradata/orcl/control01.ctl
    /oracle1/control01.ctl
    /oracle2/control01.ctl



哪些情况需要备份控制文件呢?----

  1.     增加,删除,或者重命名数据文件时
  2.     增加,删除表空间时,或者表空间可读可写状态时
  3.     增加或者删除重做日志文件或组时。


------备份控制文件的命令

    alter database backup controlfile to <PATH.bak>;-----PTAH:路径。
    
----备份到控制文件后,如果突然你三个控制文件都损坏(这个几率太小了。)
 


oracle_控制文件--笔记