控制文件恢复场景
部分控制文件丢失
数据库默认会有两个控制文件存放在不同位置,如果其中一个文件丢失可以通过拷贝另一个控制文件进行恢复,这也是为什么要采用多路复用的原因。
停止数据库
SQL> shutdown immediate |
拷贝恢复控制文件
$ cp /u01/app/oracle/oradata/ogg/control01.ctl /u01/app/oracle/fast_recovery_area/ogg/control02.ctl |
启动数据库
SQL> startup |
所有控制文件丢失,有备份
由于未启用CATALOG,备份信息都存储在控制文件上,控制文件丢失备份信息也就丢失了,无法通过RESTORE CONTROLFILE FROM AUTOBAKCUP来直接恢复了,需要指定控制文件备份集来恢复
恢复控制文件
RMAN> startup nomount |
恢复数据库
SQL> recover database using backup controlfile until cancel; |
RESERTLOG启动数据库
SQL> alter database open resetlogs; |
注:由于控制文件是通过备份恢复的,因此需要以RESETLOGS的方式启动数据库
全部控制文件丢失,无备份
当无法通过备份来恢复控制文件的话,只能通过手工创建一个新的控制文件,并在控制文件中指定数据文件位置和日志文件位置,能够在alert日志中找到相关信息。
启动数据库到nomount
SQL> startup nomount |
创建控制文件
Create controlfile reuse set database "ogg" NORESETLOGS ARCHIVELOG |
注:RESETLOGS/NORESETLOGS表示是否忽略LOGFILE中指定的日志文件内容,如果只是控制文件丢失,LOGFILE没问题的话则选择NORESETLOGS,反之则选择RESETLOGS。ARCHIVELOG/NOARCHIVELOG表示指定ARCHIVELOG时重新使用redo log前将其归档。默认未NOARCHILOG。
恢复数据库
SQL> recover database; |
打开数据库
SQL> alter database open; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 DBA学习记录!