zoukankan      html  css  js  c++  java
  • 15->控制文件的概念和操作

    一、Oracle 控制文件

            为二进制文件,初始化大小由CREATE DATABASE指定,可以使用RMAN备份

            记录了当前数据库的结构信息,同时也包含数据文件及日志文件的信息以及相关的状态,归档信息等等

            在参数文件中描述其位置,个数等等。通常采用分散放开,多路复用的原则。在mount阶段被读取,open阶段一直被使用

            维护数据库一致性(数据库启动时会比较控制文件与联机日志文件中的ckpt,即起始scn号,如相等则正常启动,否则需要介质恢复)

            一个控制文件只能属于一个数据库

            控制文件的任意修改将写入到初始化参数中指定的所有控制文件中,读取时则仅读取第一个控制文件

            控制文件只能连接一个数据库,控制文件的大小一般不要超过MB,最多为个,最少一个,互为镜像

                   

            控制文件中包含的内容

                数据库的名字、ID、创建的时间戳

                表空间的名字

                联机日志文件、数据文件的位置、个数、名字

                联机日志的Sequence号码

                检查点的信息

                撤销段的开始或结束

                归档信息

                备份信息

        使用strings命令查看 (可以看到其中包含了sid  orcl)

        C:Usersjiaozi>strings c:/a.ctl
           }|{z
           KVORCL
          7ORCL
          JFrW
          7ORCL
         JFrW
         orcl
         orcl

    二、查看控制文件的相关信息

        1.使用相关视图来查看

            V$CONTROLFILE                   --列出实例中所有控制文件的名字及状态信息

            V$PARAMETER                     --列出所有参数的位置及状态信息

            V$CONTROLFILE_RECORD_SECTION    --列出控制文件中记录的部分信息

            SHOW PARAMETER CONTROL_FILES    --列出控制文件的名字、状态、位置等

    三 如果添加控制文件

    -----查询控制文件

    SQL> show parameter control
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    control_file_record_keep_time        integer     7
    control_files                        string      C:ORACLEPRODUCT10.2.0ORADA
                                                     TAORCLCONTROL01.CTL, C:ORAC
                                                     LEPRODUCT10.2.0ORADATAORCL
                                                     CONTROL02.CTL, C:ORACLEPROD
                                                     UCT10.2.0ORADATAORCLCONTRO
                                                     L03.CTL

    --添加一个控制文件

    SQL> alter system set control_files='C:ORACLEPRODUCT10.2.0ORADATAORCLCONTR
    OL01.CTL','C:ORACLEPRODUCT10.2.0ORADATAORCLCONTROL02.CTL', 'C:ORACLEPROD
    UCT10.2.0ORADATAORCLCONTROL03.CTL','C:ORACLEPRODUCT10.2.0ORADATAORCLCO
    NTROL04.CTL' scope=spfile;


    系统已更改。


    因为每个控制文件内容一样拷贝一个控制文件

    C:>copy C:ORACLEPRODUCT10.2.0ORADATAORCLCONTROL01.CTL C:ORACLEPRODUCT1
    0.2.0ORADATAORCLCONTROL04.CTL;
    已复制         1 个文件。


    C:>cd C:ORACLEPRODUCT10.2.0ORADATAORCL


    C:oracleproduct10.2.0oradataorcl>dir
     驱动器 C 中的卷没有标签。
     卷的序列号是 34DF-4186


     C:oracleproduct10.2.0oradataorcl 的目录


    2015-08-29  22:31    <DIR>          .
    2015-08-29  22:31    <DIR>          ..
    2015-09-06  14:14       503,324,672 SYSTEM01.DBF
    2015-09-06  15:14       262,152,192 SYSAUX01.DBF
    2015-09-06  14:14        36,708,352 UNDOTBS01.DBF
    2015-09-06  14:14         5,251,072 USERS01.DBF
    2015-09-06  14:14         7,061,504 CONTROL01.CTL
    2015-09-06  14:14         7,061,504 CONTROL02.CTL
    2015-09-06  14:14         7,061,504 CONTROL03.CTL
    2015-09-03  23:31        52,429,312 REDO01.LOG
    2015-09-03  23:31        52,429,312 REDO02.LOG
    2015-09-06  14:14        52,429,312 REDO03.LOG
    2015-09-06  14:16        20,979,712 TEMP01.DBF
    2015-09-06  14:14       104,865,792 EXAMPLE01.DBF
    2015-09-06  14:14         7,061,504 CONTROL04.CTL
                  13 个文件  1,118,815,744 字节
                   2 个目录 20,143,964,160 可用字节

    重启数据库

    SQL> shutdown immediate;
    数据库已经关闭。
    已经卸载数据库。
    ORACLE 例程已经关闭。
    SQL> startup;
    ORACLE 例程已经启动。


    Total System Global Area  285212672 bytes
    Fixed Size                  1248552 bytes
    Variable Size              83886808 bytes
    Database Buffers          192937984 bytes
    Redo Buffers                7139328 bytes
    数据库装载完毕。
    数据库已经打开。
    SQL> show parameter control_files;


    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    control_files                        string      C:ORACLEPRODUCT10.2.0ORADA
                                                     TAORCLCONTROL01.CTL, C:ORAC
                                                     LEPRODUCT10.2.0ORADATAORCL
                                                     CONTROL02.CTL, C:ORACLEPROD
                                                     UCT10.2.0ORADATAORCLCONTRO
                                                     L03.CTL, C:ORACLEPRODUCT10.
                                                     2.0ORADATAORCLCONTROL04.CTL


    四 如何备份还原控制文件

    SQL> alter database backup controlfile to 'c:/a.bak';


    数据库已更改。

    当然我们也可以直接control_files的文件拷贝 

    还原就是讲文件拷贝到数据目录 并且

    alter system set control_files='你的位置' 就是还原


    五控制文件损坏的修复

    当控制文件损坏时 可以通过命令重建控制文件(这里我们可以自己模拟 将ctl文件删除 一般启动报错 ORA-00205: ?????????, ??????, ???????) 
    如果当数据库已经无法启动的情况下  可以找到某台计算机能正常运行oracle的数据库上 执行备份控制文件的sql到日志中 


    alter database backup controlfile to trace  该语句只能在mount和open下运行


    通过命令找到日志中重建控制文件的命令 
       show parameter dump
    可以查到
       SQL> show parameter dump


    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    background_core_dump                 string      partial
    background_dump_dest                 string      c:appjiaozidiag dbmsorcl
                                                     orcl race
    core_dump_dest                       string      c:appjiaozidiag dbmsorcl
                                                     orclcdump
    max_dump_file_size                   string      unlimited
    shadow_core_dump                     string      none
    user_dump_dest                       string      c:appjiaozidiag dbmsorcl
                                                     orcl race
    找到alert_orcl.log 打开该文件可以看到最后一行 打出如下日志
    OER 7451 in Load Indicator : Error Code = OSD-04500: 指定了非法选项
    O/S-Error: (OS 1) 函数不正确。 !
    Wed Mar 22 10:35:51 2017
    alter database backup controlfile to trace
    【Backup controlfile written to trace file c:appjiaozidiag dbmsorclorcl raceorcl_ora_38324.trc】
    Completed: alter database backup controlfile to trace
    Wed Mar 22 10:35:53 2017


    找到  orcl_ora_38324.trc 文件可以看到完整的创建控制文件的步骤sql
    我的如下:
    #nmount模式启动
    STARTUP NOMOUNT
    #创建控制文件 如果其他人的数据库和你的数据库的日志文件和dbf文件不在同一个目录 可以修改为你对应的目录即可
    CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS  NOARCHIVELOG
        MAXLOGFILES 16
        MAXLOGMEMBERS 3
        MAXDATAFILES 100
        MAXINSTANCES 8
        MAXLOGHISTORY 292
    LOGFILE
      GROUP 1 'C:APPJIAOZIORADATAORCLREDO01.LOG'  SIZE 50M BLOCKSIZE 512,
      GROUP 2 'C:APPJIAOZIORADATAORCLREDO02.LOG'  SIZE 50M BLOCKSIZE 512,
      GROUP 3 'C:APPJIAOZIORADATAORCLREDO03.LOG'  SIZE 50M BLOCKSIZE 512
    -- STANDBY LOGFILE
    DATAFILE
      'C:APPJIAOZIORADATAORCLSYSTEM01.DBF',
      'C:APPJIAOZIORADATAORCLSYSAUX01.DBF',
      'C:APPJIAOZIORADATAORCLUNDOTBS01.DBF',
      'C:APPJIAOZIORADATAORCLUSERS01.DBF',
      'C:APPJIAOZIORADATAORCLEXAMPLE01.DBF'
    CHARACTER SET ZHS16GBK
    ;
    #恢复数据库使用控制文件
    RECOVER DATABASE USING BACKUP CONTROLFILE
    #将数据库打开
    ALTER DATABASE OPEN RESETLOGS;

    依次执行上面步骤中的命令即可完成修复

    注意:
      RECOVER DATABASE USING BACKUP CONTROLFILE会要求你输入一个选项
             指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
      需要你指定重做日志的位置 可以输入重做日志的位置 一般重做日志和控制文件都在同一目录
      比如我的操作是:
       SQL> RECOVER DATABASE USING BACKUP CONTROLFILE;
                ORA-00279: 更改 11702945 (在 03/22/2017 11:03:50 生成) 对于线程 1 是必需的
                ORA-00289: 建议:
                C:APPJIAOZIFLASH_RECOVERY_AREAORCLARCHIVELOG2017_03_22O1_MF_1_1_%U_.ARC
                ORA-00280: 更改 11702945 (用于线程 1) 在序列 #1 中




                指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
                 C:appjiaozioradataorclREDO01.LOG
                已应用的日志。
                完成介质恢复。
      SQL> ALTER DATABASE OPEN RESETLOGS;


      数据库已更改。
     









  • 相关阅读:
    PDF文档生成缩略图
    zTree数据回显
    window.showModalDialog基础
    Java获取两个时间段内的所有日期
    CSS设置超出表格的内容用省略号显示
    Ajax提交form表单
    普通java类在Tomcat启动时获取ServletContext
    mysql中sql优化和合理使用索引
    mysql数据类型详解系列
    如何干净的清除slave同步信息
  • 原文地址:https://www.cnblogs.com/liaomin416100569/p/9331269.html
Copyright © 2011-2022 走看看