一 基于时间点/SCAN的不完全恢复
恢复场景 单表被drop 或者大量数据被整改 也可以使用回收站功能 对于drop/delete
scan 查询 select current_scn from v$database
1 启动数据库到MOUNT状态,然后查看当前的INCARNATION号
2 可以通过 RESET DATABASE TO INCARNATION <INCARNATION号> 进行重置
3 RMAN 执行以下
RUN { allocate channl a1 type disk ;SET UNTIL TIME "to_date('2014-01-17 09:54:33','yyyy-mm-dd hh24:mi:ss')"/set until scan number; RESTORE DATABASE; RECOVER DATABASE; }
ALTER DATABASE OPEN RESETLOGS;
总结
1 需要有一个当前或者最新的全量备份
2 需要有回滚时间点之前的归档日志
3 不完全恢复后要进行全量的备份
二 恢复数据
1 数据文件
在线 open状态
alter database datafile number offline;
restore datafile number;rman
recover datafile number;
alter database datafile nummber online
离线 mount状态
restore datafile number;rman
recover datafile number;
alter database open
2 数据表空间
在线open状态/离线状态
不能离线如下表空间(system undo tablespace temporary tablespace)
alter database datafile(多个) number offline;
restore tablespace name; rman
recover tablesplace name
3 系统表空间 需要重启
只能离线进行恢复
restore datafile number;rman
recover datafile number;
4 丢失控制文件 涉及到控制文件的恢复必须都要重启
0 关闭数据库
1 startup force nomount;
2 restore controlfile from autobackup(从自动备份中恢复) rman
3 alter database mount
4 recover database 由于控制文件是老的 所以recover需要做全局一致性恢复
5 alter database open resetlogs 不完全恢复
6 在临时表空间中添加临时文件
三 异地全量恢复步骤
要确保数据目录都相同
1 alter database mount;
2 restore database; 恢复数据文件
3 recover database; 恢复归档日志
4 alter database open resetlogs 打开数据库,重新应用redo计数
四 存储损坏 恢复到异目录 保持原数据不变
0 startup 启动到nomount
1 set dbid= '' 根据备份内容查找
2 restore controlfile to "new_dir" from "backup_dir"
3 alter system control_files="new_dir" scope=spfile
4 run {
set newname for datafile "old_dir' to 'new_dir';
restore database;
switch datafile all;
}
5 alter database backup controlfile to trace as 'a.txt' 导出控制文件
6 修改a.txt相关路径内容 复制 然后执行 重建控制文件
7 recover database using backup controlfile
8 ALTER DATABASE OPEN RESETLOGS;
五 总结
所有恢复场景的前提都是要有一个最新的RMAN全量备份