介质恢复是基于物理备份恢复数据,它包括块恢复、数据文件恢复、表空间恢复和整个数据库的恢复。
介质恢复的过程
步骤
介质恢复过程包括还原(RESTORE)和恢复(RECOVER)两个步骤
- RESTORE:将某个时间点的数据文件的拷贝再拷贝回去,还原到一个不一致的状态或不是最新的状态,还需要recover操作
- RECOVER:使用日志(归档或是联机在线日志)将不一致的数据库应用到一致性状态
恢复过程分类
数据库的恢复过程又分为完全恢复和不完全恢复。
完全恢复
完全恢复是一种没有数据丢失的恢复方式,它能够恢复到最新联机在线日志中已提交的数据。
不完全恢复
不完全恢复是一种丢失数据的恢复方式,称为基于时间点的恢复。它只能针对整个数据库的恢复。不完全恢复根据备份情况恢复到与指定时间、日志序列号和SCN具有一致性的数据,之后的数据都将丢失。使用RESTLOGS选项打开数据库
场景
- 丢失归档日志,联机日志的情形
- 在某一刻误操作数据,想要找回数据
不完全恢复的选项
不完全恢复方式 | RMAN选项 |
---|---|
恢复到某个时间点 | until time |
恢复到某个日志序列号 | until suquence |
恢复到某个SCN号 | until SCN |
数据库完全恢复
Oracle数据库中有各种各样的块,如空块、表头块、数据块、索引块、数据文件头块、UNDO段块等。如果损坏的是普通表的数据块,那即不会影响启动数据库,也不会影响其他表的正常访问,只是在访问该表的时候会出现问题。如果损坏的是数据文件的块头,那么将导致数据库无法正常启动和停止,进行块恢复不能修复这个问题,只有数据文件的完全恢复才能恢复数据文件块头的损坏或尝试使用BBED修改数据文件块头。
数据文件的完全恢复
命令还原、恢复6号数据文件
rman target /
restore datafile 6;
recover datafile 6;
打开数据库
alter database open;
数据库不完全恢复
基于时间点的不完全恢复
rman target /
run {
shutdown immediate;
startup mount;
SQL "alter session set nls_date_format=‘‘YYYY-MM-DD HH24:MI:SS‘‘";
set until time ‘2021-08-08 18:24:00‘;
restore database;
recover database;
alter database open resetlogs;
}
基于SCN的不完全恢复
run {
shutdown immediate;
startup mount;
set until scn 5166390;
restore database;
recover database;
alter database open resetlogs;
}
基于序列号的不完全恢复
run {
shutdown immediate;
startup mount;
set until sequence 10350 thread 1;
restore database;
recover database;
alter database open resetlogs;
}
不包含10350序号的日志中redo数据