zoukankan      html  css  js  c++  java
  • controlfile的情景恢复

    控制文件测试

      

      控制文件(Control File)是Oracle的物理文件之一,它记录了数据库的名字、数据文件的位置等信息,数据文件和日志文件的位置,控制文件中还记录了多种SCN,用这些SCN来确定数据文件和日志文件是否是正确的。控制文件的重要性在于,一旦控制文件损坏,数据库将会宕机。如果没有数据库的备份和归档日志文件,数据库将无法恢复。因此,我们应该多路镜像控制文件(Multiplex Control Files),并把每个镜像的控制文件分布在不同的物理磁盘。控制文件里面包含了很多信息数据库打开的时候会验证一系列的信息保证打开的数据库是一个正常完整的数据库,所以需要对各种数据进行验证。这些文件就是放在控制文件里面,要找到这些文件必须先找到控制文件以获得这些文件的地址以及状态。

    情景一:采用多路复用控制文件方式,将控制文件放到不通的路径下,假如一个控制文件损坏

    1.查看此时数据库的控制文件情况
    SQL> select name from v$controlfile;

    NAME
    --------------------------------------------------------------------------------
    /u01/app/oracle/oradata/orcl/control01.ctl
    /u01/app/oracle/fast_recovery_area/orcl/control02.ctl

    2.模拟控制文件损坏,mv掉控制文件01
    [root@orcl orcl]# mv control01.ctl control01

    3.重启数据库
    SQL> shutdown immediate
    SQL> startup
    ORACLE instance started.

    Total System Global Area 763363328 bytes
    Fixed Size 8797440 bytes
    Variable Size 570426112 bytes
    Database Buffers 176160768 bytes
    Redo Buffers 7979008 bytes
    ORA-00205: error in identifying control file, check alert log for more info

    4.重新覆盖控制文件
    SQL> show parameter control_files

    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    control_files string /u01/app/oracle/oradata/orcl/c
    ontrol01.ctl, /u01/app/oracle/
    fast_recovery_area/orcl/contro
    l02.ctl
    复制另一个控制文件到control01.ctl
    [oracle@ orcl]# cp control02.ctl /u01/app/oracle/oradata/orcl/control01.ctl

    5.启动数据库
    SQL> startup
    ORACLE instance started.

    Total System Global Area 763363328 bytes
    Fixed Size 8797440 bytes
    Variable Size 570426112 bytes
    Database Buffers 176160768 bytes
    Redo Buffers 7979008 bytes
    ORA-00214: control file '/u01/app/oracle/fast_recovery_area/orcl/control02.ctl'
    version 3251 inconsistent with file
    '/u01/app/oracle/oradata/orcl/control01.ctl' version 3225

    此时控制文件02的version3251要新与01的version3225,中间做了操作,导致控制文件02版本是更新的,所以重新复制02到01控制文件


    6.再次覆盖控制文件
    [oracle@orcl ~]$ ! cp /u01/app/oracle/fast_recovery_area/orcl/control02.ctl /u01/app/oracle/oradata/orcl/control01.ctl

    7.重启数据库
    SQL> shutdown immediate

    SQL> startup
    ORACLE instance started.

    Total System Global Area 763363328 bytes
    Fixed Size 8797440 bytes
    Variable Size 570426112 bytes
    Database Buffers 176160768 bytes
    Redo Buffers 7979008 bytes
    Database mounted.
    Database opened.

    ******************************************************************************************************************************************

    情景二:控制文件都被损坏,rman采用了控制文件自动备份的情景


    查看数据库有几个控制文件,将所有的控制文件都模拟损坏
    1.移走所有的控制文件
    SQL> show parameter control_files

    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    control_files string /u01/app/oracle/oradata/orcl/c
    ontrol01.ctl, /u01/app/oracle/
    fast_recovery_area/orcl/contro
    l02.ctl
    [root@orcl orcl]# mv control01.ctl /tmp
    [root@orcl orcl]# mv control02.ctl /tmp


    2.重启数据库测试
    SQL> shutdown immediate
    ORA-00210: cannot open the specified control file
    ORA-00202: control file: '/u01/app/oracle/oradata/orcl/control01.ctl'
    ORA-27041: unable to open file
    Linux-x86_64 Error: 2: No such file or directory
    Additional information: 3

    SQL> shutdown abort
    ORACLE instance shut down.

    SQL> startup
    ORACLE instance started.

    Total System Global Area 763363328 bytes
    Fixed Size 8797440 bytes
    Variable Size 570426112 bytes
    Database Buffers 176160768 bytes
    Redo Buffers 7979008 bytes
    ORA-00205: error in identifying control file, check alert log for more info


    3.现在所有的控制文件都已经被损坏,首先查看rman是否开启自动备份,然后通过自动备份恢复
    RMAN> show all;
    CONFIGURE CONTROLFILE AUTOBACKUP ON; # default

    4.启动到nomount
    RMAN> shutdown immediate

    RMAN> startup nomount

    5.还原自动备份的控制文件
    RMAN> restore controlfile from autobackup;

    RMAN> alter database mount;

    RMAN> recover database;

    RMAN> alter database open resetlogs;

  • 相关阅读:
    Linux套接子(c语言)模拟http请求、应答
    709. 转换成小写字母
    1108. IP 地址无效化
    C++大作业——教职工管理系统
    贪吃蛇游戏 1.0
    getch()函数的使用方法及其返回值问题
    Open source project code
    slack Interface operation
    slack init: Simple interaction with slack bot
    mac 使用 Docker 搭建 ubuntu 环境
  • 原文地址:https://www.cnblogs.com/houzhiheng/p/13139450.html
Copyright © 2011-2022 走看看