今天决定模拟一个比较极端的情况,数据文件+redo+controlfile全部丢失的情况下,用rman进行恢复
先开始备份吧
RMAN> run{
2> configure retention policy to recovery window of 7 days;
3> configure backup optimization on;
4> configure controlfile autoSQL> startup nomount
5> allocate channel d1 type disk format 'd:/rman_backup/%U';
6> allocate channel d2 type disk format 'd:/rman_backup/%U';
7> backup database filesperset 3 plus archivelog filesperset 10 delete all input;
8> release channel d1;
9> release channel d2;
10> }
备份完成把数据库文件全部干掉
ORACLE 例程已经启动。
Total System Global Area 293601280 bytes
Fixed Size 1248600 bytes
Variable Size 75498152 bytes
Database Buffers 209715200 bytes
Redo Buffers 7139328 bytes
SQL>
rman nocatalog target /
RMAN> restore controlfile from autobackup;
启动 restore 于 15-4月 -10
使用通道 ORA_DISK_1
恢复区域目标: d:/oracle/product/10.2.0/flash_recovery_area
用于搜索的数据库名 (或数据库的唯一名称): LEARN
通道 ORA_DISK_1: 在恢复区域中找到自动备份
通道 ORA_DISK_1: 已找到的自动备份: D:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/
LEARN/AUTOBACKUP/2009_12_10/O1_MF_S_705274758_5L1YJ8JM_.BKP
通道 ORA_DISK_1: 从自动备份复原控制文件已完成
输出文件名=D:/ORACLE/PRODUCT/10.2.0/ORADATA/LEARN/CONTROL01.CTL
输出文件名=D:/ORACLE/PRODUCT/10.2.0/ORADATA/LEARN/CONTROL02.CTL
输出文件名=D:/ORACLE/PRODUCT/10.2.0/ORADATA/LEARN/CONTROL03.CTL
完成 restore 于 15-4月 -10
RMAN> alter database mount;
RMAN> restore database;
RMAN-03002: restore 命令 (在 04/15/2010 22:13:12 上) 失败
RMAN-06026: 有些目标没有找到 - 终止恢复
RMAN-06023: 没有找到数据文件4的副本来恢复
RMAN-06023: 没有找到数据文件3的副本来恢复
RMAN-06023: 没有找到数据文件2的副本来恢复
RMAN-06023: 没有找到数据文件1的副本来恢复
居然报错了,查看了一下autobackup恢复回来的controlfile,居然比我移动出去的小了100多K,于是将移动走的控制文件覆盖回去,重启数据库到mount
C:/Documents and Settings/Administrator>rman nocatalog target /
RMAN> restore database;
这下可以执行了。。。看来autobackup的controlfile有问题。。没有包含最新的备份信息
RMAN> recover database;
启动 recover 于 15-4月 -10
使用通道 ORA_DISK_1
正在开始介质的恢复
无法恢复介质
redolog没了 看来是不能recover database了,看来redolog里的数据丢了,只能做不完全恢复,看看能不能启动数据库
SQL> recover database until cancel;
ORA-00279: 更改 858544 (在 04/15/2010 21:55:31 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:/ARCHIVELOG/LEARN/ARC00060_0705190799.001
ORA-00280: 更改 858544 (用于线程 1) 在序列 #60 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> alter database open resetlogs;
数据库已更改。
数据库打开了,我这里还有一个库做了dataguard,看看对standby数据库有没有影响
SQL> alter database recover managed standby database disconnect from session;
数据库已更改。
看来没有影响,这次看来还是遇到了问题,接下来进行测试,在rman的备份全部完成后,再次进行controlfile的备份,结果可以恢复数据库
这样恢复的控制文件
RMAN> restore controlfile from 'D:/rman_backup/3QLB7GS5_1_1';
由此看来,丢失控制文件的情况下恢复数据库,靠autobackup的controlfile是没用的,controlfile最好做多工,并且编写rman脚本的时候备份完成后最好手动备份一下controlfile,并且名字最好和别的备份集区分出来。