十六、归档模式下的完全恢复
在归档模式下,拥有RMAN的备份和归档重做日志以及当前的重做日志文件,可以做到数据库的完全恢复,并且是联机状态的下的恢复。
1.非系统表空间损坏的恢复
做数据库完全备份
RMAN> backup as compressed backupset database plus archivelog delete all input;
创建测试表
SQL> create table test123 tablespace users as select * from dba_segments;
删除测试表的表空间数据文件
SQL> ! rm -rf /u01/app/oradata/orcl/users01.dbf
重启数据库
SQL> shutdown immediate
SQL> startup
为了先打开数据库,先将该数据库文件离线。
SQL> alter database datafile 4 offline;
SQL> alter database open; --这里也可以在mounted状态进行恢复后再打开数据库
还原数据文件
RMAN> restore datafile 4;
恢复数据文件
RMAN> recover datafile 4;
将数据库文件online
SQL> alter database datafile 4 online;
也可以将以上命令放在rman脚本中。
run {
sql 'alter database datafile 4 offline';
restore tablespace users;
recover tablespace users;
sql 'alter database datafile 4 online';
}
2.系统表空间损坏的恢复
系统表空间损坏,必须先做恢复,数据库才能打开。
删除数据文件system01.dbf
[oracle@oracle11g ~]$ rm -rf /u01/app/oradata/orcl/system01.dbf
注意:此时可能会无法重新连接数据库:
使用RMAN登录也失败,使用shutdown abort停止数据库:
启动数据库到mount状态
SQL> shutdown immediate
SQL> startup
使用RMAN脚本恢复数据文件。
RMAN> run {
sql 'alter database datafile 1 offline';
restore datafile 1;
recover datafile 1;
sql 'alter database datafile 1 online';
}
启动数据库
SQL> alter database open;
3.所有数据文件丢失的恢复
删除所有数据文件。
[oracle@oracle11g orcl]$ rm -f /u01/app/oradata/orcl/*.dbf
使用RMAN脚本恢复数据文件。
SQL> shutdown abort
SQL> startup
RMAN> run {
restore database;
recover database;
sql 'alter database open';
}