利用RMAN 功能包- dbms_backup_restore,能够在NOMOUNT 状态,且无恢复目录下从备份片中提取输入文件:
declear
2 device varchar2(100);
3 done_out boolean;
4 outhandle_out varchar2(100);
5 outtag_out varchar2(100);
6 failover_out boolean;
7 begin
8 sys.dbms_backup_restore.restoresetdatafile;
9 sys.dbms_backup_restore.restoredatafileto(
10 dfname => file_id,
11 toname => '数据文件路径');
12 device :=sys.dbms_backup_restore.deviceallocate;
13 sys.dbms_backup_restore.restoresetpiece(
14 handle=> '备份集文件',
15 tag => '备份集tag',
16 fromdisk=true,
17 recid=>0,
18 stamp=>0);
19 sys.dbms_backup_restore.restorebackuppiece(
20 done=>done_out,
21 params=>null,
22 outhandle=>outhandle_out,
23 outtag=>outtag_out,
24 faliover=>failover_out);
25 end;
/
第八行 启动RMAN的还原会话,第九行指定被还原的数据文件的编号和路径,
第12行分配默认DISK通道,第13行指定还原所以用的备份片,
第19行执行了还原操作,执行后数据文件回归
declear
2 device varchar2(100);
3 done_out boolean;
4 outhandle_out varchar2(100);
5 outtag_out varchar2(100);
6 failover_out boolean;
7 begin
8 sys.dbms_backup_restore.restoresetdatafile;
9 sys.dbms_backup_restore.restoredatafileto(
10 dfname => file_id,
11 toname => '数据文件路径');
12 device :=sys.dbms_backup_restore.deviceallocate;
13 sys.dbms_backup_restore.restoresetpiece(
14 handle=> '备份集文件',
15 tag => '备份集tag',
16 fromdisk=true,
17 recid=>0,
18 stamp=>0);
19 sys.dbms_backup_restore.restorebackuppiece(
20 done=>done_out,
21 params=>null,
22 outhandle=>outhandle_out,
23 outtag=>outtag_out,
24 faliover=>failover_out);
25 end;
/
第八行 启动RMAN的还原会话,第九行指定被还原的数据文件的编号和路径,
第12行分配默认DISK通道,第13行指定还原所以用的备份片,
第19行执行了还原操作,执行后数据文件回归