rman 表空间物理文件丢失的恢复

  前提是有 rman 备份。

  rman 全备 run 块:

run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup as compressed backupset Database Format '/u01/backup/rman/20211220/bak_all_db_%s_%p_%T' filesperset=4;
#归档当前的重做日志(redolog)文件
sql 'alter system archive log current';
#备份归档日志
backup archivelog all format '/u01/backup/rman/20211220/bak_arch_%s_%p_%T' delete input;
#备份控制文件
backup current controlfile format '/u01/backup/rman/20211220/bak_ctl_%s_%p_%T';
#备份 spfile
backup spfile format  '/u01/backup/rman/20211220/bak_sp_%s_%p_%T';
crosscheck backup;
#检查备份是否存在于备份介质
crosscheck archivelog all;
#删除过期备份
delete noprompt obsolete;
#删除不在备份介质的备份记录
delete noprompt  expired backup;
delete noprompt backup of database completed before 'sysdate -15';
delete noprompt backup of archivelog all completed before 'sysdate -5';
delete noprompt  expired archivelog all;
#释放通道
release channel c1;
release channel c2;
release channel c3;
}

  rman 恢复 run 块:

run{restore database;recover database;}

  rman 恢复到某时间点 run 块:

run{set until time "to_date('2021-12-20 11:32:01','yyyy-mm-dd hh24:mi:ss')";restore database;recover database;}

测试情形 1 ,数据文件 (HCP.dbf) 被物理删除

  可以看到,靶场环境,HCP 用户下有一张 test 表:

rman 表空间物理文件丢失的恢复

 

  物理删除数据文件:

rman 表空间物理文件丢失的恢复

 

  整个数据库已经无法 shutdown immediate:

rman 表空间物理文件丢失的恢复

 

  shutdown abort;并启动到 mount 进行数据恢复:

rman 表空间物理文件丢失的恢复

 

  open 数据库,发现 test 表已恢复:

rman 表空间物理文件丢失的恢复

 

  查看物理文件,发现表空间物理文件也已恢复:
rman 表空间物理文件丢失的恢复

 

测试情形 2,数据文件 (HCP.dbf) 被手工误删除删除

    在 test 表中新插入 666 后,进行全备:

rman 表空间物理文件丢失的恢复

 

  手工删除表空间及物理文件,test 表已不存在:

rman 表空间物理文件丢失的恢复

 

  重启数据库到 mount,进行 rman 恢复:

rman 表空间物理文件丢失的恢复

  open 数据库,查询 test 表,发现依然不存在:

rman 表空间物理文件丢失的恢复

 

  基于时间点进行恢复:

rman 表空间物理文件丢失的恢复

 

  open 数据库,查看 test 表:

rman 表空间物理文件丢失的恢复

 

  依然没有恢复,原因是什么

 

上一篇:2021“MINIEYE杯”中国大学生算法设计超级联赛(2)1004 - I love counting trie操作好题


下一篇:题解 Medium Counting