利用dbms_backup_restore恢复数据库(四)
acle/product/11.2/dbs/initorcl2.ora'
ORACLE instance started.
Total System Global Area 418484224 bytes
Fixed Size 1336932 bytes
Variable Size 327158172 bytes
Database Buffers 83886080 bytes
Redo Buffers 6103040 bytes
SQL>
备份集中有控制文件
如果备份集中有控制文件,可以先还原控制文件再还原数据文件;
还原控制文件
使用dbms_backup_restore将控制文件从备份集中构造出来:
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.restorecontrolfileto(cfname=>'/oradata/orcl2/control01.ctl');
8 sys.dbms_backup_restore.restorebackuppiece(done=>done,handle=>'/backup/orcl_05okeou7_1_1',params=>null);
9 sys.dbms_backup_restore.devicedeallocate;
10 end;
11 /
PL/SQL procedure successfully completed.
SQL>
可以在路径下看到控制文件被构造出来了。
[oracle@DBA2 orcl2]$ ls -al
-rw-r----- 1 oracle oinstall 10076160 Sep 22 00:53 control01.ctl
现在可以将实例启动到mount状态了。
SQL> alter database mount;
Database altered.
查看数据文件的file#号和绝对路径:
SQL> select file#,name from v$datafile;
FILE# NAME
---------- ----------------------------------------
1 /oradata/orcl2/system01.dbf
2 /oradata/orcl2/undotbs01.dbf
3 /oradata/orcl2/sysaux01.dbf
4 /oradata/orcl2/users01.dbf
5 /oradata/orcl2/seven.dbf
OK!控制文件恢复成功,且知道数据文件的file#和name。
还原数据文件
现在知道数据文件的file#和name后,还是利用dbms_backup_restore从备份集中还原数据文件:
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临时