Rman包括两个过程:数据库修复(restore)和数据库恢复(recover)
数据库修复(restore):是指利用备份集的数据文件来替换已经损坏的或者将其恢复到一个新的位置。Rman在进行修复时,会利用恢复目录(没有建立恢复目录就是用目标数据库的控制文件)来获取备份信息,并从中选择最合适的备份进行修复操作。选择备份的两个原则:选择距离恢复目录时刻最近的和优先选择镜像复制。
数据库恢复(recover):是指应用所有的重做日志,讲数据库恢复到崩溃前的状态,或者应用部分REDO,讲数据库恢复的指定的时间点。
恢复场景;
1. 数据库的完全介质恢复
数据库只剩下控制文件和spfile文件,其他数据文件全部丢失,存在整库的备份,所有归档文件和重做日志文件都在,可以讲数据库恢复到崩溃前的那一刻状态。
执行过程:
RMAN> startup mount;
RMAN> restore database;
RMAN> recover database delete archivelogs skip tablespace temp;
RMAN> alter database open;
Delete archivelogs 表示rman在完成恢复后删除那些在恢复过程中产生的归档日志文件,只删除由它产生的归档文件爱你,执行restore/recover之前的归档不会删除。Skip tablespace不显示指定也没关系,因为该表空间就没备份。
2. 恢复表空间
RMAN> sql ‘alter tablespace jweb offline immediate’;
RMAN> restore tablespace jweb;
RMAN> recover tablespace jweb;
RMAN> sql ‘alter tablespace jweb online’;
3. 恢复数据文件
RMAN> sql ‘alter database datafile 10 offline’;
RMAN> restore datafile 10;
RMAN> recover datafile 10;
RMAN> sql ‘alter database datafile 10 online’;
4. 恢复归档文件
RMAN> restore archivelog sequence between 20 and 20;
归档文件存储到其他路径:
RMAN> RUN{
set archivelog destination to ‘/data/arclog’;
restore archivelog sequence between 35 and 40;
}
5. 恢复控制文件和spfile初始化参数文件
RMAN>SET DBID=…….;
RMAN>startup nomount;
RMAN>restore controlfile from autobackup;
或者
RMAN>restore controlfile to ‘/data/control.ctl’ from autobackup;
设置控制文件自动备份的路径:
set controlfile autobackup format for device type disk to ‘ /data/…..‘;
从备份集中恢复控制文件:
RMAN> set dbid=….;
RMAN> startup nomount;
RMAN> restore controlfile from ‘/data/…..’
恢复spfile文件:
RMAN>set dbid=….;
RMAN>startup nomount;
RMAN> restore spfile to ‘….’ from autobackup;
6. 归档模式无备份,丢失数据文件的恢复(保存了从数据库创建开始所有的联机重做日志和归档日志文件)
方法1:
SQL> Alter database create datafile ‘/data/orcl/bookso1.dbf’ as ‘…..’;
SQL>recover datafile 6;
SQL>alter database open;
方法2:
RMAN TARGET /
RMAN> restore datafile 6;
RMAN> recover datafile 6;
SYSTEM表空间的数据文件丢失或损坏,除非借助备份,否则无法直接恢复。如果临时表空间数据丢失,丢就丢呗,重建临时表空间就行。
7. 丢失控制文件的恢复
在nocatalog模式下,rman创建的备份信息都保存在目标数据库的控制文件。控制文件丢失,不仅目标数据库崩溃,rman备份信息也会丢失。
RMAN>SET DBID=145254;
RMAN> restore controlfile from ‘….(备份集)’;
RMAN> alter database mount;
RMAN> recover database;
RMAN> alter database open resetlog;
8. 丢失联机重做日志文件的恢复
(1) 丢失非当前的联机重做日志文件
确认丢失文件状态,查看v$log和v$logfile
SQL>alter database clear logfile group 1;
SQL>alter database open;
(2) 丢失当前的联机重做日志文件
如果是归档模式且具有备份,建议通过备份进行不完全恢复,正常情况只丢失当前联机重做日志文件中的数据。如果没有备份,只能强制恢复。
SQL> alter system set “_ALLOW_RESETLOGS_CORRUPTION”=true scope=spfile;
(确保oracle在open时跳过一些一致性检查)
SQL> SHUTDOWN IMMEDIATE:
SQL> startup mount;
SQL> RECOVER DATABASE UNTIL CANCEL;
alter database mount;
执行这条命令后可能会报错,因为创建的热备份并不是一致性备份,源端的归档是过来了。但联机重做日志文件并没有随备份集复制过来,因此恢复时肯定恢复不到源端的当前状态。如果避免看到这个错误,可以在recover database前指定set until scn或者用set until time命令设置恢到SCN号或时间,执行不完全恢复。
(3)alter database open resetlog;

(9) 通过rman备份恢复到其他服务器上
将源库的spfile初始化文件复制到目标端的适当路径。
(1) 修改部分参数值。如果目标端路径和源端的保持完全一致,不做任何修改都可以。
不一致至少要保证以下几个参数值正确:
control_files,audit_file_dest,background_file_dest, core_dump_dest,user_dump_dest,
log_archive_dest_1
通过spfile转化为pfile,然后修改pfile,再转化为spfile
(2)恢复控制文件并进入到加载状态。
RMAN> set dbid=145845
RMAN> restore controlfile from ‘……..’;
RMAN> alter database mount;
如果源端与目标端的路径不一致,可以通过SET NEWNAME FOR DATAFILE命令来为数据文件重新设定路径。
run
{
set newname for datafile 1 to '/test_ora/new/system01.dbf';
set newname for datafile 2 to '/test_ora/new/rbs01.dbf';
set newname for datafile 3 to '/test_ora/new/users01.dbf';
set newname for datafile 4 to '/test_ora/new/test01.dbf';
set newname for datafile 5 to '/test_ora/new/test201.dbf';
restore database;
}
alter database mount;
执行这条命令后可能会报错,因为创建的热备份并不是一致性备份,源端的归档是过来了。但联机重做日志文件并没有随备份集复制过来,因此恢复时肯定恢复不到源端的当前状态。如果避免看到这个错误,可以在recover database前指定set until scn或者用set until time命令设置恢到SCN号或时间,执行不完全恢复。
(3)alter database open resetlog;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29844843/viewspace-1339313/ ,如需转载,请注明出处,否则将追究法律责任。