利用dbms_backup_restore恢复数据库(五)

2014-11-24 16:06:28 · 作者: · 浏览: 2
表空间);
备份集中无控制文件
还原数据文件
利用dbms_backup_restore从备份集中还原数据文件,当然这里并不知道数据文件的file#和name,一般name都会知道,只是file#无法确定,一般而言system是01号,undotbs是02号,sysaux是03号,users是04号,其他的就只能通过猜或者一个一个试了。当然之前能保存这些信息当然很好。
SQL> declare
2 devtype varchar2(256);
3 done boolean;
4 begin
5 devtype:=sys.dbms_backup_restore.deviceAllocate (type=>'',ident=>'t1');
6 sys.dbms_backup_restore.restoreSetDatafile;
7 sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>01,
8 toname=>'/oradata/orcl2/system01.dbf');
9 sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>02,
10 toname=>'/oradata/orcl2/undotbs01.dbf');
11 sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>03,
12 toname=>'/oradata/orcl2/sysaux01.dbf');
13 sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>04,
14 toname=>'/oradata/orcl2/users01.dbf');
15 sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>05,
16 toname=>'/oradata/orcl2/seven.dbf');
17 sys.dbms_backup_restore.restoreBackupPiece(done=>done,
18 handle=>'/backup/orcl_04okeoqa_1_1',params=>null);
19 sys.dbms_backup_restore.deviceDeallocate;
20 end;
21 /
PL/SQL procedure successfully completed.
查看数据文件路径下是否已经将数据文件还原到指定目录:
[oracle@DBA2 orcl2]$ ls -al
total 1480808
drwxrwxr-x 2 oracle oinstall 4096 Sep 22 00:52 .
drwxrwxr-x 4 oracle oinstall 4096 Sep 21 23:14 ..
-rw-r----- 1 oracle oinstall 10076160 Sep 22 00:54 control01.ctl
-rw-r----- 1 oracle oinstall 52436992 Sep 22 00:52 seven.dbf
-rw-r----- 1 oracle oinstall 94380032 Sep 22 00:52 sysaux01.dbf
-rw-r----- 1 oracle oinstall 723525632 Sep 22 00:53 system01.dbf
-rw-r----- 1 oracle oinstall 629153792 Sep 22 00:53 undotbs01.dbf
-rw-r----- 1 oracle oinstall 5251072 Sep 22 00:52 users01.dbf
确实,数据文件已经被还原至指定目录(没有临时表空间,因为rman备份的时候不会备份temp临时表空间);
手动创建控制文件
接下来要手动创建控制文件,这个环节很简单,但前提是要知道有哪些数据文件
CREATE CONTROLFILE REUSE DATABASE "ORCL2" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/oradata/orcl2/redo01.log' SIZE 50M BLOCKSIZE 512,
GROUP 2 '/oradata/orcl2/redo02.log' SIZE 50M BLOCKSIZE 512,
GROUP 3 '/oradata/orcl2/redo03.log' SIZE 50M BLOCKSIZE 512
DATAFILE
'/oradata/orcl2/system01.dbf',
'/oradata/orcl2/sysaux01.dbf',
'/oradata/orcl2/undotbs01.dbf',
'/oradata/orcl2/users01.dbf',
'/oradata/orcl2/seven.dbf'
CHARACTER SET AL32UTF8
;
SQL> @/home/oracle/controlfile.txt
Control file created.
SQL>
控制文件恢复完成后,将数据库启动到mount状态,再执行不完全恢复。
不完全恢复
现在执行不完全恢复:
SQL> recover database using backup controlfile until cancel;
ORA-00279: change 1246394 generated at 09/22/2013 00:07:38 needed for thread 1
ORA-00289: suggestion :
/u/oracle/flash_recovery_area/ORCL2/archivelog/2013_09_22/o1_mf_1_2_93vk6b0w_.ar
c
ORA-00280: change 1246394 for thread 1 is in sequence #2
Specify log: {=suggested | filename | AUTO | CANCEL}
cancel
Media recovery cancelled.
SQL>
恢复完成,之后将实例打开,因为redo文件也丢失了,执行不完全恢复,要加resetlogs参数:
SQL> alter database open resetlogs;
Database altered.
SQL>
看看redo文件是否被重建?
[oracl