现象:从备份集还原出来的controlfile,用此进行rman还原时,报以下错误:


RMAN
-
06026
:
some
targets
not
found
-
aborting
restore
RMAN - 06023 : no backup or copy of datafile 3 found to restore
RMAN - 06023 : no backup or copy of datafile 2 found to restore
RMAN - 06023 : no backup or copy of datafile 1 found to restore
RMAN - 06023 : no backup or copy of datafile 3 found to restore
RMAN - 06023 : no backup or copy of datafile 2 found to restore
RMAN - 06023 : no backup or copy of datafile 1 found to restore
解决方法:
用dbms_backup_restore package进行恢复。
1,Startup nomount;
2,执行恢复:
DECLARE
devtype varchar2 ( 256 );
done boolean;
BEGIN
devtype: = sys.dbms_backup_restore.deviceAllocate (type => '' ,ident => ' t1 ' );
sys.dbms_backup_restore.restoreSetDatafile;
sys.dbms_backup_restore.restoreDatafileTo(dfnumber => 01 ,toname => ' E:\ORACLE\PRODUCT\10.2.0\ORADATA\HISDB\SYSTEM01.DBF ' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber => 02 ,toname => ' E:\ORACLE\PRODUCT\10.2.0\ORADATA\HISDB\UNDOTBS01.DBF ' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber => 03 ,toname => ' E:\ORACLE\PRODUCT\10.2.0\ORADATA\HISDB\SYSAUX01.DBF ' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber => 04 ,toname => ' E:\ORACLE\PRODUCT\10.2.0\ORADATA\HISDB\USERS01.DBF ' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber => 05 ,toname => ' E:\ORACLE\PRODUCT\10.2.0\ORADATA\HISDB\EXAMPLE01.DBF ' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber => 06 ,toname => ' E:\ORACLE\PRODUCT\10.2.0\ORADATA\HISDB\DRSYS ' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber => 07 ,toname => ' E:\ORACLE\PRODUCT\10.2.0\ORADATA\HISDB\INDX ' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber => 08 ,toname => ' E:\ORACLE\PRODUCT\10.2.0\ORADATA\HISDB\RBS ' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber => 09 ,toname => ' E:\ORACLE\PRODUCT\10.2.0\ORADATA\HISDB\TOOLS ' );
sys.dbms_backup_restore.restoreBackupPiece(done => done,handle => ' D:\HISDBRman\DF343_1_714024003 ' , params => null );
sys.dbms_backup_restore.deviceDeallocate;
END ;
/
devtype varchar2 ( 256 );
done boolean;
BEGIN
devtype: = sys.dbms_backup_restore.deviceAllocate (type => '' ,ident => ' t1 ' );
sys.dbms_backup_restore.restoreSetDatafile;
sys.dbms_backup_restore.restoreDatafileTo(dfnumber => 01 ,toname => ' E:\ORACLE\PRODUCT\10.2.0\ORADATA\HISDB\SYSTEM01.DBF ' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber => 02 ,toname => ' E:\ORACLE\PRODUCT\10.2.0\ORADATA\HISDB\UNDOTBS01.DBF ' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber => 03 ,toname => ' E:\ORACLE\PRODUCT\10.2.0\ORADATA\HISDB\SYSAUX01.DBF ' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber => 04 ,toname => ' E:\ORACLE\PRODUCT\10.2.0\ORADATA\HISDB\USERS01.DBF ' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber => 05 ,toname => ' E:\ORACLE\PRODUCT\10.2.0\ORADATA\HISDB\EXAMPLE01.DBF ' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber => 06 ,toname => ' E:\ORACLE\PRODUCT\10.2.0\ORADATA\HISDB\DRSYS ' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber => 07 ,toname => ' E:\ORACLE\PRODUCT\10.2.0\ORADATA\HISDB\INDX ' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber => 08 ,toname => ' E:\ORACLE\PRODUCT\10.2.0\ORADATA\HISDB\RBS ' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber => 09 ,toname => ' E:\ORACLE\PRODUCT\10.2.0\ORADATA\HISDB\TOOLS ' );
sys.dbms_backup_restore.restoreBackupPiece(done => done,handle => ' D:\HISDBRman\DF343_1_714024003 ' , params => null );
sys.dbms_backup_restore.deviceDeallocate;
END ;
/
ps:如果有两到三个备份集,需要分开执行以上的代码,替换
sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'D:\HISDBRman\DF343_1_714024003', params=>null);
到另一个备份集。
3,看看control文件在不
如果rman备份集里有,就直接:
RMAN
>
restore
controlfile
from
'
F:\tmp\DF344_1_714024149
'
;
如果没有,则:
alter
database
backup
controlfile
to
trace;
找到trace文件,重建你的control文件
4,执行恢复:
SQL
>
recover
database
using
backup
controlfile until cancel;
5,如果4步骤中出现log问题不让恢复的话,参看:
http://www.cnblogs.com/Vegaslee/archive/2010/03/26/1696698.html 联机日志丢失,recover database until cancel不可以的解决方法
6, open resetlogs,好了。
参考文档:http://www.eygle.com/archives/2005/06/oorman06026iioe.html