数据库高级恢复

 
DBMS_BACKUP_RESTORE可用于特殊情况下的恢复
在controlfile故障时,可以利用它进恢复数据文件,DBMS_BACKUP_RESTORE可在nomount状态下进行恢复操作。
Oracle提供了一个包:DBMS_BACKUP_RESTORE.DBMS_BACKUP_RESTORE 包是由dbmsbkrs.sql 和 prvtbkrs.plb 这两个脚本创建的.catproc.sql 脚本运行后会调用这两个包.所以是每个数据库都有的这个包是Oracle服务器和操作系统之间IO操作的接口.由恢复管理器直接调用。而且据说这两个脚本的功能是内建到Oracle的一些库文件中的.
由此可见,我们可以在数据库 nomount 情况下调用这些package ,来达到我们的恢复目的。在dbmsbkrs.sql 和prvtbkrs.plb 这两个脚本中有详细的说明文档
 
DECLARE
devtype   varchar2   (   256   );
done   boolean   ;
BEGIN
--分配一个设备通道,如果使用的操作系统文件,type就为空,如果是从磁带上恢复要用 "sbt_tape"
devtype:=sys.dbms_backup_restore.deviceAllocate(   type   =>   ''   ,ident=>   't1'   );
--表示开始恢复   ;
sys.dbms_backup_restore.restoreSetDatafile;
--指定恢复文件的目标位置
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>   01   ,toname=>   'D:\ORADATA\HUI99DB\SYSTEM01.DBF'   );
--指定备份集的位置
sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=> 'F:\rmanbackup\HUI99DB_FULL_0_3367236198_20100808_S90_P1.RBAK'   , params=>   null   );
--释放通道
sys.dbms_backup_restore.deviceDeallocate;
END   ;
/
 
--Include the current SPFILE in the backup set.
exec   dbms_backup_restore.backupspfile   ;
 
--   恢复参数文件,如果指定   sfname   还可以恢成   spfile  
--   需要在   nomount   状态下恢复,可以先启动到   DUMMY  
--   或者自建一个   pfile   ,只要在文件里设置   db_name   即可启动实例到   nomount   状态   (   默认情况可能出现   ORA-04031   错误,最好在   pfile 里将   shared_pool_size   设置大一点的值   )
DECLARE
devtype   varchar2   (   256   );
done   boolean   ;
BEGIN
devtype:=sys.dbms_backup_restore.deviceAllocate (   type   =>   ''   ,ident=>   't1'   );
sys.dbms_backup_restore.restoreSetDatafile;
sys.dbms_backup_restore.RESTORESPFILETO(pfname=> 'C:\oracle\product\10.2.0\admin\hui99db\pfile\pfile.ora'   );
sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=> 'F:\rmanbackup\HUI99DB_FULL_0_3367236198_20100808_S91_P1.RBAK'   , params=>   null   );
sys.dbms_backup_restore.deviceDeallocate;
END   ;
/
--   恢复控制文件
DECLARE
devtype   varchar2   (   256   );
done   boolean   ;
BEGIN
devtype:=sys.dbms_backup_restore.deviceAllocate (   type   =>   ''   ,ident=>   't1'   );
sys.dbms_backup_restore.restoreSetDatafile;
sys.dbms_backup_restore.restorecontrolfileto(sfname=>   'D:\ORADATA\HUI99DB\controlfile01.ora'   );
sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=> 'F:\rmanbackup\HUI99DB_FULL_0_3367236198_20100808_S91_P1.RBAK'   , params=>   null   );
sys.dbms_backup_restore.deviceDeallocate;
END   ;
/
 
