----删除前最好rman冷备份一次,controlfile要单独备份 alter database backup controlfile to '/oradata/controlfile.bak'; 如果不备份控制文件也可以在备份的ramn恢复控制文件,下面是我做的实验:
1、第一种恢复方法
SQL> select name from v$tablespace;
NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
USERS
TEMP
ECOLOGY
SQL> drop tablespace ecology including contents and datafiles;
SQL>shutdown immediate;
SQL>startup nomount;
RMAN>restore controlfile from '/oradata/controlfile.bak'; (控制文件需要在nomount状态下转储)
RMAN>alter database mount;
RMAN>report schema;
List of Permanent Datafiles
===========================
File Size(MB) Tablespace RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1 450 SYSTEM *** /oradata/oaback/system01.dbf
2 25 UNDOTBS1 *** /oradata/oaback/undotbs01.dbf
3 300 SYSAUX *** /oradata/oaback/sysaux01.dbf
4 5 USERS *** /oradata/oaback/users01.dbf
5 0 ECOLOGY *** /oradata/oaback/ecology.dbf
List of Temporary Files
=======================
File Size(MB) Tablespace Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1 20 TEMP 32767 /oradata/oaback/temp01.dbf
(以上命令执行后可以看到删除的表空间,控制文件转储成功,因为表空间信息存储在controlfile,如果执行此命令没有看到删除的表空间,那么需要转储更早时间备份的controlfile,首先关闭数据库,启动到nomount,restore controlfile from '/oradata/controlfile.bak';在启动到mount,执行report schema 能看到删除的表空间则证明controlfile转储成功)
执行以下命令恢复删除的表空间
RMAN> run{
set until time '2013-08-20 14:45:00';
allocate channel c1 type disk;
allocate channel c2 type disk;
restore database;
recover database;
alter database open resetlogs;
}
2、第二种恢复方法
先用rman: restore controlfile from '/oradata/comtrolfile.bak';
然后:recover database until time '2013-08-20 14:44:00' using backup controlfile;(这个时间点要自己找,或者大概估计一个)
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/oradata/oaback/redo03.log
Log applied.
Media recovery complete.
SQL> alter database open resetlogs;
Database altered.
/oradata/oaback/redo03.log是当前日志组的一个成员