暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 控制文件恢复技巧

oracleEDU 2017-09-09
768

使用控制文件将数据库状态由nomount --> mount 

保证参数文件中指定的所有控制文件存在并且同步

最好的保护方法:控制文件一定要实现多路复用(在不同位置保存多份)

最好的恢复控制文件的方法是镜像恢复

恢复控制文件概要说明

查看控制文件:

SQL>  select name from v$controlfile;

NAME

------------------------------------------------------

+DATA/orcl/controlfile/current.260.853107431

+FRA/orcl/controlfile/current.256.853107433

保证至少有一份是好的

如果在ASM

    关闭实例 shutdown abort;

    启动到 nomount

    restore controlfile from  好的控制文件  (自动重建坏的控制文件(根据参数文件)

如果在文件系统

    关闭实例 shutdown abort;

    启动到 nomount

    cp 好的控制文件 到 损坏的哪里取原来的名字(和参数文件中的一样)

直接修改参数文件,删除参数中control_files中坏的文件,保留好的。

    案例

SQL> shutdown immediate;

$ su - grid

$ asmcmd

ASMCMD> rm  +DATA/orcl/controlfile/current.260.853107431 

su - oracle 

startup 失败:保证参数文件中的所有控制文件都能访问

Total System Global Area  534462464 bytes

Fixed Size                  2215064 bytes

Variable Size             356516712 bytes

Database Buffers          171966464 bytes

Redo Buffers                3764224 bytes

ORA-00205: error in identifying control file, check alert log for more info

看日志,判断是都坏了,其中一个坏了

$ cd u01/app/oracle/diag/rdbms/orcl/orcl/trace/

ORA-00210: cannot open the specified control file

ORA-00202: control file: '+DATA/orcl/controlfile/current.260.853107431'

ORA-17503: ksfdopn:2 Failed to open file +DATA/orcl/controlfile/current.260.853107431

ORA-15012: ASM file '+DATA/orcl/controlfile/current.260.853107431' does not exist

NOTE: dependency between database orcl and diskgroup resource ora.FRA.dg is established

ORA-205 signalled during: ALTER DATABASE   MOUNT...

+DATA/orcl/controlfile/current.260.853107431 坏了

查看有几个控制文件

SQL> show parameter control  读参数文件

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

control_file_record_keep_time        integer     7

control_files                        string      +DATA/orcl/controlfile/current

                                                 .260.853107431, +FRA/orcl/cont

                                                 rolfile/current.256.853107433

control_management_pack_access       string      DIAGNOSTIC+TUNING

有2个控制文件,坏了一个

怎么修复启动数据库?

1. 修改参数文件,把坏的删除掉

2. 从好的恢复坏的

SQL> startup nomount

restore controlfile from '+FRA/orcl/controlfile/current.256.853107433'; 

根据参数文件指定路径还原

由于损坏的控制文件路径无法修复,要求还原到+FRA/orcl/controlfile/current.256.828541567

alter system set control_files='+FRA/orcl/controlfile/current.256.853107433' scope=spfile;

shutdown abort;

alter database mount ;

alter database open;

所有控制文件都坏了

    解决方法:

    1. 通过trace找重建控制文件脚本 ,重建控制文件

    2. 通过备份去恢复(不完全恢复)

查出控制文件的备份

RMAN>  list backup of controlfile ;

BS Key  Type LV Size       Device Type Elapsed Time Completion Time

------- ---- -- ---------- ----------- ------------ ---------------

13      Full    9.67M      DISK        00:00:04     17-JUL-17

        BP Key: 13   Status: AVAILABLE  Compressed: NO  Tag: TAG20140717T004315

        Piece Name: +FRA/orcl/autobackup/2017_07_17/s_853116195.290.853116199

  Control File Included: Ckp SCN: 3829467      Ckp time: 17-JUL-17

RMAN> backup current controlfile ;     #手工做一个

先查所有的控制文件

SQL> select name from v$controlfile ;

NAME

--------------------------------------------------------------------------------

+DATA/orcl/controlfile/current.260.853107431

+FRA/orcl/controlfile/current.256.853107433

shutdown immediate ;

su - grid 

asmcmd

rm +DATA/orcl/controlfile/current.260.853107431

rm +FRA/orcl/controlfile/current.256.853107433

$ su - oracle 

$ startup      #启动数据库mount失败

SQL> startup

ORACLE instance started.

Total System Global Area  534462464 bytes

Fixed Size                  2215064 bytes

Variable Size             419431272 bytes

Database Buffers          109051904 bytes

Redo Buffers                3764224 bytes  实例启动

ORA-00205: error in identifying control file, check alert log for more info

去找警告日志文件

cd u01/app/oracle/diag/rdbms/orcl/orcl/trace

vim alert_orcl.log

ORA-00210: cannot open the specified control file

ORA-00202: control file: '+FRA/orcl/controlfile/current.256.853107433'

ORA-17503: ksfdopn:2 Failed to open file +FRA/orcl/controlfile/current.256.853107433

ORA-15012: ASM file '+FRA/orcl/controlfile/current.256.853107433' does not exist

ORA-00210: cannot open the specified control file

ORA-00202: control file: '+DATA/orcl/controlfile/current.260.853107431'

ORA-17503: ksfdopn:2 Failed to open file +DATA/orcl/controlfile/current.260.853107431

ORA-15012: ASM file ''+FRA/orcl/controlfile/current.256.853107433'' does not exist

ORA-205 signalled during: ALTER DATABASE   MOUNT...

发现有2个控制文件不可用

'+FRA/orcl/controlfile/current.256.853107433'

'+DATA/orcl/controlfile/current.260.853107431

SQL> show parameter contol        #刚好只有两个控制文件,所有控制文件都丢失

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

control_file_record_keep_time        integer     7

control_files                        string      +DATA/orcl/controlfile/current

                                                 .260.853107431, +FRA/orcl/cont

                                                 rolfile/current.256.853107433

通过RMAN修复

$ rman target

Recovery Manager: Release 11.2.0.1.0 - Production on Thu May 22 23:43:47 2014

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORCL (not mounted)  #实例启动了

恢复控制文件

restore controlfile from autobackup ;

或者restore controlfile from 备份集  手工指定 (你要选的最新的版本的备份)

recovery area destination: +FRA

database name (or database unique name) used for search: ORCL

channel ORA_DISK_1: AUTOBACKUP +fra/ORCL/AUTOBACKUP/2014_05_22/s_848270878.286.848270881 found in the recovery area

AUTOBACKUP search with format "%F" not attempted because DBID was not set

channel ORA_DISK_1: restoring control file from AUTOBACKUP +fra/ORCL/AUTOBACKUP/2014_05_22/s_848270878.286.848270881

channel ORA_DISK_1: control file restore from AUTOBACKUP complete

output file name=+DATA/orcl/controlfile/current.260.853119031

output file name=+FRA/orcl/controlfile/current.256.853119035  #恢复了2个控制文件

Finished restore at 17-JUL-14

SQL> alter database mount ;    #控制文件恢复,保证数据库到mount

SQL> recover database ;

最后alter database open resetlogs;  打开数据库

失败:

SQL> recover database ;

ORA-00283: recovery session canceled due to errors

ORA-01610: recovery using the BACKUP CONTROLFILE option must be done

recover database using backup controlfile;

输入cancel 

最后

alter database open RESETLOGS; 

RROR at line 1:

ORA-01113: file 1 needs media recovery

ORA-01110: data file 1: '+DATA/orcl/datafile/system.256.853023133'

到rman 

export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK;

restore database ;

再回到sqlplus 界面

recover database using backup controlfile;

最后

alter database open RESETLOGS;      #打开数据库

建议做一次全备,做新的还原点。

backup database ;




最后修改时间:2021-04-28 19:59:03
文章转载自oracleEDU,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论