zoukankan      html  css  js  c++  java
  • 己亥清爽恢复系列之控制文件1篇:部分控制文件损坏或丢失

    己亥清爽系列说明:清爽系列是作为恢复系列的基础篇,基于FS(File System)文件系统的手工还原恢复,也叫基于用户管理的还原恢复,来自于博客园AskScuti

    实验说明:在数据文件、在线日志及归档日志都完整的情况下,介质损坏导致部分控制文件丢失如何进行恢复(至少有1路当前控制文件可用

    基于版本:Oracle 11gR2 AskScuti

    概念说明:请严格区分什么叫还原(Restore),什么叫恢复(Recover)

    还原(Restore):如果是基于用户管理(手工)的还原恢复,需要用户主动在系统层面进行拷贝粘贴,这个操作过程称之为还原;如果是基于恢复管理器(RMAN)的恢复,则通过Restore命令进行还原(自动进行),后者不在基础篇讨论。

    恢复(Recover):在完成还原动作之后,数据回到了还原点,但从这个还原点到宕机时间点之间的数据,就要利用归档日志和在线日志进行前滚,直至应用到宕机前最后一次commit提交的状态(完全恢复),或应用到指定的某个时间点(不完全恢复)。

    有关控制文件的解释和备份,请参考番外系列:关于 Control File 的备份说明

    目录

    1. 模拟损坏

    2. 拷贝还原

      2.1 拷贝还原到默认位置

      2.2 拷贝还原到非默认位置(修改参数文件)

    1. 模拟损坏

    当前控制文件一共有8路

    SQL> select name from v$controlfile;
    
    NAME
    ---------------------------------------------------
    /u01/app/oracle/oradata/PROD1/control01.ctl
    /u01/app/oracle/oradata/PROD1/control02.ctl
    /u01/app/oracle/oradata/PROD1/control03.ctl
    /u01/app/oracle/oradata/PROD1/control04.ctl
    /u01/app/oracle/oradata/PROD1/control05.ctl
    /u01/app/oracle/oradata/PROD1/control06.ctl
    /u01/app/oracle/oradata/PROD1/control07.ctl
    /u01/app/oracle/oradata/PROD1/control08.ctl
    
    8 rows selected.

    模拟介质损坏,随便进行物理删除(至少保证有一个存在)

    SQL> !rm -rf /u01/app/oracle/oradata/PROD1/control03.ctl
    
    SQL> startup force;
    ORACLE instance started.
    
    Total System Global Area  830930944 bytes
    Fixed Size               2232920 bytes
    Variable Size            624954792 bytes
    Database Buffers         201326592 bytes
    Redo Buffers              2416640 bytes
    ORA-00205: error in identifying control file, check alert log for more info

    2. 拷贝还原

    2.1 拷贝还原到默认位置

    删除某一个控制文件,重启数据库,报错。(原因是启动过程第一步加载参数文件,参数文件记录着8个控制文件的具体路径,但是第3个控制文件已被删除,所以实际情况和参数文件里面记录的不一致,因此报错)

    如果当前系统至少有一个控制文件是可用的,可以通过这一个控制文件,在物理层面复制出其他路径对应的控制文件

    当前第3个控制文件丢失,直接物理层面复制一份即可。(多路复用的控制文件内容完全一致

    SQL> !cp /u01/app/oracle/oradata/PROD1/control08.ctl /u01/app/oracle/oradata/PROD1/control03.ctl
    
    SQL> startup force;
    ORACLE instance started.
    
    Total System Global Area  830930944 bytes
    Fixed Size               2232920 bytes
    Variable Size            624954792 bytes
    Database Buffers         201326592 bytes
    Redo Buffers              2416640 bytes
    Database mounted.
    Database opened.

    拷贝还原到默认位置是在保证参数文件不动的前提下,按照参数文件指定的路径,去还原恢复控制文件。

    2.2 拷贝还原到非默认位置(修改参数文件)

    在1.1小节中,当控制文件物理路径与参数文件里面记录的路径不一致时,我们选择了把控制文件拷贝还原到了默认路径下。在本小节中,我们还可以选择另外一种方法:更改参数文件,使参数文件里面记录的控制文件路径和实际物理路径保持一致

    删除控制文件 04-08

    SQL> !rm -rf /u01/app/oracle/oradata/PROD1/control04.ctl
    
    SQL> !rm -rf /u01/app/oracle/oradata/PROD1/control05.ctl
    
    SQL> !rm -rf /u01/app/oracle/oradata/PROD1/control06.ctl
    
    SQL> !rm -rf /u01/app/oracle/oradata/PROD1/control07.ctl
    
    SQL> !rm -rf /u01/app/oracle/oradata/PROD1/control08.ctl
    
    SQL> startup force;
    ORACLE instance started.
    
    Total System Global Area  830930944 bytes
    Fixed Size            2232920 bytes
    Variable Size          624954792 bytes
    Database Buffers      201326592 bytes
    Redo Buffers            2416640 bytes
    ORA-00205: error in identifying control file, check alert log for more info

    重启数据库报错,因为实际物理路径与参数文件里面记录的控制文件路径不一致。这里选择不拷贝复制控制文件,而是选择修改参数文件,把参数文件里面原来记录的控制文件路径01-08,改为01-03,这样,参数文件记录的路径就和实际物理路径一致了,因此可以正常打开数据库。

    根据当前动态参数文件创建一份静态参数文件

    SQL> create pfile from spfile;
    
    File created.

    编辑静态参数文件

    [oracle@henry backup]$ cd $ORACLE_HOME/dbs/
    [oracle@henry dbs]$ ls
    hc_PROD1.dat  init.ora       lkPROD1  orapwPROD1  snapcf_PROD1.f   spfilePROD2.ora
    hc_PROD2.dat  initPROD1.ora  lkPROD2  orapwPROD2  spfilePROD1.ora
    [oracle@henry dbs]$ vim initPROD1.ora 

    将原来的路径01-08

    *.control_files='/u01/app/oracle/oradata/PROD1/control01.ctl','/u01/app/oracle/oradata/PROD1/control02.ctl','/u01/app/oracle/oradata/PROD1/control03.ctl','/u01/app/oracle/oradata/PROD1/control04.ctl','/u01/app/oracle/oradata/PROD1/control05.ctl','/u01/app/oracle/oradata/PROD1/control06.ctl','/u01/app/oracle/oradata/PROD1/control07.ctl','/u01/app/oracle/oradata/PROD1/control08.ctl'

    改为01-03

    *.control_files='/u01/app/oracle/oradata/PROD1/control01.ctl','/u01/app/oracle/oradata/PROD1/control02.ctl','/u01/app/oracle/oradata/PROD1/control03.ctl'

    现在,参数文件里面指定的控制文件有3个,实际物理路径也有3个,一样了,就可以打开数据库。

    通过静态参数文件启动数据库到nomount状态

    SQL> startup force nomount pfile='$ORACLE_HOME/dbs/initPROD1.ora'
    ORACLE instance started.
    
    Total System Global Area  830930944 bytes
    Fixed Size               2232920 bytes
    Variable Size            624954792 bytes
    Database Buffers         201326592 bytes
    Redo Buffers              2416640 bytes

    通过内存创建spfile

    SQL> create spfile from memory;
    
    File created.

    最后,通过spfile启动数据库(是不是有个ORA-32004的错误?虽不影响,是不是看着难受?详情移至此篇博文

    SQL> startup
    ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
    ORACLE instance started.
    
    Total System Global Area  830930944 bytes
    Fixed Size               2232920 bytes
    Variable Size            629149096 bytes
    Database Buffers         197132288 bytes
    Redo Buffers              2416640 bytes
    Database mounted.
    Database opened.
  • 相关阅读:
    生活是把锋利的剪刀,看你怎么持有
    稚晖君已经很强了,我们怎么能追逐强人的步伐呢?一些自己的思考
    分享自己做的一个指定进程以及线程长时间cpu监控的工具
    Centos7下配置网卡网桥
    Smokeping安装和配置(Shell一键安装)
    18.jvm调优工具及案例分析
    处理mac不能使用rz和sz的问题
    16.彻底解决Jmap在mac版本无法使用的问题
    17.mac安装homebrew及异常处理
    15. mac安装多版本jdk
  • 原文地址:https://www.cnblogs.com/askscuti/p/10911241.html
Copyright © 2011-2022 走看看