前提条件:RMAN生成的全备,异机异目录恢复
(参考:
http://zhouwf0726.itpub.net/post/9689/244764)
1)在原始数据库上:
RMAN>CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN>backup database format='
/mezi/oracle/app_11R1/rman_backup/%d_%s.dbf'
//将会生成两个文件,controlfile和数据库
2)将rman 生成的两个文件拷贝到远程服务器的目录:
/db/sshan_temp/
将原始数据库的初始化参数文件拷贝到目标服务器:$ORACLE_HOME/dbs/
并修改相关目录:如controlfile目录和dump目录
3)恢复controlfile 文件
SQL>
startup nomount;
#./rman target /
RMAN>
restore controlfile from '/db/sshan_temp/ORCL_7.dbf';
4)恢复数据文件
RMAN>
restore database from '/db/sshan_temp/ORCL_6.dbf';
using channel ORA_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 04/09/2008 14:15:17
RMAN-06509: only SPFILE or controlfile can be restored from autobackup
RMAN>list backup;
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
3 Full 21.00G DISK 00:07:34 01-JUL-11
BP Key: 3 Status: EXPIRED Compressed: NO Tag: TAG20110701T045821
Piece Name: /mezi/oracle/app_11R1/rman_backup/ORCL_6.dbf
由于没有相关权限,所以无法创建和原始数据库一样的rman备份目录。
**************************************************************************************************************************************************
查看控制文件中数据文件列表:
SQL>
select name from v$datafile;
FILE# NAME
---------- --------------------------------------------------
1 /mezi/oracle/app_11R1/oradata/orcl/system01.dbf
2 /mezi/oracle/app_11R1/oradata/orcl/sysaux01.dbf
3 /mezi/oracle/app_11R1/oradata/orcl/undo.dbf
4 /mezi/oracle/app_11R1/oradata/orcl/dfdata01.dbf
5 /mezi/oracle/app_11R1/oradata/orcl/indx01.dbf
6 /mezi/oracle/app_11R1/oradata/orcl/tools01.dbf
7 /mezi/oracle/app_11R1/oradata/orcl/users01.dbf
8 /mezi/oracle/app_11R1/oradata/orcl/undo1.dbf
*************************************************************************************************************************************************
5)使用 dbms_backup_restore 来恢复
**************************************************************************************************************************************************
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=>1,toname=>'/db/mezi/oracle/app/oradata/orcl/system01.dbf');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>2,toname=>'/db/mezi/oracle/app/oradata/orcl/sysaux01.dbf');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>3,toname=>'/db/mezi/oracle/app/oradata/orcl/undo.dbf');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>4,toname=>'/db/mezi/oracle/app/oradata/orcl/dfdata01.dbf');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>5,toname=>'/db/mezi/oracle/app/oradata/orcl/indx01.dbf');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>6,toname=>'/db/mezi/oracle/app/oradata/orcl/tools01.dbf');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>7,toname=>'/db/mezi/oracle/app/oradata/orcl/users01.dbf');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>8,toname=>'/db/mezi/oracle/app/oradata/orcl/undo1.dbfF');
sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'/db/sshan_temp/ORCL_6.dbf', params=>null);
sys.dbms_backup_restore.deviceDeallocate;
END;
/
**************************************************************************************************************************************************
余下的收尾工作:
SQL>recover database using backup controlfile until cacnel;
根据提示,数据原始数据库的一个archivelog文件名称
SQL>alter database rename datafile '/xxx/xxx/xxx.dbf' to '/xxx/xxx/xxx/xx/xx.dbf'; //修改控制文件中的数据文件路径
SQL>alter database rename datafile '/xx/xx/xx/xxlog.dbf' to '/xx/xxx/xx/xx/xx.dbf'; //修改控制文件中的redo Log 路径