管理Oracle控制文件

控制文件概要

控制文件记录了数据库的物理结构等重要信息,是用于维护数据库完整性的重要文件。控制文件是一个很小的二进制文件,在启动Oracle数据库时需要从中读取信息,它的大小一般是在创建数据库时确定。在对数据库进行操作过程中,会不断将信息写进控制文件,所以在Oracle数据库打开的过程中,控制文件必须是可用的。
在数据库的启动过程中,当装载(MOUNT)数据库时,Oracle会按照初始化参数文件中的control_files参数的设置查找并打开控制文件;而当打开(OPEN)数据库时,Oracle会根据控制文件所记录的数据文件和重做日志信息,打开数据文件和重做日志文件。当Oracle服务器出现实例失败或介质失败时,通过控制文件所记载的日志和检查点信息,Oracle可以确定执行恢复所需要的日志文件。
控制文件一旦丢失或损坏,将会导致整个数据库不可用。由于控制文件的重要性,每个数据库应该至少拥有2个控制文件,并且分布到不同的磁盘,便于还原和恢复。
控制文件是一个二进制文件,每个数据库有唯一的一个控制文件,但是它会维护多个完全相同的副本,在数据库创建的时候创建,用来记录数据库的物理结构,包括:
  1. 数据库名称和数据唯一识别符DBID
  2. 数据文件、重做日志文件和归档重做日志文件的名称和位置
  3. 数据库创建的时间戳
  4. 当前日志序列号
  5. 检查点信息
  6. 表空间信息
  7. RMAN备份

控制文件相关数据字典


SELECT MEMBER FROM v$logfile;
SELECT NAME FROM v$datafile;
SELECT VALUE FROM v$parameter WHERE NAME = 'control_files';
SELECT * FROM v$diag_info;

SELECT * FROM v$database;
SELECT * FROM v$controlfile;
SELECT * FROM v$controlfile_record_section;
SELECT * FROM v$parameter;

控制文件管理

1、增加控制文件
SQL> startup nomount

SQL> alter system set control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/fast_recovery_area/orcl/control02.ctl','/home/oracle/control03.ctl' scope=spfile;
注:SCOPE=spfile重启数据库才会生效
[oracle@strong oracle]$ cp oradata/orcl/control01.ctl /home/oracle/control03.ctl

SQL> shutdown immediate
SQL> startup
---SQL> alter database mount;
---SQL> alter database open;
SQL> select name from v$controlfile;
2、删除控制文件
SQL> startup nomount
SQL> alter system set control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/fast_recovery_area/orcl/control02.ctl' scope=spfile; 

SQL> shutdown immediate
SQL> startup
3、创建控制文件
CREATE CONTROLFILE
   SET DATABASE prod
   LOGFILE GROUP 1 ('/u01/oracle/prod/redo01_01.log', 
                    '/u01/oracle/prod/redo01_02.log'),
           GROUP 2 ('/u01/oracle/prod/redo02_01.log', 
                    '/u01/oracle/prod/redo02_02.log'),
           GROUP 3 ('/u01/oracle/prod/redo03_01.log', 
                    '/u01/oracle/prod/redo03_02.log') 
   RESETLOGS
   DATAFILE '/u01/oracle/prod/system01.dbf' SIZE 3M,
            '/u01/oracle/prod/rbs01.dbs' SIZE 5M,
            '/u01/oracle/prod/users01.dbs' SIZE 5M,
            '/u01/oracle/prod/temp01.dbs' SIZE 5M
   MAXLOGFILES 50
   MAXLOGMEMBERS 3
   MAXLOGHISTORY 400
   MAXDATAFILES 200
   MAXINSTANCES 6
   ARCHIVELOG;

两种备份控制文件的方法

方法一:二进制备份
1、使用二进制备份将控制文件备份到指定的二进制文件,当控制文件丢失时,可以通过这个备份恢复。
SQL> alter database backup controlfile to 'D:/backup/ctrl.bak';

Database altered.
2、备份到TRACE文件:
SQL> alter database backup controlfile to trace;

Database altered.
确认用户的DEST目录:
SQL> show parameter user_dump_dest;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest                       string      e:\app\alen.liu\diag\rdbms\orcl\orcl\trace
查找对应的TRACE文件:
SQL> SELECT m.SPID
  2    FROM v$process m
  3   WHERE m.addr =
  4         (SELECT t.paddr
  5            FROM v$session t
  6           WHERE t.sid = (SELECT sid FROM v$mystat WHERE rownum = 1));

