oracle的异机不完全恢复-路径不一致恢复:
1.恢复要点:异机恢复的操作系统,数据库版本一致,精确到小版本。
2.恢复要点:恢复控制文件用RMAN>restore controlfile from '/home/oracle/orcl_recover_0922/ncsnf0_tag20160907t110022_0.615.921927741';
3.恢复要点:将备份集重新注册到控制文件。
4.恢复要点:修改数据文件和日志文件路径可用下面语句:
set newname for datafile 1 to '/u01/app/oracle/oradata/orcl/system.dbf';
alter database rename file '+DG_DATAFILEORCL/orcl/onlinelog/group_1.262.910013385' to '/u01/app/oracle/oradata/orcl/group1B.log';
5.特别注意恢复时候的版本。我上次做异机恢复实验.原机是centos6.5+oracle11.2.0.3.0,目标机是:redhat6.5+oracle11.2.0.4.0, 结果恢复出来,
在alter database open resetlogs,这最后一步,出现了很多意外的问题,跟目标机的环境有很大的关系。
6.以下是恢复过程,中间有不必要的代码会省略。
【1】把要恢复的备份片,拷贝到目标机。
ncsnf0_tag20160907t110022_0.615.921927741 包括参数文件,控制文件
nnndf0_tag20160907t110022_0.294.921927625 包括数据文件
thread_1_seq_1123.339.921956079
thread_1_seq_1124.338.921967313
那怎么确定,我需要拷贝哪些归档日志呢?这要看需求恢复到哪个时间?提供如下两个函数
select * from nls_session_parameters;
select timestamp_to_scn('21-Sep-16 10.00.00') from dual;
select scn_to_timestamp(17982985) from dual;
【2】恢复参数文件
[oracle@oracleIns ~]$ export ORACLE_SID=orcl
[oracle@oracleIns ~]$ rman target /
RMAN> set dbid=1437794116
executing command: SET DBID
RMAN>startup nomount
这里注意的是,rman命令使用了默认的隐含参数。
RMAN>restore spfile from '/home/oracle/app/flash_recovery_area/ORCL/autobackup/2015_06_06/o1_mf_s_881702383_bq5x0wq0_.bkp';
RMAN>shutdown immediate
SQL>create pfile='/path/orcl.ora' from spfile;
修改pfile配置文件,这里修改控制文件路径,sga,memory_target等参数,让它适应目标机。
SQL>create spfile from pfile='/path/orcl.ora';
RMAN>startup nomount
这样就恢复了参数文件。
【3】恢复控制文件
RMAN>restore controlfile from '/home/oracle/orcl_recover_0922/ncsnf0_tag20160907t110022_0.615.921927741';
RMAN>alter database mount;
【4】修改重做日志文件路径:
SQL> alter database rename file '+DG_DATAFILEORCL/orcl/onlinelog/group_1.263.910013389' to '/u01/app/oracle/oradata/orcl/group1.log';
SQL>alter database rename file '+DG_DATAFILEORCL/orcl/onlinelog/group_1.262.910013385' to '/u01/app/oracle/oradata/orcl/group1B.log';
SQL> alter database rename file '+DG_DATAFILEORCL/orcl/onlinelog/group_2.265.910013397' to '/u01/app/oracle/oradata/orcl/group2.log';
SQL> alter database rename file '+DG_DATAFILEORCL/orcl/onlinelog/group_2.264.910013393' to '/u01/app/oracle/oradata/orcl/group2B.log';
SQL> alter database rename file '+DG_DATAFILEORCL/orcl/onlinelog/group_3.267.910013405' to '/u01/app/oracle/oradata/orcl/group3.log';
SQL> alter database rename file '+DG_DATAFILEORCL/orcl/onlinelog/group_3.266.910013401' to '/u01/app/oracle/oradata/orcl/group3B.log';
【5】重新将备份片backupset,归档日志注册到控制文件:
将备份集重新注册到控制文件
方法一:注册单个备份片
RMAN> CATALOG BACKUPPIECE '/u01/bak/arch_0no76njh_1_1_20130416','/u01/bak/ctl_file_0oo76njm_1_1_20130416'
方法二:注册整个目录
---ASM:
CATALOG START WITH '+disk'; # catalog allfiles from an ASM disk group
--本地目录:最后一定要加/
CATALOG START WITH '/fs1/datafiles/'; #catalog all files in directory
--有多个目录,注册多次:
RMAN> catalog start with'/data01/';
RMAN>catalog start with '/data02/';
RMAN>catalog start with '/data03/';
【6】同时清理控制文件中不存在的备份片,归档日志,为接下来数据文件恢复做准备:
RMAN>crosscheck backupset;
RMAN>crosscheck copy;
RMAN>delete expired backupset;
RMAN>delete expired copy;
【7】数据文件恢复,这里注意脚本是怎么修改数据文件日志的:
RUN{
set newname for datafile 1 to '/u01/app/oracle/oradata/orcl/system.dbf';
set newname for datafile 2 to '/u01/app/oracle/oradata/orcl/sysaux01.dbf';
set newname for datafile 3 to '/u01/app/oracle/oradata/orcl/undotbs1.dbf';
set newname for datafile 4 to '/u01/app/oracle/oradata/orcl/users.dbf';
set newname for datafile 5 to '/u01/app/oracle/oradata/orcl/lyk.dbf';
set newname for datafile 6 to '/u01/app/oracle/oradata/orcl/posjk.dbf';
set newname for datafile 7 to '/u01/app/oracle/oradata/orcl/bcard.dbf';
set newname for datafile 8 to '/u01/app/oracle/oradata/orcl/channel.dbf';
set newname for datafile 9 to '/u01/app/oracle/oradata/orcl/cp.dbf';
set newname for datafile 10 to '/u01/app/oracle/oradata/orcl/njcs.dbf';
set newname for datafile 11 to '/u01/app/oracle/oradata/orcl/njsmk.dbf';
set newname for datafile 12 to '/u01/app/oracle/oradata/orcl/posjk1.dbf';
set newname for datafile 13 to '/u01/app/oracle/oradata/orcl/posjk2.dbf';
set newname for datafile 14 to '/u01/app/oracle/oradata/orcl/vas.dbf';
set newname for datafile 15 to '/u01/app/oracle/oradata/orcl/fin.dbf';
set newname for datafile 16 to '/u01/app/oracle/oradata/orcl/njcs1.dbf';
set newname for datafile 17 to '/u01/app/oracle/oradata/orcl/posjk3.dbf';
set newname for datafile 18 to '/u01/app/oracle/oradata/orcl/njcc.dbf';
restore database;
switch datafile all;
recover database;
}
这个步骤花时间是最多的。
在执行recover database;时候会报错:
RMAN-06025: no backup of archived log for thread 1 with sequence *** and starting SCN of ********* found to restore
因为找不到更多的归档日志了嘛。其实这正是我们要的目标,恢复到某个时间点:
接着再来不完全恢复:
recover database until time "to_date('2015-04-20 08:13:50','yyyy-mm-dd hh24:mi:ss')";
recover database until sequence 123 thread 1;
recover database until scn 888;
【8】打开数据库。这个步骤会出现很多错误,如果你异机恢复的操作系统,数据库版本不一致。
alter database open resetlogs;
1.恢复要点:异机恢复的操作系统,数据库版本一致,精确到小版本。
2.恢复要点:恢复控制文件用RMAN>restore controlfile from '/home/oracle/orcl_recover_0922/ncsnf0_tag20160907t110022_0.615.921927741';
3.恢复要点:将备份集重新注册到控制文件。
4.恢复要点:修改数据文件和日志文件路径可用下面语句:
set newname for datafile 1 to '/u01/app/oracle/oradata/orcl/system.dbf';
alter database rename file '+DG_DATAFILEORCL/orcl/onlinelog/group_1.262.910013385' to '/u01/app/oracle/oradata/orcl/group1B.log';
5.特别注意恢复时候的版本。我上次做异机恢复实验.原机是centos6.5+oracle11.2.0.3.0,目标机是:redhat6.5+oracle11.2.0.4.0, 结果恢复出来,
在alter database open resetlogs,这最后一步,出现了很多意外的问题,跟目标机的环境有很大的关系。
6.以下是恢复过程,中间有不必要的代码会省略。
【1】把要恢复的备份片,拷贝到目标机。
ncsnf0_tag20160907t110022_0.615.921927741 包括参数文件,控制文件
nnndf0_tag20160907t110022_0.294.921927625 包括数据文件
thread_1_seq_1123.339.921956079
thread_1_seq_1124.338.921967313
那怎么确定,我需要拷贝哪些归档日志呢?这要看需求恢复到哪个时间?提供如下两个函数
select * from nls_session_parameters;
select timestamp_to_scn('21-Sep-16 10.00.00') from dual;
select scn_to_timestamp(17982985) from dual;
【2】恢复参数文件
[oracle@oracleIns ~]$ export ORACLE_SID=orcl
[oracle@oracleIns ~]$ rman target /
RMAN> set dbid=1437794116
executing command: SET DBID
RMAN>startup nomount
这里注意的是,rman命令使用了默认的隐含参数。
RMAN>restore spfile from '/home/oracle/app/flash_recovery_area/ORCL/autobackup/2015_06_06/o1_mf_s_881702383_bq5x0wq0_.bkp';
RMAN>shutdown immediate
SQL>create pfile='/path/orcl.ora' from spfile;
修改pfile配置文件,这里修改控制文件路径,sga,memory_target等参数,让它适应目标机。
SQL>create spfile from pfile='/path/orcl.ora';
RMAN>startup nomount
这样就恢复了参数文件。
【3】恢复控制文件
RMAN>restore controlfile from '/home/oracle/orcl_recover_0922/ncsnf0_tag20160907t110022_0.615.921927741';
RMAN>alter database mount;
【4】修改重做日志文件路径:
SQL> alter database rename file '+DG_DATAFILEORCL/orcl/onlinelog/group_1.263.910013389' to '/u01/app/oracle/oradata/orcl/group1.log';
SQL>alter database rename file '+DG_DATAFILEORCL/orcl/onlinelog/group_1.262.910013385' to '/u01/app/oracle/oradata/orcl/group1B.log';
SQL> alter database rename file '+DG_DATAFILEORCL/orcl/onlinelog/group_2.265.910013397' to '/u01/app/oracle/oradata/orcl/group2.log';
SQL> alter database rename file '+DG_DATAFILEORCL/orcl/onlinelog/group_2.264.910013393' to '/u01/app/oracle/oradata/orcl/group2B.log';
SQL> alter database rename file '+DG_DATAFILEORCL/orcl/onlinelog/group_3.267.910013405' to '/u01/app/oracle/oradata/orcl/group3.log';
SQL> alter database rename file '+DG_DATAFILEORCL/orcl/onlinelog/group_3.266.910013401' to '/u01/app/oracle/oradata/orcl/group3B.log';
【5】重新将备份片backupset,归档日志注册到控制文件:
将备份集重新注册到控制文件
方法一:注册单个备份片
RMAN> CATALOG BACKUPPIECE '/u01/bak/arch_0no76njh_1_1_20130416','/u01/bak/ctl_file_0oo76njm_1_1_20130416'
方法二:注册整个目录
---ASM:
CATALOG START WITH '+disk'; # catalog allfiles from an ASM disk group
--本地目录:最后一定要加/
CATALOG START WITH '/fs1/datafiles/'; #catalog all files in directory
--有多个目录,注册多次:
RMAN> catalog start with'/data01/';
RMAN>catalog start with '/data02/';
RMAN>catalog start with '/data03/';
【6】同时清理控制文件中不存在的备份片,归档日志,为接下来数据文件恢复做准备:
RMAN>crosscheck backupset;
RMAN>crosscheck copy;
RMAN>delete expired backupset;
RMAN>delete expired copy;
【7】数据文件恢复,这里注意脚本是怎么修改数据文件日志的:
RUN{
set newname for datafile 1 to '/u01/app/oracle/oradata/orcl/system.dbf';
set newname for datafile 2 to '/u01/app/oracle/oradata/orcl/sysaux01.dbf';
set newname for datafile 3 to '/u01/app/oracle/oradata/orcl/undotbs1.dbf';
set newname for datafile 4 to '/u01/app/oracle/oradata/orcl/users.dbf';
set newname for datafile 5 to '/u01/app/oracle/oradata/orcl/lyk.dbf';
set newname for datafile 6 to '/u01/app/oracle/oradata/orcl/posjk.dbf';
set newname for datafile 7 to '/u01/app/oracle/oradata/orcl/bcard.dbf';
set newname for datafile 8 to '/u01/app/oracle/oradata/orcl/channel.dbf';
set newname for datafile 9 to '/u01/app/oracle/oradata/orcl/cp.dbf';
set newname for datafile 10 to '/u01/app/oracle/oradata/orcl/njcs.dbf';
set newname for datafile 11 to '/u01/app/oracle/oradata/orcl/njsmk.dbf';
set newname for datafile 12 to '/u01/app/oracle/oradata/orcl/posjk1.dbf';
set newname for datafile 13 to '/u01/app/oracle/oradata/orcl/posjk2.dbf';
set newname for datafile 14 to '/u01/app/oracle/oradata/orcl/vas.dbf';
set newname for datafile 15 to '/u01/app/oracle/oradata/orcl/fin.dbf';
set newname for datafile 16 to '/u01/app/oracle/oradata/orcl/njcs1.dbf';
set newname for datafile 17 to '/u01/app/oracle/oradata/orcl/posjk3.dbf';
set newname for datafile 18 to '/u01/app/oracle/oradata/orcl/njcc.dbf';
restore database;
switch datafile all;
recover database;
}
这个步骤花时间是最多的。
在执行recover database;时候会报错:
RMAN-06025: no backup of archived log for thread 1 with sequence *** and starting SCN of ********* found to restore
因为找不到更多的归档日志了嘛。其实这正是我们要的目标,恢复到某个时间点:
接着再来不完全恢复:
recover database until time "to_date('2015-04-20 08:13:50','yyyy-mm-dd hh24:mi:ss')";
recover database until sequence 123 thread 1;
recover database until scn 888;
【8】打开数据库。这个步骤会出现很多错误,如果你异机恢复的操作系统,数据库版本不一致。
alter database open resetlogs;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30393770/viewspace-2125532/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30393770/viewspace-2125532/