只有rman備份集,控制檔案丟失的恢復

season0891發表於2010-12-01
恢復

====================

資訊可以使用catalog庫存放,如果不配置catalog庫則只能使用控制檔案進行替代,所以控制檔案在資料庫備份中的重要性比較高。

避免控制檔案丟失可以設定控制檔案自動備份,也可以在指令碼中單獨備份控制檔案,另外全庫備份中葉包含控制檔案,版本較高的rdbms還能在回覆區中找到控制檔案的映象,以上方式都找不到控制檔案則只能手動建立控制檔案

一旦手動重新建立,控制檔案中的備份資訊也就丟失,這是就需要是用dbms_backup_restore包進行恢復

透過包dbms_backup_restore,在不是用catalog庫或者控制檔案的情況下仍然可以從備份集中讀取資料庫檔案,做到資料恢復

如下測試及為資料檔案、控制檔案,線上日誌檔案,歸檔日誌檔案都丟失,只有rman備份的情況下資料庫的恢復


SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Database Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production


備份集

D:\oracle\product\10.2.0\flash_recovery_area\AN10\BACKUPSET\2008_04_10\O1_MF_NNNDF_TAG20080410T100316_3ZTXC5PY_.BKP


SQL> startup nomount;
ORACLE instance started.

Total System Global Area  209715200 bytes
Fixed Size                  1248116 bytes
Variable Size              71304332 bytes
Database Buffers          130023424 bytes
Redo Buffers                7139328 bytes


透過指令碼恢復資料檔案

SQL> declare
  2  devtype varchar2(256);
  3  done boolean;
  4  begin
  5  devtype:=sys.dbms_backup_restore.deviceAllocate (type=>'',ident=>'t1');
  6  sys.dbms_backup_restore.restoreSetDatafile;
  7  sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>01,
  8  toname=>'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\SYSTEM01.DBF');
  9  sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>02,
 10  toname=>'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\UNDOTBS01.DBF');
 11  sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>03,
 12  toname=>'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\SYSAUX01.DBF');
 13  sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>04,
 14  toname=>'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\USERS01.DBF');
 15  sys.dbms_backup_restore.restoreBackupPiece(done=>done,
 16  handle=>'D:\oracle\product\10.2.0\flash_recovery_area\AN10\BACKUPSET\2008_0
4_10\O1_MF_NNNDF_TAG20080410T100316_3ZTXC5PY_.BKP',params=>null);
 17  sys.dbms_backup_restore.deviceDeallocate;
 18  end;
 19  /

PL/SQL procedure successfully completed.

SQL>
SQL>
SQL>
SQL>
SQL>
SQL> CREATE CONTROLFILE REUSE DATABASE "AN10" NORESETLOGS  ARCHIVELOG
  2      MAXLOGFILES 16
  3      MAXLOGMEMBERS 3
  4      MAXDATAFILES 100
  5      MAXINSTANCES 8
  6      MAXLOGHISTORY 292
  7  LOGFILE
  8    GROUP 1 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\REDO01.LOG'  SIZE 5M,
  9    GROUP 2 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\REDO02.LOG'  SIZE 5M,
 10    GROUP 3 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\REDO03.LOG'  SIZE 5M
 11  -- STANDBY LOGFILE
 12  DATAFILE
 13    'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\SYSTEM01.DBF',
 14    'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\UNDOTBS01.DBF',
 15    'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\SYSAUX01.DBF',
 16    'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\USERS01.DBF'
 17  --  'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\AN.DBF'
 18  CHARACTER SET ZHS16GBK
 19  ;
CREATE CONTROLFILE REUSE DATABASE "AN10" NORESETLOGS  ARCHIVELOG
*
ERROR at line 1:
ORA-01503: CREATE CONTROLFILE failed
ORA-01565: error in identifying file
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\REDO01.LOG'
ORA-27041: unable to open file
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????


找不到redo日誌,這時手動建立適合大小的redo,並再次建立控制檔案

SQL> /

Control file created.

由於臨時表空間不進行備份,所以恢復的時候需要重新建立臨時表空間
但必須是在資料庫開啟的情況下

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\T
EMP01.DBF'
  2       SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\TEMP01
.DBF'
*
ERROR at line 1:
ORA-01109: database not open


SQL> recover database using backup controlfile until cancle;
ORA-00277: illegal option to the UNTIL recovery flag CANCLE


SQL> recover database using backup controlfile until cancel;
ORA-00279: change 292666 generated at 04/10/2008 10:03:17 needed for thread 1
ORA-00289: suggestion :
D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AN10\ARCHIVELOG\2008_04_10\O1_MF_1_

221_%U_.ARC
ORA-00280: change 292666 for thread 1 is in sequence #221


Specify log: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: cannot open archived log
'D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AN10\ARCHIVELOG\2008_04_10\O1_MF_1

_221_%U_.ARC'
ORA-27041: unable to open file
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????


ORA-00308: cannot open archived log
'D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AN10\ARCHIVELOG\2008_04_10\O1_MF_1

_221_%U_.ARC'
ORA-27041: unable to open file
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????


SQL>
SQL>
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open


SQL> alter database open resetlogs;

Database altered.

SQL>
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\TEMP01.DBF' SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

Tablespace altered.

這樣就把資料庫恢復。

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

come from:http://space.itpub.net/13177610/viewspace-676332


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90618/viewspace-680743/,如需轉載,請註明出處,否則將追究法律責任。

相關文章