Oracle控制文件基础

本文所述内容根据Oracle Database Administrator’s Guide 11g Release 2(11.2)--管理控制文件 章节学习整理而得。
一、控制文件概述
控制文件是一种二进制文件,它记录了数据库的物理结构。在控制文件当中包含以下信息:
1、数据库名称
2、与当前数据库相关联的数据文件和重做日志文件的名称和位置
3、数据库创建的时间
4、当前日志的序号
5、检查点信息
    数据库打开时,必须保证数据库能够向控制文件写入信息。如果控制文件丢失或损坏,数据库将无法启动到mount状态,并会给数据库的恢复带来一定的困难。
控制文件是随数据库的创建而创建的。默认情况下,至少会为其自身创建一个副本,在许多操作系统上都会为控制文件创建多个副本。在数据库创建期间,我们可以选择创建两个或更多的控制文件。如果丢失(损坏)或是想修改控制文件中的个别项目,也可以在以后创建它。

二、创建控制文件

    在数据库创建之前,通过oracle参数文件中的CONTROL_FILE参数指定控制文件的名字和保存的位置。在数据库startup期间,由实例识别和打开控制文件中包含的所有文件,在数据库操作期间,由实例负责写入信息和维护控制文件。
在创建数据库之前,如果未设置CONTROL_FILE初始化参数,则:
1、如果没有使用OMF,oracle将以默认的名称和路径创建控制文件
2、如果使用了OMF,oracle将根据OMF的设置确定控制文件的名称和路径
3、如果使用Orale的自动存储管理,通过设置DB_CREATE_FILE_DEST和DB_RECOVER_FILE_DEST初始化参数,Oracle ASM将自动在适当的位置创建控制文件。
之前所述的控制文件的创建是在创建数据库(create database)的同时创建控制文件,那么该在何时创建新的控制文件?又该如何创建新的控制文件呢?oracle的官方文档中给出了如下说明:
1、何时创建新的控制文件
    a、在控制文件发生永久性的损坏且之前未对控制文件进行备份
    b、需要修改控制文件中的某些内容
2、如何创建新的控制文件
    a、收集重做日志文件,数据文件,控制文件的信息
        select group#,member from v$logfile;
        select name,bytes from v$datafile;
        select value from v$parameter where name='control_files';
    b、关闭数据库
    c、备份数据文件和重做日志文件
    d、启动实例到nomount状态
    e、使用create controlfile语句创建新的控制文件,如下

点击(此处)折叠或打开

  1. CREATE CONTROLFILE
  2.    SET DATABASE prod  --指定数据库的名字
  3.    LOGFILE GROUP 1 ('/u01/oracle/prod/redo01_01.log',
  4.                     '/u01/oracle/prod/redo01_02.log'),
  5.            GROUP 2 ('/u01/oracle/prod/redo02_01.log',
  6.                     '/u01/oracle/prod/redo02_02.log'),
  7.            GROUP 3 ('/u01/oracle/prod/redo03_01.log',
  8.                     '/u01/oracle/prod/redo03_02.log')
  9.    RESETLOGS  --重置日志xuhao
  10.    DATAFILE '/u01/oracle/prod/system01.dbf' SIZE 3M,
  11.             '/u01/oracle/prod/rbs01.dbs' SIZE 5M,
  12.             '/u01/oracle/prod/users01.dbs' SIZE 5M,
  13.             '/u01/oracle/prod/temp01.dbs' SIZE 5M
  14.    MAXLOGFILES 50
  15.    MAXLOGMEMBERS 3
  16.    MAXLOGHISTORY 400
  17.    MAXDATAFILES 200
  18.    MAXINSTANCES 6
  19.    ARCHIVELOG;
    f、备份新建控制文件
    g、修改control_file初始化参数,建立控制文件的多路复用,如果修改了数据库的名字,还需要修改初始化参数文件中的DB_NAME参数
    h、以如下方式打开数据库:
        alter database open;
        alter database open resetlog;
3、控制文件创建后的问题处理
    在使用新建的控制文件打开数据库后,应查看告警日志中是否记录了诸如数据字典和控制文件不一致之类的信息。例如:某个数据文件在数据字典中存在但是在控制文件中却没有对应的记录等等。
    如果某个文件在数据字典中存在而在控制文件中不存在,数据库将在控制文件中创建一个名为MISSINGnnnn的占位符条目,nnnn是以十进制表示的数据文件编号。控制文件中的MISSINGnnnn标志意味着文件号为nnnn的数据文件被离线且需要介质恢复。
    与此相反,如果某个数据文件的信息在控制文件中存在而在数据字典中却不存在,数据库将移除该信息。在上述的两种情况中,我们都可以从数据库的告警日志中得到相关的说明信息,所以说,在使用新建的控制文件打开数据库时,一定不要忘了查看告警日志中是否提示了相关的异常信息。
4、创建控制文件期间的错误处理
    当使用新建的控制文件mount和open数据库时,如果出现了ORA错误信息(通常有 ORA-01173ORA-01176ORA-01177ORA-01215, ORA-01216),绝大多数的原因为:在create controlfile语句中遗漏了相关文件的信息或包含了不该有的文件的信息,这时只能重新创建控制文件了。

