使用控制文件将数据库状态由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 ;