一般如下:系统崩溃,rman使用控制文件,没有使用控制文件自动备份,现在仅有最后一次全备(备份中包括控制文件),以及其增量备份,规档备份. 通常这种情况下不能使用常规RMAN来恢复,因为此全备份中备份的控制文件中没有包含本次的备份信息,rman使用控制文件备份的时候是先备份控制文件 后备份其它信息 背景知识 在Oracle 816 以后的版本中,Oracle提供了一个包:DBMS_BACKUP_RESTORE.DBMS_BACKUP_RESTORE 包是由dbmsbkrs.sql 和 prvtbkrs.plb 这两个脚本创建的.catproc.sql 脚本运行后会调用这两个包.所以是每个数据库都有的这个包是Oracle服务器和操作系统之间IO操作的接口.由恢复管理器直接调用。而且据说这两个脚本的功能是内建到Oracle的一些库文件中的. 由此可见,我们可以在数据库 nomount 情况下调用这些package ,来达到我们的恢复目的。在dbmsbkrs.sql 和prvtbkrs.plb 这两个脚本中有详细的说明文档 关键的内容有: FUNCTION deviceAllocate( type IN varchar2 default NULL ,name IN varchar2 default NULL ,ident IN varchar2 default NULL ,noio IN boolean default FALSE ,params IN varchar2 default NULL ) RETURN varchar2; PROCEDURE restoreControlfileTo(cfname IN varchar2); PROCEDURE restoreDataFileTo( dfnumber IN binary_integer ,toname IN varchar2 default NULL); SQL>startup force nomount; SQL> DECLARE devtype varchar2(256); done boolean; BEGIN --分配一个device channel,如果使用的操作系统文件,type就为空,如果是从磁带上恢复要用 "sbt_tape"; devtype:=sys.dbms_backup_restore.deviceAllocate(type=>'',ident=>'t1'); --指明开始restore sys.dbms_backup_restore.restoreSetDatafile; --指出待恢复文件目标存储位置; sys.dbms_backup_restore.restoreControlfileTo(cfname=>'D:ORACLEORADATAFENETCONTROL01.CTL'); --sys.dbms_backup_restore.restoreControlfileTo(cfname=>'D:ORACLEORADATAFENETCONTROL02.CTL'); --sys.dbms_backup_restore.restoreControlfileTo(cfname=>'D:ORACLEORADATAFENETCONTROL03.CTL'); --指定备份集的位置 sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'D:ORA9I6095222264.RMAN', params=>null); --释放通道 sys.dbms_backup_restore.deviceDeallocate; END; 可以通过该语句得到file#和name的对应关系 select 'sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>' || file# || ',toname=>' ||chr(39)|| name ||chr(39) || ');', 'sys.dbms_backup_restore.applySetDatafile(dfnumber=>' || file# || ',toname=>' ||chr(39)|| name ||chr(39) || ');' from v$datafile; 在nomount状态下执行以下语句 恢复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=>1,toname=>'D:ORACLEORADATAFENETSYSTEM01.DBF'); sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>2,toname=>'D:ORACLEORADATAFENETUNDOTBS01.DBF'); sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>3,toname=>'D:ORACLEORADATAFENETCWMLITE01.DBF'); sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>4,toname=>'D:ORACLEORADATAFENETDRSYS01.DBF'); sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>5,toname=>'D:ORACLEORADATAFENETEXAMPLE01.DBF'); sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>6,toname=>'D:ORACLEORADATAFENETINDX01.DBF'); sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>7,toname=>'D:ORACLEORADATAFENETODM01.DBF'); sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>8,toname=>'D:ORACLEORADATAFENETTOOLS01.DBF'); sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>9,toname=>'D:ORACLEORADATAFENETUSERS01.DBF'); sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>10,toname=>'D:ORACLEORADATAFENETXDB01.DBF'); sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>11,toname=>'D:ORACLEORADATAFENETBJIC.ORA'); sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>12,toname=>'D:ORACLEORADATAFENETPM_USERS.DBF'); sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'D:ORA9I6095222264.RMAN', 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.applySetDatafile(dfnumber=>1,toname=>'D:ORACLEORADATAFENETSYSTEM01.DBF'); sys.dbms_backup_restore.applySetDatafile(dfnumber=>2,toname=>'D:ORACLEORADATAFENETUNDOTBS01.DBF'); sys.dbms_backup_restore.applySetDatafile(dfnumber=>3,toname=>'D:ORACLEORADATAFENETCWMLITE01.DBF'); sys.dbms_backup_restore.applySetDatafile(dfnumber=>4,toname=>'D:ORACLEORADATAFENETDRSYS01.DBF'); sys.dbms_backup_restore.applySetDatafile(dfnumber=>5,toname=>'D:ORACLEORADATAFENETEXAMPLE01.DBF'); sys.dbms_backup_restore.applySetDatafile(dfnumber=>6,toname=>'D:ORACLEORADATAFENETINDX01.DBF'); sys.dbms_backup_restore.applySetDatafile(dfnumber=>7,toname=>'D:ORACLEORADATAFENETODM01.DBF'); sys.dbms_backup_restore.applySetDatafile(dfnumber=>8,toname=>'D:ORACLEORADATAFENETTOOLS01.DBF'); sys.dbms_backup_restore.applySetDatafile(dfnumber=>9,toname=>'D:ORACLEORADATAFENETUSERS01.DBF'); sys.dbms_backup_restore.applySetDatafile(dfnumber=>10,toname=>'D:ORACLEORADATAFENETXDB01.DBF'); sys.dbms_backup_restore.applySetDatafile(dfnumber=>11,toname=>'D:ORACLEORADATAFENETBJIC.ORA'); sys.dbms_backup_restore.applySetDatafile(dfnumber=>12,toname=>'D:ORACLEORADATAFENETPM_USERS.DBF'); sys.dbms_backup_restore.applyBackupPiece(done=>done,handle=>'D:ORA9I6095222264.L1', params=>null); sys.dbms_backup_restore.deviceDeallocate END; 恢复归档日志archive log文件 SQL>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.restoreArchivedLogRange; sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'D:ORA9I6095222264.arc',params=>null); sys.dbms_backup_restore.deviceDeallocate; END mount数据库 SQL> alter database mount; 恢复数据库到某一时间点 SQL> >recover database until time '2006-12-14 10:00:00'; 启动数据库 SQL> alter database open resetlogs;
DBMS_BACKUP_RESTORE.DBMS_BACKUP_RESTORE用于特殊情况下的恢复
来源:这里教程网
时间:2026-03-03 12:45:18
作者:
编辑推荐:
- DBMS_BACKUP_RESTORE.DBMS_BACKUP_RESTORE用于特殊情况下的恢复03-03
- word文档怎么设置无边框打印03-03
- 获取oracle sql语句详细些执行计划03-03
- Word单元格文字边距调整的方法有哪些03-03
- word怎么调整文件大小文件太大怎么办03-03
- ssh连接所生成的known_hosts出现的问题03-03
- word怎么设置竖向输入文字03-03
- word怎么设置双行合一一段文字双行显示方法03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 获取oracle sql语句详细些执行计划
获取oracle sql语句详细些执行计划
26-03-03 - ssh连接所生成的known_hosts出现的问题
ssh连接所生成的known_hosts出现的问题
26-03-03 - 一次Oracle启动错误的快速解决:ORA-00119,ORA-00130
- 分区表的数据修改深入
分区表的数据修改深入
26-03-03 - oracle性能调优-虚拟索引
oracle性能调优-虚拟索引
26-03-03 - Debian cd命令完全指南(新手也能轻松掌握Linux切换目录技巧)
Debian cd命令完全指南(新手也能轻松掌握Linux切换目录技巧)
26-03-03 - Oracle 脚本-线上哪些索引从来没有被使用过
Oracle 脚本-线上哪些索引从来没有被使用过
26-03-03 - 创建dblink的几种方法
创建dblink的几种方法
26-03-03 - 搭建集群数据库dbca时报错
搭建集群数据库dbca时报错
26-03-03 - linux6.5下安装oracle11g
linux6.5下安装oracle11g
26-03-03
