run{
sql 'alter database datafile <> offline';
restore datafile <>;
recover datafile <>;
slq 'alter database datafile <> online';
}
除了system、undo_tablespace参数后值对应的表空间都可以采用以上的办法恢复。
[oracle@oracle ~]$ ls /u01/oracle/oradata/jadl10g/ control01.ctl control03.ctl redo01.log redo03.log system01.dbf undotbs01.dbf control02.ctl example01.dbf redo02.log sysaux01.dbf temp01.dbf users01.dbf [oracle@oracle ~]$ rm /u01/oracle/oradata/jadl10g/example01.dbf [oracle@oracle ~]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.5.0 - Production on Thu Nov 6 15:23:57 2014 Copyright (c) 1982, 2010, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production With the Partitioning, Oracle Label Security, OLAP, Data Mining Scoring Engine and Real Application Testing options SQL> select * from hr.employees; select * from hr.employees * ERROR at line 1: ORA-01116: error in opening database file 5 ORA-01110: data file 5: '/u01/oracle/oradata/jadl10g/example01.dbf' ORA-27041: unable to open file Linux-x86_64 Error: 2: No such file or directory Additional information: 3 [oracle@oracle ~]$ vi /tmp/1.rman
创建一个恢复的脚本:
[oracle@oracle ~]$ cat /tmp/1.rman
run{
sql 'alter database datafile 5 offline';
restore datafile 5;
recover datafile 5;
sql 'alter database datafile 5 online';
}
rman利用建立的脚本恢复 数据库的数据:
[oracle@oracle ~]$ rman target / cmdfile=/tmp/1.rman Recovery Manager: Release 10.2.0.5.0 - Production on Thu Nov 6 15:29:28 2014 Copyright (c) 1982, 2007, Oracle. All rights reserved. connected to target database: JADL10G (DBID=2011530396) RMAN> run{ 2> sql 'alter database datafile 5 offline'; 3> restore datafile 5; 4> recover datafile 5; 5> sql 'alter database datafile 5 online'; 6> } 7> using target database control file instead of recovery catalog sql statement: alter database datafile 5 offline Starting restore at 06-NOV-14 allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=159 devtype=DISK channel ORA_DISK_1: starting datafile backupset restore channel ORA_DISK_1: specifying datafile(s) to restore from backup set restoring datafile 00005 to /u01/oracle/oradata/jadl10g/example01.dbf channel ORA_DISK_1: reading from backup piece /u01/oracle/flash_recovery_area/JADL10G/backupset/2014_11_06/o1_mf_nnndf_TAG20141106T135107_b5p32dhf_.bkp channel ORA_DISK_1: restored backup piece 1 piece handle=/u01/oracle/flash_recovery_area/JADL10G/backupset/2014_11_06/o1_mf_nnndf_TAG20141106T135107_b5p32dhf_.bkp tag=TAG20141106T135107 channel ORA_DISK_1: restore complete, elapsed time: 00:00:07 Finished restore at 06-NOV-14 Starting recover at 06-NOV-14 using channel ORA_DISK_1 starting media recovery media recovery complete, elapsed time: 00:00:00 Finished recover at 06-NOV-14 sql statement: alter database datafile 5 online Recovery Manager complete.
此时执行查询就不会出现错误了。
shutdowm abort
restore datafile 1,5;
recover database;
alter database open;
这样操作后,不需要重新备份数据库 ,以前的备份是有效的。
恢复映像副本
RMAN> backup as copy datafile 5; Starting backup at 06-NOV-14 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=159 devtype=DISK channel