控制文件的备份与恢复(二)
COVER DATABASE ---用来对所有的数据文件进行恢复,并且只能使用保存在文件系统上的归档日志和在线日志,
---并且前提是控制文件,不可以是还原或重建得到的。
2、 SQL>recover database using backup controlfile ---用来对所有数据文件和控制文件进行恢复,并且只能使用保存在文件系统
--上的归档日志和在线日志
3、 RMAN>recover database;---对所有数据文件和控制文件进行恢复,并且可以使用增量备份、备份中的和文件系统中的归档
--日志,以及文件系统上的在线日志
后两种可以自动修复以下3种情况:
1、备份控制文件中没有某个数据文件和表空间信息,但是实际存在的情况。
2、备份控制文件中没有某个在线日志组的信息,但是实际上存在的情况。
3、备份控制文件中具有某个在线日志组的信息,但是实际上是不存在的。
使用带 RESETLOGS 命令打开数据库,是因为 recover 命令只能修复控制文件中数据库物理结构信息,而不能修改控制文件
中的当前重做日志的序列号等信息,recover 执行完后,控制文件中的当前在线日志序列号还是陈旧的,oralce采用重设
日志功能,日志序列号将从1重新开始。该处的 resetlogs 仅仅是为了照顾还原的控制文件,这里的resetlogs 和不完全恢复
中的 resetlogs 不同。
手动备份恢复:
1、启动实例到 NOMOUNT 状态
2、探索备份集的位置
3、执行 restore controlfile from 'path' 命令还原控制文件(如果采用了恢复编录 from子句可以丢弃)
4、执行 mount database 将实例带入 mount 状态
5、执行 recover database 命令恢复数据库
6、执行 alter database open resetlogs 命令打开数据库,恢复完成
历史备份恢复:
1、如果备份控制文件中具有某个数据库文件或表空间信息,但是实际上不存在。则:
SQL> recover database using backup controlfile 或 recover database skip tablespace 才能修复。
2、备份控制文件中没有某个在线日志组的的信息,但实际上是存在的。则:
SQL>recover database using backup controlfile 命令,并手动指定重做日志的路径后才能完成恢复。
自动修复不一致的情况:
1、备份控制文件中没有某个数据文件和表空间信息,但是实际存在的情况。
控制文件自动备份功能关闭,在备份控制文件之后,创建了一个 a 表空间,备份控制文件中无此表空间,
这样物理结构与当前不一致,备份就成为了 历史备份。还原过程为:
RMAN>
startup nomount;
restore controlfile from 'path';---即历史备份路径
mount database;
SQL> select name from v$datafile;---查看新表空间中的数据文件是否存在(非必要过程)
recover database;
alter database open resetlogs;
手动修复不一致的情况:
控制文件自动备份关闭,备份了控制文件后,删除了一个 a 表空间,则在备份控制文件中,该表空间和数据文件
是存在的。这时控制文件损坏,还原过程:
RMAN>
startup nomount;
restore controlfile from 'path';
mount database;
-------------11
SQL>SELECT * FROM DATAFILE;---非必要过程(发现存在a 表空间和对应的数据文件)
SQL>ALTER DATABASE DATAFILE 5 OFFLINE;
SQL>recover database using backup controlfile;---按提示 输入 AUTO 继续。有可能出错(提示找不到某个归档日志)
--如果报错说找不的某个归档日志则再次执行recover
SQL>recover database using backup controlfile;--同样按提示输入 AUTO继续,并输入确实那个归档日志的路径。
--直到恢复完查看是否有那个数据文件
SQL>SELECT * FROM V$DATAFILE;
-------------11
----11 这个过程可以使用 recover database skip tablespace a 来替换
RMAN> ALTER DATABASE OPEN RESETLOGS;
缺失归档日志情况下的恢复
1、执行 STARTUP NOMOUNT
2、执行 RESTORE CONTROLFILE FROM AUTOBACKUP| 'PATH';
3、执行 执行 recover database 命令 报错提示找不到归档日志
4、利用 CREATE CONTROLFILE 命令重建控制文件
5、执行 recover database 命令 若报错提示找不到归档日志
6、查看V$LOG视图确定第五步中所需那个日志
7、在SQL/PLUS中执行 RECOVER DATABASE USING BACKUP CONTROLFILE ,等 "Specify log";提示符出现后给出正确的在线日志
路径,直到命令结束
8、以 resetlogs 方式打开数据库。
9、因为控制文件内不会有临时数据文件信息,所以需重新将其添加会临时表空间
alter tablespace temp add tempfile 'patj' reuse;
10、将控制文件内其他丢失的信息用 catalog 和 configure 命令再添加回来。
catalog db_recovery_file_dest;---如果使用恢复编录则无须执行该过程
查看已知的归档日志的最大序列号
SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG;
查询V$LOG视图得知控制文件需要从几号日志开始恢复。
select sequence# from v$log wher status='CURRENT';
noresetlogs
可以不用带 RESETLOGS 关键字打开数据库。方法就是 在 RECOVER DATABASE 成功完成后,重新创建一个新控制文件,
并在创建的命令中使用 noresetlogs 关键字。主要步骤为:
1、在执行完 recover database;
2、SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
3、重启实例至 nomount 状态。startup force nomount;
4、用追踪文件中的 noresetlogs 版本的 create controlfile 命令创建新的控制文件,创建完成后会自动进入 MOUNT 状态
5、执行 ALTER DATABASE OPEN 打开数据库,如果报错,先执行 RECOVER DATABASE 然后在 alter database open 打开数据库
6、因为控