zoukankan      html  css  js  c++  java
  • 管理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:appalen.liudiag
    dbmsorclorcl	race
    查找对应的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:appalen.liudiag
    dbmsorclorcl	raceorcl_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:APPALEN.LIUORADATAORCLREDO01.LOG'  SIZE 50M BLOCKSIZE 512,
      GROUP 2 'E:APPALEN.LIUORADATAORCLREDO02.LOG'  SIZE 50M BLOCKSIZE 512,
      GROUP 3 'E:APPALEN.LIUORADATAORCLREDO03.LOG'  SIZE 50M BLOCKSIZE 512
    -- STANDBY LOGFILE
    DATAFILE
      'E:APPALEN.LIUORADATAORCLSYSTEM01.DBF',
      'E:APPALEN.LIUORADATAORCLSYSAUX01.DBF',
      'E:APPALEN.LIUORADATAORCLUNDOTBS01.DBF',
      'E:APPALEN.LIUORADATAORCLUSERS01.DBF',
      'E:APPALEN.LIUORADATAORCLEXAMPLE01.DBF',
      'E:APPALEN.LIUORADATAORCLRMANTS.DBF',
      'E:APPALEN.LIUORADATAORCLTEST.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:APPALEN.LIUFLASH_RECOVERY_AREAORCLBACKUPSET2017_05_31O1_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:BACKUPC-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;

  • 相关阅读:
    Ember.js 入门指南——计算属性(compute properties)
    Ember.js 入门指南——扩展(reopen)
    Ember.js 入门指南——类的定义、初始化、继承
    Ember.js 入门指南——目录
    Ember.js 入门指南——{{action}} 助手
    ubuntu按转jdk
    ubuntu设置电脑作为wifi热点
    一步完成linux安装jdk
    GStreamer基础教程13
    GStreamer基础教程12
  • 原文地址:https://www.cnblogs.com/alen-liu-sz/p/12975729.html
Copyright © 2011-2022 走看看