部分控制文件丢失
数据库默认会有两个控制文件存放在不同位置,如果其中一个文件丢失可以通过拷贝另一个控制文件进行恢复,这也是为什么要采用多路复用的原因。
停止数据库
1
|
SQL> shutdown immediate
|
拷贝恢复控制文件
1
|
$ cp /u01/app/oracle/oradata/ogg/control01.ctl /u01/app/oracle/fast_recovery_area/ogg/control02.ctl
|
启动数据库
所有控制文件丢失,有备份
由于未启用CATALOG,备份信息都存储在控制文件上,控制文件丢失备份信息也就丢失了,无法通过RESTORE CONTROLFILE FROM AUTOBAKCUP来直接恢复了,需要指定控制文件备份集来恢复
恢复控制文件
1
2
3
4
5
6
7
8
9
10
11
|
RMAN> startup nomount
RMAN> restore controlfile from '/u01/backup/bak_04t4t2o0_1_1';
Starting restore at 2018-06-08 01:40:01
using channel ORA_DISK_1
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:07
output file name=/u01/app/oracle/oradata/ogg/control01.ctl
output file name=/u01/app/oracle/fast_recovery_area/ogg/control02.ctl
Finished restore at 2018-06-08 01:40:08
|
恢复数据库
1
|
SQL> recover database using backup controlfile until cancel;
|
RESERTLOG启动数据库
1
|
SQL> alter database open resetlogs;
|
注:由于控制文件是通过备份恢复的,因此需要以RESETLOGS的方式启动数据库
全部控制文件丢失,无备份
当无法通过备份来恢复控制文件的话,只能通过手工创建一个新的控制文件,并在控制文件中指定数据文件位置和日志文件位置,能够在alert日志中找到相关信息。
启动数据库到nomount
创建控制文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
Create controlfile reuse set database "ogg" NORESETLOGS ARCHIVELOG
MAXINSTANCES 8
MAXLOGHISTORY 1
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
Datafile
'/u01/app/oracle/oradata/ogg/system01.dbf',
'/u01/app/oracle/oradata/ogg/sysaux01.dbf',
'/u01/app/oracle/oradata/ogg/undotbs01.dbf',
'/u01/app/oracle/oradata/ogg/users01.dbf'
LOGFILE
GROUP 1 ('/u01/app/oracle/oradata/ogg/redo01.log') SIZE 51200K,
GROUP 2 ('/u01/app/oracle/oradata/ogg/redo02.log') SIZE 51200K,
GROUP 3 ('/u01/app/oracle/oradata/ogg/redo03.log') SIZE 51200K
CHARACTER SET ZHS16GBK;
|
注:RESETLOGS/NORESETLOGS表示是否忽略LOGFILE中指定的日志文件内容,如果只是控制文件丢失,LOGFILE没问题的话则选择NORESETLOGS,反之则选择RESETLOGS。ARCHIVELOG/NOARCHIVELOG表示指定ARCHIVELOG时重新使用redo log前将其归档。默认未NOARCHILOG。
恢复数据库
打开数据库
1
|
SQL> alter database open;
|
Tips:Performing User-Managed Recovery: Advanced Scenarios