SPID
------------------------
8976
E:\app\alen.liu\diag\rdbms\orcl\orcl\trace\orcl_ora_8976.trc
可以利用控制文件脚本重建控制文件。
SQL> STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 'E:\APP\ALEN.LIU\ORADATA\ORCL\REDO01.LOG'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 'E:\APP\ALEN.LIU\ORADATA\ORCL\REDO02.LOG'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 'E:\APP\ALEN.LIU\ORADATA\ORCL\REDO03.LOG'  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  'E:\APP\ALEN.LIU\ORADATA\ORCL\SYSTEM01.DBF',
  'E:\APP\ALEN.LIU\ORADATA\ORCL\SYSAUX01.DBF',
  'E:\APP\ALEN.LIU\ORADATA\ORCL\UNDOTBS01.DBF',
  'E:\APP\ALEN.LIU\ORADATA\ORCL\USERS01.DBF',
  'E:\APP\ALEN.LIU\ORADATA\ORCL\EXAMPLE01.DBF',
  'E:\APP\ALEN.LIU\ORADATA\ORCL\RMANTS.DBF',
  'E:\APP\ALEN.LIU\ORADATA\ORCL\TEST.DBF'
CHARACTER SET AL32UTF8;
方法二:RMAN备份控制文件
RMAN可以单独备份控制文件,如果没启用快闪恢复区,则使用Format指定控制文件的备份目录;如果启用了快闪恢复区,会自动将其被分到快闪恢复区的备份集(BACKUPSET目录下)中。
启用快闪恢复区时备份控制文件:
RMAN> backup current controlfile;

Starting backup at 31-MAY-17
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=125 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
channel ORA_DISK_1: starting piece 1 at 31-MAY-17
channel ORA_DISK_1: finished piece 1 at 31-MAY-17
piece handle=E:\APP\ALEN.LIU\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2017_05_31\O1_MF_NCNNF_TAG20170531T151938_DLWVND53_.BKP tag=TAG20170531T151938 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 31-MAY-17

Starting Control File and SPFILE Autobackup at 31-MAY-17
piece handle=D:\BACKUP\C-1459390975-20170531-00 comment=NONE
Finished Control File and SPFILE Autobackup at 31-MAY-17

RMAN>
自动备份控制文件,需要配置下面两个参数:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'd:/backup/%F';
CONFIGURE CONTROLFILE AUTOBACKUP ON;
因为设置了自动备份,当数据结构改变时,控制文件会自动备份:
SQL> CREATE TABLESPACE TEST DATAFILE 'd:/backup/test.dbf' SIZE 10M;

Tablespace created.

SQL> drop tablespace test including contents and datafiles;

Tablespace dropped.
通过上面两个步骤,会发现,控制文件已经自动备份了。
控制文件记录了三种检查点SCN号。
系统检查点:当检查点进程启动时,会将检查点结束时间转化为SCN号记录在控制文件中。该检查点是全局范围内的,当文件级别的检查点发生时,不会更新系统检查点SCN,记录在控制文件中的系统检查点可以通过如下方式取得。
SQL> select name , checkpoint_change# from v$database;

NAME      CHECKPOINT_CHANGE#
--------- ------------------
ORCL                14393851
数据文件检查点:当检查点进程启动时,包括全局范围以及文件级别的检查点都会在控制文件记录每个数据文件上发生的检查点SCN。将数据文件设置为正常离线、只读时,将表空间设置为begin backup时,触发文件级别的检查点,并将检查点更新控制文件和数据文件头部以后,就不在变化。
SQL> select file#,checkpoint_change#,last_change# from v$datafile;

     FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------
         1           14393851
         2           14393851
         3           14393851
         4           14393851
         5           14393851
         6           14393851
         7           14393851
结束SCN:每个数据文件都有一个结束SCN,在数据库运行期间,只要是在线的、可读写的数据文件,其终止SCN都为空,对正常关闭数据库时,或将数据文件正式离线、只读时,都会由于触发了检查点进程,从而在控制文件里记录每个数据文件上的结束时SCN。
触发系统检查点SQL:
SQL> alter system checkpoint;

你可能感兴趣的:(controlfile,控制文件,-----【11g_体系结构】,Oracle系列)