--   恢复   0   级备份语句
DECLARE
devtype   varchar2   (   256   );
done   boolean   ;
BEGIN
devtype:=sys.dbms_backup_restore.deviceAllocate(   type   =>   ''   ,ident=>   't1'   );
sys.dbms_backup_restore.restoreSetDatafile;
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>   01   ,toname=>   'D:\ORADATA\HUI99DB\SYSTEM01.DBF'   );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>   02   ,toname=>   'D:\ORADATA\HUI99DB\UNDOTBS01.DBF'   );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>   03   ,toname=>   'D:\ORADATA\HUI99DB\SYSAUX01.DBF'   );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>   04   ,toname=>   'D:\ORADATA\HUI99DB\USERS01.DBF'   );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>   05   ,toname=>   'D:\ORADATA\HUI99DB\MALLTEST.DBF'   );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>   06   ,toname=>   'D:\ORADATA\HUI99DB\MALLTESTPART.DBF' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>   07   ,toname=>   'D:\ORADATA\HUI99DB\MALLTESTIDX.DBF' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>   08   ,toname=>   'D:\ORADATA\HUI99DB\MALLIDXSPACE.DBF' );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>   09   ,toname=> 'D:\ORADATA\HUI99DB\MALLPARTSPACE.DBF'   );
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>   10   ,toname=>   'D:\ORADATA\HUI99DB\MALLSPACE.DBF'   );
sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=> 'F:\rmanbackup\HUI99DB_FULL_0_3367236198_20100808_S90_P1.RBAK'   , params=>   null   );
sys.dbms_backup_restore.deviceDeallocate;
END   ;
/
--   恢复增量备份
DECLARE
devtype   varchar2   (   256   );
done   boolean   ;
BEGIN
devtype:=sys.dbms_backup_restore.deviceAllocate (   type   =>   ''   ,ident=>   't1'   );
sys.dbms_backup_restore.applySetDatafile;
sys.dbms_backup_restore.applyDatafileTo(dfnumber=>   01   ,toname=>   'D:\ORADATA\HUI99DB\SYSTEM01.DBF'   );
sys.dbms_backup_restore.applyDatafileTo(dfnumber=>   02   ,toname=>   'D:\ORADATA\HUI99DB\UNDOTBS01.DBF'   );
sys.dbms_backup_restore.applyDatafileTo(dfnumber=>   03   ,toname=>   'D:\ORADATA\HUI99DB\SYSAUX01.DBF'   );
sys.dbms_backup_restore.applyDatafileTo(dfnumber=>   04   ,toname=>   'D:\ORADATA\HUI99DB\USERS01.DBF'   );
sys.dbms_backup_restore.applyDatafileTo(dfnumber=>   05   ,toname=>   'D:\ORADATA\HUI99DB\MALLTEST.DBF'   );
sys.dbms_backup_restore.applyDatafileTo(dfnumber=>   06   ,toname=>   'D:\ORADATA\HUI99DB\MALLTESTPART.DBF' );
sys.dbms_backup_restore.applyDatafileTo(dfnumber=>   07   ,toname=>   'D:\ORADATA\HUI99DB\MALLTESTIDX.DBF'   );
sys.dbms_backup_restore.applyDatafileTo(dfnumber=>   08   ,toname=>   'D:\ORADATA\HUI99DB\MALLIDXSPACE.DBF' );
sys.dbms_backup_restore.applyDatafileTo(dfnumber=>   09   ,toname=>   'D:\ORADATA\HUI99DB\MALLPARTSPACE.DBF' );
sys.dbms_backup_restore.applyDatafileTo(dfnumber=>   10   ,toname=>   'D:\ORADATA\HUI99DB\MALLSPACE.DBF'   );
sys.dbms_backup_restore.applyBackupPiece(done=>done,handle=> 'F:\rmanbackup\HUI99DB_DIF_2_3367236198_20100809_S94_P1.RBAK'   , params=>   null   );
sys.dbms_backup_restore.deviceDeallocate;
END   ;
/
 
--   恢复归档日志备份
DECLARE
devtype   varchar2   (   256   );
done   boolean   ;
BEGIN
devtype:=sys.dbms_backup_restore.deviceAllocate (   type   =>   ''   ,ident=>   't1'   );
sys.dbms_backup_restore.restoreSetArchivedLog;
sys.dbms_backup_restore.restoreArchivedLog(   thread   =>   1   ,   sequence   =>   107   );
/* sys.dbms_backup_restore.RESTOREARCHIVEDLOGRANGE(low_change=>0,high_change=>);*/
sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=> 'F:\rmanbackup\HUI99DB_ARC_12_3367236198_20100810_S96_P1.RBAK'   , params=>   null   );
sys.dbms_backup_restore.deviceDeallocate;
END   ;
/
 
全库的恢复
Recover database using backup controlfile until cancel;
 
打开数据库
Alter database open resetlogs;
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9932141/viewspace-677384/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9932141/viewspace-677384/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值