二、基于差异备份恢复7月20日星期四早上8:30分数据
1.查询所需要的归档日志(因为要返回20号刂8:30分的数据,所以控制 文件要晚于这个点,即取21号凌晨2点备份的控制文件)
bplist -C zhnsdfp -s 2017-7-18 -e 2017-7-21 -k oracle_zhnsdfp_0_97_seinescm_arch -t 4 -R -b -l / |findstr "cnt"
2.基于Windows平台,要先创建一个实例,实例名可以根据你自己命名,Liunx平台可以直接创建一个pfile文件启动到nomount状态
3、Windows平台下创建好实例后,调整归档模式及目录,关闭数据库后可以将除了参数文件的其他数据库文件通通删掉
shutdown immediate 后删除以下文件:
删除归档文件G:SEINESCMARCHIVELOG
删除数据文件:N:SEINESCM_DB M:DB_DATASEINESCMDB
删除日志文件:D:ORACLEDBSEINESCMREDO1.LOG、REDO2.LOG、REDO3.LOG
删除控制文件:D:ORACLEDBSEINESCMCONTROL01.CTL、CONTROL02.CTL
删除临时文件:M:DB_DATASEINESCMDBTEMP03.DBF N:SEINESCM_TEMPDBTEMP10.DBF、TEMP11.DBF
--查询数据文件位置: select name from v$datafile; --查询日志文件位置: select * from v$logfile; --查询控制文件位置: select name from v$controlfile; --查看临时文件位置: select * from v$tempfile;
4.开始还原控制文件
进入rman,数据库起到nomount利用备份文件进行控制文件还原
set oracle_sid=seinescm rman target / startup nomount; run{ allocate channel ch00 type 'SBT_TAPE'; send 'nb_ora_serv=nbumaster01'; send 'nb_ora_client=zhnsdfp'; restore controlfile from 'cntrl_2064_1_949889225'; release channel ch00; }
4.还原数据文件(开到mount状态),进行数据库还原到指定日期(时间点可以不写)
alter database mount; run{ allocate channel ch00 type 'SBT_TAPE'; allocate channel ch01 type 'SBT_TAPE'; send 'nb_ora_serv=nbumaster01'; send 'nb_ora_client=zhnsdfp'; restore database until time "to_date('2017/07/20 05:00:00','yyyy/mm/dd hh24:mi:ss')"; release channel ch00; release channel ch01; }
5.查询SCN号
sqlplus / as sysdba alter session set nls_date_format='YYYYMMDD HH24:MI:SS'; set linesize 160; set pagesize; select THREAD#,SEQUENCE#,FIRST_TIME,COMPLETION_TIME from v$archived_log where COMPLETION_TIME>to_date('20170719 00:00:00','yyyymmdd hh24:mi:ss') and COMPLETION_TIME<to_date('20170720 10:00:00','yyyymmdd hh24:mi:ss') order by SEQUENCE#;
6.还原归档日志
rman target / --恢复脚本 run{ allocate channel ch0 type 'SBT_TAPE'; allocate channel ch1 type 'SBT_TAPE'; send 'NB_ORA_CLIENT=zhnsdfp'; send 'nb_ora_serv=nbumaster01'; restore archivelog sequence between 121645 and 121646; release channel ch0; release channel ch1; }
恢复过程将回检索全备以来的归档日志到指定恢复时间的日志序列号,完成介质恢复后,用resetlogs模式打开数据库。
7.数据库恢复 :
还原完归档日志后利用控制文件进行数据库恢复,将数据库恢复 到20号早上8:30分
sqlplus / as sysdba alter session set nls_date_format='YYYY/MM/DD HH24:MI:SS'; recover database until time '2017/07/20 08:30:00' using backup controlfile; alter database open resetlogs;
解决以下错误
这里报找不到归档日志序列120625的错误信息,领导为数据库的备份策略,周三周六全备,其他皆差异备份,所以需要还原全备以来的归档日志文件,
从日志序列120625到121639;
select THREAD#,SEQUENCE#,FIRST_TIME,COMPLETION_TIME from v$archived_log where SEQUENCE#='120625' order by SEQUENCE#; run{ allocate channel ch0 type 'SBT_TAPE'; allocate channel ch1 type 'SBT_TAPE'; send 'NB_ORA_CLIENT=zhnsdfp'; send 'nb_ora_serv=nbumaster01'; restore archivelog sequence between 120625 and 121639; release channel ch0; release channel ch1; }
recover database until time '2017/07/20 08:30:00' using backup controlfile;
alter database open resetlogs;
8、解决以上错误后,再次进行数据库恢复
sqlplus / as sysdba alter session set nls_date_format='YYYY/MM/DD HH24:MI:SS'; recover database until time '2017/07/20 08:30:00' using backup controlfile; alter database open resetlogs;