在没有rman catalog的情况下,我一般建议用户单独将controlfile采用非rman方式备份出来,因为恢复数据库时要在start mount状态下才能用rman恢复,而start mount的前提是controlfile已经在了。所以,一般比较简单的方式为“1.文件方式恢复controlfile、2.startup mount、3.用rman恢复数据库”。但是,如果在nocatalog方式下如果没有用文件方式备份controlfile而数据库全部坏了,还有一个方法救命.......
关于如何在rman没有catalog的情况下恢复用Rman 备份到磁带上的controlfile
1. 利用 bplist 命令(NetBackup命令)查出最新备份的 controlfile 所在的备份集
# bplist -C oraserver -S bkserver -t 4 -R /
/cntrl_47_1_487002297
/cntrl_46_1_487002110
/cntrl_43_1_486814317
/al_42_1_486814273
/al_40_1_486814236
/al_41_1_486814236
/al_39_1_485975390
/al_38_1_485975073
/al_37_1_485964377
/al_36_1_485956945
/al_35_1_485956730
/al_34_1_485956488
/al_33_1_485798568
/cntrl_32_1_485795684
/al_31_1_485795653
/cntrl_30_1_485794954
/al_29_1_485794918
/cntrl_28_1_485719603
/al_26_1_485719551
/al_27_1_485719551
/bk_25_1_485719418
/bk_24_1_485719417
其中oraserver为oracle所在的NBU客户端,bkserver为 NBU MasterServer.
如上所示/cntrl_47_1_487002297 为最新的controlfile 备份集。
2. 将现有的数据库shutdown之后启动到nomount状态
SQL> conn / as sysdba
Connected.
SQL> shutdown immediate
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SQL> startup nomount 可写可不写,看情况
ORACLE instance started.
Total System Global Area 69652640 bytes
Fixed Size 73888 bytes
Variable Size 52621312 bytes
Database Buffers 16777216 bytes
Redo Buffers 180224 bytes
3. 在SQL中敲入一下脚本
SQL>
SQL> declare
2 devtype varchar2(256);
3 done boolean;
4 begin
5 devtype:=dbms_backup_restore.deviceallocate('sbt_tape',params=>'');
6 dbms_backup_restore.restoresetdatafile;
7 dbms_backup_restore.restorecontrolfileto('/tmp/abc.cf');
8
dbms_backup_restore.restorebackuppiece('cntrl_47_1_487002297',done=>done
);
9 end;
10 /
其中'/tmp/abc.cf'为我们要取出的controlfile 所存放的位置和名称;
'cntrl_47_1_487002297'为先前我们得到的Controlfile 所在的备份集名称
其余不需更改!!
此脚本运行的结果为:
PL/SQL procedure successfully completed.
4. 将/tmp/abc.cf文件改名为正确的controlfile 名字
5. 启动数据库到mount状态
6. 再执行RMAN的恢复脚本,恢复数据。
阅读(1529) | 评论(1) | 转发(0) |