三、多路复用控制文件

    Oracle推荐最好将控制文件分布在不同的物理磁盘上。如果由于磁盘故障导致控制文件发生损坏,与之相关联的实例应被关闭。一旦磁盘被修复,可以通过其他磁盘上的控制文件恢复损坏的控制文件。待恢复完成后实例就可以重新启动,不需要进行介质恢复。
多路复用控制文件是如何进行工作的呢?
1、数据库启动时,仅读取control_file中第一个参数文件的信息
2、数据库打开时,将会向control_file中所有的控制文件更新信息
3、在数据库操作期间,如果任意一个控制文件不可用,实例将无法操作。

四、备份与恢复控制文件

1、何时需要备份控制文件:
    a、添加、删除或重命名数据文件                                        
    b、添加、删除一个表空间或修改表空间的读写状态                 //在添加,删除或重命名的前后都需要进行备份吗?文档没有说明,我认为应该这样。
    c、添加、删除重做日志文件或组
2、备份控制文件的方法如下:
    a、以二进制文件的形式备份控制文件:alter database backup controlfile to '/u02/backup';
    b、以SQL语句的形式备份控制文件便于以后可以重建:alter database backup controlfile to trace;该备份的存放位置可以通过查看alert告警日志获知。
3、恢复控制文件的方法如下:
    a、假设control_file参数中的一个参数文件发生损坏,但是控制文件的存放目录仍然可以访问,这时可以:关闭数据库--&gtcp控制文件另一副本覆盖损坏控制文件--&gt startup
    b、假设control_file参数中的一个参数文件发生发生介质损坏,这时可以:关闭数据库 --&gt 在新介质上恢复控制文件 --&gt 修改control_file参数 --&gt startup
4、删除控制文件
    关闭数据库 --&gt 修改control_file参数(删除对于信息) --&gt startup,该系列操作不会删除操作系统上的物理文件,需要手动删除。

五、记录控制文件相关信息的数据字典视图
1、v$database:记录数据库中关于控制文件的信息。
例如:
SQL> select controlfile_type,controlfile_created,controlfile_change#,controlfile_time from v$database;
CONTROLFILE_TY CONTROLFILE_CR CONTROLFILE_CHANGE# CONTROLFILE_TI
-------------- -------------- ------------------- --------------
CURRENT        31-1月 -14                 1237887 11-3月 -14
2、v$controlfile:显示控制文件的路径和名称。
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
D:\APP\ORACLE\ORADATA\ORCL\CONTROL01.CTL
D:\APP\ORACLE\FLASH_RECOVERY_AREA\ORCL\CONTROL02.CTL
3、v$controlfile_record_section:数据字典视图的作用不清楚
SQL> select * from v$controlfile_record_section;
TYPE                         RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID
---------------------------- ----------- ------------- ------------ ----------- ---------- ----------
DATABASE                             316             1            1           0          0          0
CKPT PROGRESS                       8180            11            0           0          0          0
REDO THREAD                          256             8            1           0          0          0
REDO LOG                              72            16            3           0          0          3
DATAFILE                             520           100            6           0          0         40
FILENAME                             524          2298           10           0          0          0
TABLESPACE                            68           100            7           0          0          3
TEMPORARY FILENAME                    56           100            1           0          0          1
RMAN CONFIGURATION                  1108            50            0           0          0          0
LOG HISTORY                           56           292           13           1         13         13
OFFLINE RANGE                        200           163            0           0          0          0
ARCHIVED LOG                         584            28            0           0          0          0
BACKUP SET                            40           409            0           0          0          0
BACKUP PIECE                         736           200            0           0          0          0
BACKUP DATAFILE                      200           245            0           0          0          0
BACKUP REDOLOG                        76           215            0           0          0          0
DATAFILE COPY                        736           200            1           1          1          1
BACKUP CORRUPTION                     44           371            0           0          0          0
COPY CORRUPTION                       40           409            0           0          0          0
DELETED OBJECT                        20           818            1           1          1          1
TYPE                         RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID
---------------------------- ----------- ------------- ------------ ----------- ---------- ----------
PROXY COPY                           928           246            0           0          0          0
BACKUP SPFILE                        124           131            0           0          0          0
DATABASE INCARNATION                  56           292            2           1          2          2
FLASHBACK LOG                         84          2048            0           0          0          0
RECOVERY DESTINATION                 180             1            1           0          0          0
INSTANCE SPACE RESERVATION            28          1055            1           0          0          0
REMOVABLE RECOVERY FILES              32          1000            0           0          0          0
RMAN STATUS                          116           141            0           0          0          0
THREAD INSTANCE NAME MAPPING          80             8            8           0          0          0
MTTR                                 100             8            1           0          0          0
DATAFILE HISTORY                     568            57            0           0          0          0
STANDBY DATABASE MATRIX              400            31           31           0          0          0
GUARANTEED RESTORE POINT             212          2048            0           0          0          0
RESTORE POINT                        212          2083            0           0          0          0
DATABASE BLOCK CORRUPTION             80          8384            0           0          0          0
ACM OPERATION                        104            64            6           0          0          0
FOREIGN ARCHIVED LOG                 604          1002            0           0          0          0
37 rows selected
4、v$parameter:说明在初始化参数中是由那个参数决定控制文件的名称和路径的。
SQL> select name from v$parameter where name='control_files';
NAME
--------------------------------------------------------------------------------
control_files

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29515435/viewspace-1106595/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29515435/viewspace-1106595/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值