一、不同场景控制文件损坏时的恢复方法场景恢复方法恢复条件
其中一个控制文件损坏1.1拷贝冗余的控制文件1、具有多路冗余控制文件镜像
2、其它冗余控制文件没有损坏
1.2修改control_files参数去除损坏文件同上、但不推荐该方法进行恢复
所有的控制文件损坏有备份2.1通过rman备份控制文件进行完全恢复1、通过rman备份了控制文件
2、备份了控制文件之后有连续的归档和redo文件
2.2通过rman备份控制文件进行不完全恢复1、通过rman备份了控制文件
2、备份了控制文件之后归档或redo文件丢失
2.3通过trace备份控制文件进行完全恢复1、通过trace备份了控制文件
2、备份了控制文件之后有连续的归档和redo文件
2.4通过trace备份控制文件进行不完全恢复1、通过trace备份了控制文件
2、备份了控制文件之后归档或redo文件丢失
无备份2.5通过手工重建控制文件进行恢复(noresetlogs)1、无有效的备份控制文件
2、redo文件无丢失和无损坏
2.6通过手工重建控制文件进行恢复(resetlogs)1、无有效的备份控制文件
2、redo文件丢失或损坏
2.7通过SNAPSHOT CONTROLFILE文件进行恢复此处为记录一个恢复控制文件的方法(不常使用)
二、不同场景控制文件损坏的恢复思路及演示
2.1其中一个控制文件损坏恢复思路
A. shutdown abort关闭数据库(控制文件损坏后不能正常关闭数据库,只能使用abort强制关闭)
B.拷贝其中一个完好的控制文件(推荐)或者修改control_files参数去除损坏文件(不推荐)
C. startup启动数据库
2.2其中一个控制文件损坏恢复演示SQL> show parameter control_files
NAME TYPE VALUE
---------------------------------------------------------- ------------------------------
control_files string /u/app/oracle/oradata/racdg/control01.ctl,/u/app/oracle/ora
data/racdg/control02.ctl
SQL> !mv/u/app/oracle/oradata/racdg/control02.ctl /u/app/oracle/oradata/racdg/control02.ctl.bak
SQL> shutdown immediate; --无正常关闭数据库,需要abort强制关闭
ORA-00210: cannot open the specifiedcontrol file
ORA-00202: control file:'/u/app/oracle/oradata/racdg/control02.ctl'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file ordirectory
Additional information: 3
SQL> shutdown abort; --只能shutdown abort强制关闭
ORACLE instance shut down.
SQL> startup; --启动数据库
ORACLE instance started.
ORA-00205: error in identifying controlfile, check alert log for more info --启动报错,找不到指定的控制文件,在告警日志文件alert_sid.log中可以看到如下报错:
ORA-00210: cannot open the specifiedcontrol file
ORA-00202: control file:'/u/app/oracle/oradata/racdg/control02.ctl'
SQL> !pwd
/u/app/oracle/oradata/racdg
SQL> !cp control01.ctl control02.ctl
--或者:
SQL>alter system set control_files=’ /u/app/oracle/oradata/racdg/control01.ctl’scope=both; --不建议,因为这样一来就只剩一份控制文件了,起不到冗余作用,再此次发生丢失,恢复就变得麻烦了。
SQL> alter database mount;
Database altered.
使用ASM存放控制文件,其中一个控制文件损坏恢复演示SQL> show parameter control_files;
NAME TYPE VALUE
----------------------------------------------- ------------------------------
control_files string +DATA/racdb/controlfile/current.256.935676497, +DATA/racdb/c
ontrolfile/current.478.957977179
SQL> shutdown abort; --这里我是为了演示才直接关闭数据的,因为在线情况下asm的文件是不能删除的
ORACLE instance shut down.
SQL> !su - grid -c "asmcmd -p rm +DATA/racdb/controlfile/current.478.957977179"
Password:
SQL> startup nomount; --将数据库启动到nomount状态
ORACLE instance started.
SQL> !rman target / --这里使用rman来恢复,当然使用之前的两种方法拷贝和去除也是可以的
Recovery Manager: Release 11.2.0.4.0 -Production on Sat Oct 21 16:53:15 2017
Copyright (c) 1982, 2011, Oracle and/or itsaffiliates. All rights reserved.
connected to target database: RACDB (notmounted)
RMAN> restore controlfile from'+DATA/racdb/controlfile/current.256.935676497'; --其实这里就是拷贝的方式
Starting restore at 2017/10/21 16:54:18
using target database control file insteadof recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=143 instance=racdb1device type=DISK
channel ORA_DISK_1: copied control filecopy
output filename=+DATA/racdb/controlfile/current.256.935676497
output filename=+DATA/racdb/controlfile/current.478.957977659
Finished restore at 2017/10/21 16:54:22
RMAN> sql 'alter database mount';
sql statement: alter database mount
released channel: ORA_DISK_1
说明一下,这里我分了文件系统和ASM存储存放控制文件的情况,其恢复原理都是一样的,无论是在线或者关闭数据库后损坏了其中部分控制文件,恢复方法都是一样的。
2.3所有的控制文件损坏,有备份场景
2.3.1通过rman备份控制文件进行完全恢复思路
A.若在线损坏,shutdown abort关闭数据库;若关闭数据库后损坏,到第二步
B. startup nomount启动数据库到nomount状态。
C.使用rman从备份中恢复控制文件:restorecontrolfile from '/path';
D. alter database mount;启动数据库到mount状态
E. recover database using backupcontrolfile until cancel;应用归档文件
F.再执行recover databaseusing backup controlfile;应用未归档的redo文件
G. alter database open resetlogs;以resetlogs的方式打开数据库
2.3.2通过rman备份控制文件进行完全恢复演示SQL> show parameter control_files;
NAME TYPE VALUE
---------------------------------------------------------- ------------------------------
control_files string /u/app/oracle/oradata/racdg/control01.ctl,/u/app/oracle/ora
data/racdg/control02.ctl, /u/app/oracle/oradata/racdg/control03
.ctl
SQL> !rm control01.ctl control02.ctlcontrol03.ctl --删除所有的控制文件,模拟控制文件丢失
SQL> shutdown abort; --强制关闭数据库
ORACLE instance shut down.
SQL> startup; --启动数据到nomount状态
ORACLE instance started.
ORA-00205: error in identifying controlfile, check alert log for more info --报错,同时查看告警日志,会发现所有控制文件都已经丢失。
SQL> !rman target / --此前有做过RMAN控制文件备份,使用rman进行恢复
Recovery Manager: Release 11.2.0.4.0 -Production on Sat Oct 21 17:24:11 2017
Copyright (c) 1982, 2011, Oracle and/or itsaffiliates. All rights reserved.
connected to target database: RACDG (notmounted)
RMAN> restore controlfile from'/u/app/oracle/zwdir/RACDG_20171021_0fshj32i_1_1.ctl'; --恢复控制文件
Starting restore at 2017/10/21 17:24:57
using target database control file insteadof recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=135 devicetype=DISK
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete,elapsed time: 00:00:03
output filename=/u/app/oracle/