oracle 控制文件没有备份,oracle nocatlog备份模式下没有控制文件的恢复

rman备份,没用catalog ,但控制文件丢失,怎么解决?

情况描述:客户报告数据库故障,新来的系统管理员误操作。删掉了一些文件。

询问:删掉了那些文件?

答曰:所有重要数据文件,所有控制文件。数据库原来是归档模式,用rman备份数据,rman 使用控制文件。

幸运的是,最后一次rman full

备份是包括了控制文件在内。现在状况是数据库无法启动(废话,当然无法启动了 )

不用说,客户的备份方案不够完善,但是这时候再去说这些话已经是马后炮了。还有,客户有Full备份。这对我们来说是个好消息。

其实这种问题有的时候倒的确会遇到。如何进行解决呢?

在Oracle 816 以后的版本中,Oracle提供了一个包:DBMS_BACKUP_RESTORE.

DBMS_BACKUP_RESTORE 包是由dbmsbkrs.sql 和 prvtbkrs.plb

这两个脚本创建的.catproc.sql 脚本运行

后会调用这两个包.所以是每个数据库都有的这个包是Oracle服务器和操作系统之间IO操作的接口.由恢复管理器直接调用。

由此可见,我们可以在数据库nomount 情况下调用这些package ,来达到我们的恢复目的。

在dbmsbkrs.sql 和prvtbkrs.plb 这两个脚本中有详细的说明文档,就不一一加以翻译了。

1:恢复控制文件:

SQL> startup nomount;

ORACLE 例程已经启动。

Total System Global Area 143727516 bytes

Fixed

Size 453532 bytes

Variable

Size 109051904 bytes

Database

Buffers 33554432 bytes

Redo

Buffers 667648 bytes

SQL> 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(cfname=>'c:\oracle\Control01.ctl');

sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'D:\DB_LJKJ_09LMFJP7_1_1_20100828.BKP',

params=>null);

sys.dbms_backup_restore.deviceDeallocate;

END;

/

PL/SQL 过程已成功完成。

对以上内容的解释:

第五行 分配一个device channel

,因为使用的操作系统文件,所以这里为空,如果是从磁带上恢复要用"sbt_tape"

第六行 开始restore

第七行 指出待恢复文件目标存储位置

第八行 从哪个备份片中恢复,控制文件只从第一个备份片中恢复。

第九行 释放设备通道

将恢复的控制文件按照初始化参数文件的要求进行复制。

此时可以将数据库启动到mount状态,查询数据文件

sql>alter database mount;

SQL> select * from v$dbfile;

FILE# NAME

---------- ----------------------------------------

9 C:\ORACLE\ORADATA\LJKJ\XDB01.DBF

8 C:\ORACLE\ORADATA\LJKJ\USER3

2 C:\ORACLE\ORADATA\LJKJ\UNDOTBS01.DBF

7 C:\ORACLE\ORADATA\LJKJ\TOOLS01.DBF

1 C:\ORACLE\ORADATA\LJKJ\SYSTEM01.DBF

6 C:\ORACLE\ORADATA\LJKJ\ODM01.DBF

5 C:\ORACLE\ORADATA\LJKJ\INDX01.DBF

4 C:\ORACLE\ORADATA\LJKJ\EXAMPLE01.DBF

3 C:\ORACLE\ORADATA\LJKJ\DRSYS01.DBF

10 C:\ORACLE\ORADATA\LJKJ\PERF.DBF

11 C:\ORACLE\ORADATA\LJKJ\FZS.DBF

已选择11行。

SQL> shutdown immediate

SQL> startup nomount;

ORACLE 例程已经启动。

Total System Global Area 143727516 bytes

Fixed

Size 453532 bytes

Variable

Size 109051904 bytes

Database

Buffers 33554432 bytes

Redo

Buffers 667648 bytes

SQL>

SQL>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=>'C:\ORACLE\ORADATA\LJKJ\SYSTEM01.DBF');

sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>02,toname=>'C:\ORACLE\ORADATA\LJKJ\UNDOTBS01.DBF');

sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>03,toname=>'C:\ORACLE\ORADATA\LJKJ\DRSYS01.DBF');

sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>04,toname=>'C:\ORACLE\ORADATA\LJKJ\EXAMPLE01.DBF');

sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>05,toname=>'C:\ORACLE\ORADATA\LJKJ\INDX01.DBF');

sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>06,toname=>'C:\ORACLE\ORADATA\LJKJ\ODM01.DBF');

sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>07,toname=>'C:\ORACLE\ORADATA\LJKJ\TOOLS01.DBF');

sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>08,toname=>'C:\ORACLE\ORADATA\LJKJ\USER3');

sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>09,toname=>'C:\ORACLE\ORADATA\LJKJ\XDB01.DBF');

sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>10,toname=>'C:\ORACLE\ORADATA\LJKJ\PERF.DBF');

sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>11,toname=>'C:\ORACLE\ORADATA\LJKJ\FZS.DBF');

sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'D:\DB_LJKJ_09LMFJP7_1_1_20100828.BKP',

params=>null);

sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'D:\DB_LJKJ_09LMFJP7_2_1_20100828.BKP',

params=>null);

sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'D:\DB_LJKJ_09LMFJP7_3_1_20100828.BKP',

params=>null);

sys.dbms_backup_restore.deviceDeallocate;

END;

/

PL/SQL 过程已成功完成。

SQL>

SQL> alter database mount;

数据库已更改。

SQL> recover database using backup controlfile until

cancel;

ORA-00279: ?? 570038 (? 08/27/2010 19:58:11 ??) ???? 1 ????

ORA-00289: ??: C:\ARCHIVED\ARC00019.001

ORA-00280: ?? 570038 ???? 1 ???? # 19 ???

SQL> recover database using backup controlfile until

cancel;

ORA-00279: ?? 570038 (? 08/27/2010 19:58:11 ??) ???? 1 ????

ORA-00289: ??: C:\ARCHIVED\ARC00019.001

ORA-00280: ?? 570038 ???? 1 ???? # 19 ???

指定日志: {=suggested | filename |

AUTO | CANCEL}

cancel

介质恢复已取消。

SQL> alter database open resetlogs;

数据库已更改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值