利用dbms_backup_restore函数来恢复数据文件
?
本實驗對數據文件丟失,控制文件丟失,但是RMAN的備份信息和備份日志存在的時候使用。
控制文件的丟失恢復參看http://luoping.blog.51cto.com/534596/294164。
下面是數據文件的丟失的恢復。
下面是RMAN的備份腳本。
[oracle@huang ~]$ cat /tmp/11.sql
run
{
??allocate channel c1 type disk;
??backup database include current controlfile;
}
下面是執行RMAN備份整個數據庫。
[oracle@huang ~]$ rman target / @/tmp/11.sql log=/tmp/111.txt >>/dev/null;下面是查看RMAN備份的日志。
[oracle@huang ~]$ vim /tmp/111.txt
Starting backup at 12-APR-10
channel c1: starting full datafile backupset
channel c1: specifying datafile(s) in backupset
input datafile fno=00001 name=/opt/oracle/oradata/orcl/system01.dbf
input datafile fno=00003 name=/opt/oracle/oradata/orcl/sysaux01.dbf
input datafile fno=00002 name=/opt/oracle/oradata/orcl/undotbs01.dbf
input datafile fno=00004 name=/opt/oracle/oradata/orcl/users01.dbf
channel c1: starting piece 1 at 12-APR-10
channel c1: finished piece 1 at 12-APR-10
piece handle=/opt/oracle/flash_recovery_area/ORCL/backupset/2010_04_12/o1_mf_nnndf_TAG20100412T225557_5w6f3xjm_.bkp tag=TAG20100412T225557 comment=NONE
channel c1: backup set complete, elapsed time: 00:00:55
channel c1: starting full datafile backupset
channel c1: specifying datafile(s) in backupset
including current control file in backupset
including current SPFILE in backupset
channel c1: starting piece 1 at 12-APR-10
channel c1: finished piece 1 at 12-APR-10
piece handle=/opt/oracle/flash_recovery_area/ORCL/backupset/2010_04_12/o1_mf_ncsnf_TAG20100412T225557_5w6f5pyl_.bkp tag=TAG20100412T225557 comment=NONE
channel c1: backup set complete, elapsed time: 00:00:05
Finished backup at 12-APR-10
released channel: c1
?
Recovery Manager complete.
根據上面的日志來下面這個腳本。前提是要RMAN備份的日志存在或你記得自己的數據文件和編號。
[oracle@huang ~]$ cat /tmp/data.sql
DECLARE
devtype varchar2(256);
done boolean;
BEGIN
devtype:=sys.dbms_backup_restore.deviceAllocate (type=>'',ident=>'t2');
sys.dbms_backup_restore.restoreSetDatafile;
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>01,toname=>'/opt/oracle/system01.dbf');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>02,toname=>'/opt/oracle/sysaux01.dbf');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>03,toname=>'/opt/oracle/undotbs01.dbf');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>04,toname=>'/opt/oracle/users01.dbf');
sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'/opt/oracle/flash_recovery_area/ORCL/backupset/2010_04_12/o1_mf_nnndf_TAG20100412T225557_5w6f3xjm_.bkp', params=>null);
sys.dbms_backup_restore.deviceDeallocate;
END;
下面是具體的執行。?SQL> get /tmp/data.sql
1 ?DECLARE 2 ?devtype varchar2(256); 3 ?done boolean; 4 ?BEGIN 5 ?devtype:=sys.dbms_backup_restore.deviceAllocate (type=>'',ident=>'t2'); 6 ?sys.dbms_backup_restore.restoreSetDatafile; 7 ?sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>01,toname=>'/opt/oracle/system01.dbf'); 8 ?sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>02,toname=>'/opt/oracle/sysaux01.dbf'); 9 ?sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>03,toname=>'/opt/oracle/undotbs01.dbf'); 10 ?sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>04,toname=>'/opt/oracle/users01.dbf'); 11 ?sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'/opt/oracle/flash_recovery_area/ORCL/backupset/2010_04_12/o1_mf_nnndf_TAG20100412T225557_5w6f3xjm_.bkp', params=>null); 12 ?sys.dbms_backup_restore.deviceDeallocate; 13* END; SQL> / PL/SQL procedure successfully completed. 查看是否生成了我們要的數據文件。 SQL> !ls /opt/oracle/system01.dbf; /opt/oracle/system01.dbf 注意可能在上面的時候會出先下面的問題,退出當前的sqlplus會話,重新進入就可以解決問題。 SQL> / DECLARE * ERROR at line 1: ORA-19568: a device is already allocated to this session ORA-06512: at "SYS.DBMS_BACKUP_RESTORE", line 170 ORA-06512: at "SYS.DBMS_BACKUP_RESTORE", line 145 ORA-06512: at line 5? 本文轉自7343696 51CTO博客,原文鏈接:http://blog.51cto.com/luoping/294182,如需轉載請自行聯系原作者
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的利用dbms_backup_restore函数来恢复数据文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4G EPS 中的 Bearer
- 下一篇: Word怎么转换成Pdf格式(word怎