ITPub博客

首页 > 数据库 > Oracle > rman无控制文件的数据恢复

rman无控制文件的数据恢复

Oracle 作者:wutianqong 时间:2014-02-11 22:43:17 0 删除 编辑

昨天晚上接到单位某部门同事的紧急求助电话,说某www数据库别另一同事不小心rm -rf了,听到这首先安慰他不着急,慢慢来,询问了数据库的备份情况后,首先我心定了下来,感觉应该可以恢复。但是当我真正操作的时候发现问题来了,就只有一个数据库的rman全备份,而且控制文件的自动备份也在rm -rf过程中一起消失了。有点悲剧了。呵呵,在此仔细查看了下rman的恢复方法,终于在浩瀚的网络中找到了解答,原来oracle在9i中为了防止rman的备份信息无法注册到控制文件中而使数据无法恢复,可通过dbms_backup_restore来进行数据文件的抽取恢复,故有了下面的测试,下面测试绝对ok了,有什么不懂得可以留言,也可qq我啊,呵呵

QQ:570833708

1、做rman全库备份在目录/u/rman/Gwwwbak/2下
 rman target /
 backup database format '/u/rman/Gwwwbak/%T_%d_%s_%p';-----------完成后删除原来的数据文件以及redo文件,开始我们的测试,此处我们假设我们的该rman备份的控制文件同时也被删除了。若控制文件开启了自动备份,可直接干掉自动备份目录,呵呵,方便快捷,若不放心可如下删除控制文件即可。


RMAN> delete backup of controlfile;

allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=146 devtype=DISK

List of Backup Pieces
BP Key  BS Key  Pc# Cp# Status      Device Type Piece Name
------- ------- --- --- ----------- ----------- ----------
1       1       1   1   AVAILABLE   DISK        /u/rman/Gwwwbak/20140211_GWWW_2_1

Do you really want to delete the above objects (enter YES or NO)? yes
deleted backup piece
backup piece handle=/u/rman/Gwwwbak/20140211_GWWW_2_1 recid=1 stamp=839259830
Deleted 1 objects


rman备份日志中文件记录信息,注意此处需要的信息时fno号及文件位置名称name,用于后期文件抽取:
input datafile fno=00001 name=/u/app/oracle/oradata/Gwww/system01.dbf
input datafile fno=00003 name=/u/app/oracle/oradata/Gwww/sysaux01.dbf
input datafile fno=00005 name=/u/app/oracle/oradata/Gwww/example01.dbf
input datafile fno=00002 name=/u/app/oracle/oradata/Gwww/undotbs01.dbf
input datafile fno=00004 name=/u/app/oracle/oradata/Gwww/users01.dbf

2、首先用新创建的spfile启动数据库到nomount状态下(pfile的创建想必不用再多说了吧)。
startup force nomount;

3、在不使用控制文件的情况下,抽取rman备份中的数据文件(控制文件也可通过同样的方法抽取):

DECLARE
   v_handle         VARCHAR2 (500);         
   v_is_done        BOOLEAN  := FALSE;                               
   TYPE t_input_files IS TABLE OF VARCHAR2 (1000)
      INDEX BY BINARY_INTEGER;
   v_max_backup_pieces   NUMBER := 2;
   v_input_files         t_input_files;            
    
BEGIN
   v_input_files (1) := '/u/rman/Gwwwbak/20140211_GWWW_1_1';
   v_input_files (2) := '/u/rman/Gwwwbak/20140211_GWWW_2_1';
   v_max_backup_pieces := 2;
   v_handle := SYS.DBMS_BACKUP_RESTORE.DEVICEALLOCATE;
   SYS.DBMS_BACKUP_RESTORE.RESTORESETDATAFILE;
sys.dbms_backup_restore.restoredatafileto(dfnumber=>01,toname=>'/u/app/oracle/oradata/Gwww/system01.dbf');
sys.dbms_backup_restore.restoredatafileto(dfnumber=>02,toname=>'/u/app/oracle/oradata/Gwww/undotbs01.dbf');
sys.dbms_backup_restore.restoredatafileto(dfnumber=>03,toname=>'/u/app/oracle/oradata/Gwww/sysaux01.dbf');
sys.dbms_backup_restore.restoredatafileto(dfnumber=>04,toname=>'/u/app/oracle/oradata/Gwww/users01.dbf');
sys.dbms_backup_restore.restoredatafileto(dfnumber=>05,toname=>'/u/app/oracle/oradata/Gwww/example01.dbf');   
   FOR i IN 1 .. v_max_backup_pieces
   LOOP
      DBMS_OUTPUT.PUT_LINE('Restoring piece '|| to_char(i) || ' from backup file: ' || v_input_files(i)

||'...');
      SYS.DBMS_BACKUP_RESTORE.RESTOREBACKUPPIECE (done=> v_is_done,handle=> v_input_files(i),params=> NULL);
      IF v_is_done
      THEN
         GOTO all_done;
      END IF;
   END LOOP;
   <>
   SYS.DBMS_BACKUP_RESTORE.devicedeallocate;
END;
/
上述执行可能需要一段时间,之后可在相应的位置看到数据文件已经恢复了。接下来就解决控制文件问题。

4、创建控制文件,根据数据文件的位置创建相关控制文件,注意此处的redo文件以及字符集。
CREATE CONTROLFILE REUSE DATABASE "GWWW" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/u/app/oracle/oradata/Gwww/redo01.log'  SIZE 50M,
  GROUP 2 '/u/app/oracle/oradata/Gwww/redo02.log'  SIZE 50M,
  GROUP 3 '/u/app/oracle/oradata/Gwww/redo03.log'  SIZE 50M
-- STANDBY LOGFILE
DATAFILE
  '/u/app/oracle/oradata/Gwww/system01.dbf',
  '/u/app/oracle/oradata/Gwww/undotbs01.dbf',
  '/u/app/oracle/oradata/Gwww/sysaux01.dbf',
  '/u/app/oracle/oradata/Gwww/users01.dbf',
  '/u/app/oracle/oradata/Gwww/example01.dbf'
CHARACTER SET ZHS16GBK
;

5、创建完控制文件后,此时数据库应该处于mounted状态,可以通过rman catalog方式注册archivelog到控制文件中。然后进行

database的recover,或者此时可以直接open rsetlogs 数据库即可。视需要而定。
此处我的测试就直接resetlogs了。呵呵

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

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2014-02-11

  • 博文量
    1
  • 访问量
    5952