Oracle rman恢复 rman 中的恢复对应两个操作: 数据库修复(restore)和 数据库恢复(recover)
1、 数据库修复(restore):是指利用备份集的数据文件来替换已经损坏的数据库文件或者将其恢复到一个新的位置。
2、 数据库恢复(recover): 是指应用所有重做日志,将数据库恢复到崩溃前的状态;或者应用部分重做日志,将数据库恢复到指定的时间点。
rman 执行数据库恢复大致可以分为三步:
1、将数据库置于正确的状态: mount/open, 一般整库恢复的话,需要在 mount 状态操作;表空间或数据文件级的恢复也可以在 open 状态下操作。
2、 执行完全或不完全恢复: 完全恢复 就是应用所有数据库生成的重做日志; 不完全恢复 就是只应用部分重做日志; 执行 不完全恢复 主要是通过执行 restore/recover 命令时,附加 until 子句来限制恢复到的时间点。
3、打开数据库:如果恢复时执行的是不完全恢复,打开时 必须指定 resetlogs
rman 基础恢复操作
用 rman 备份的就都能被恢复。 rman 中提供了多种不同级别的恢复方式,具体如下:
1、对数据库进行完全介质恢复
rman> startup mount;
rman> restore database;
rman> recover database delete archivelogs skip tablespace temp;
rman> alter database open;
2、恢复表空间和数据文件
3、恢复归档日志文件
rman> restore archivelog sequence between 20 and 30;
rman> restore archivelog sequence between 20 and 30 from 'f:/oracle/backup/c_12323';
4、恢复控制文件和spfile 初始化参数文件
针对控制文件丢失,数据库肯定启动不到 mount 状态了,只能将数据库启动到 nomount 状态,必须指定 DBID
rman> SET DBID = 123243545;
rman> restore controlfile from 'f:/oracle/backup/c_12323';#从指定备份集中恢复控制文件
rman> alter database mount;
rman> recover database;
针对恢复控制文件的操作,最后打开数据库时,必须指定 resetlogs
rman> alter database open resetlogs;
恢复spfile
rman> restore spfile to '/tmp/spfiletemp.ora' from 'f:/oracle/backup/c_12323';#执行恢复操作时,如果实例正在运行中,就不能覆盖当前的 spfile ,但可以通过 to 子句恢复到其他路径下。
rman 恢复示列 通过 rman 备份恢复数据库到其他服务器(单实例迁移)
源库和目标库的数据库版本必须相同。为了简单起见,假设 源端与目标端 目录结构保持一致。
1、在源库端创建数据库的完整备份集(包含控制文件、数据文件、归档文件),将其复制到目标端的相同路径下,强调一点,必须是相同路径。
rman> backup database plus archivelog format '/home/oracle/rman/bak_%U.dbf';
2、配置目标端数据库的初始化参数文件
假设 源端与目标端 目录结构保持一致,直接复制源端的 spfile 初始化参数文件 到 目标端的适当路径下,linux 环境则是$ORACLE_HOME/dbs, 同时注意spfile的命名规则。否则,要修改其中的部分参数值
export ORACLE_SID=jssbook
sqlplus / as sysdba;
SQL>startup nomount;# 有了spfile,数据库就可以启动到 nomount 状态了
3、恢复控制文件并进入到加载状态 mount
export ORACLE_SID=jssbook
rman target /
rman>set DBID=1223424;#目标数据库尚无控制文件,因此此处必须首先指定DBID
--从指定备份集中恢复控制文件
rman> restore controlfile from '/home/oracle/rman/bak_12323.dbf'; # 控制文件会被恢复到初始化参数 CONTROL_FILES 指定的目录下。
rman> alter database mount;# 有了控制文件,就可以将数据库置为 mount 状态了
4、修复数据库(复制数据文件)
–源端与目标端 目录结构保持一致,因此这里可以直接用源路径修复。如果源端与目标端 目录结构不一致时, 需要通过 set newname for datafile 命令来为数据文件重新设定路径
rman> restore database;
5、恢复数据库(应用重做日志)
rman> recover database;
或
rman> recover database until sequence 52;
6、用 open resetlogs 方式 打开数据库即可。
rman> alter database open resetlogs;