控制文件的备份与恢复(二)

2014-11-24 12:48:37 · 作者: · 浏览: 2
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、因为控