昨天做一個(gè)實(shí)驗(yàn),結(jié)果把數(shù)據(jù)庫(kù)搞壞了,當(dāng)試圖進(jìn)行恢復(fù)時(shí)居然報(bào)了RMAN-06026錯(cuò)誤。 回想一下,原來(lái)在嘗試恢復(fù)中使用了
_allow_resetlogs_corruption參數(shù),resetlogs之后,Oracle使用當(dāng)前的控制文件不允許從這個(gè)歷史備份集中進(jìn)行恢復(fù)。
由于我沒有使用catalog,所以嘗試使用dbms_backup_restore進(jìn)行恢復(fù)。
1.錯(cuò)誤信息
我們看到雖然list backup可以顯示備份集,但是無(wú)法進(jìn)行恢復(fù),錯(cuò)誤為RMAN-06026,RMAN-06026。
[oracle@jumper oradata]$ rman target / Recovery Manager: Release 9.2.0.4.0 - Production Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved. connected to target database: CONNER (DBID=3152029224) RMAN> restore database; Starting restore at 11-JUN-05 using target database controlfile instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=11 devtype=DISK RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of restore command at 06/11/2005 01:19:01 RMAN-06026: some targets not found - aborting restore RMAN-06023: no backup or copy of datafile 3 found to restore RMAN-06023: no backup or copy of datafile 2 found to restore RMAN-06023: no backup or copy of datafile 1 found to restore RMAN> list backup; List of Backup Sets =================== BS Key Type LV Size Device Type Elapsed Time Completion Time ------- ---- -- ---------- ----------- ------------ --------------- 13 Full 1G DISK 00:03:20 09-JUN-05 BP Key: 13 Status: AVAILABLE Tag: TAG20050609T173346 Piece Name: /opt/oracle/product/9.2.0/dbs/0ggmiabq_1_1 SPFILE Included: Modification time: 08-JUN-05 List of Datafiles in backup set 13 File LV Type Ckp SCN Ckp Time Name ---- -- ---- ---------- --------- ---- 1 Full 240560269 09-JUN-05 /opt/oracle/oradata/conner/system01.dbf 2 Full 240560269 09-JUN-05 /opt/oracle/oradata/conner/undotbs01.dbf 3 Full 240560269 09-JUN-05 /opt/oracle/oradata/conner/users01.dbf RMAN> exit Recovery Manager complete.
2.使用dbms_backup_restore進(jìn)行恢復(fù)
dbms_backup_restore是一個(gè)非常強(qiáng)大的package,可以在數(shù)據(jù)庫(kù)nomount下使用,用于從備份集中讀取各類文件。
本例使用如下腳本:
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=>'/opt/oracle/oradata/conner/system01.dbf'); sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>02,toname=>'/opt/oracle/oradata/conner/undotbs01.dbf'); sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>03,toname=>'/opt/oracle/oradata/conner/users01.dbf'); sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'/opt/oracle/product/9.2.0/dbs/0ggmiabq_1_1', params=>null); sys.dbms_backup_restore.deviceDeallocate; END; /
3.執(zhí)行恢復(fù)
[oracle@jumper conner]$ sqlplus "/ as sysdba" SQL*Plus: Release 9.2.0.4.0 - Production on Sat Jun 11 01:24:34 2005 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Connected to an idle instance. SQL> startup nomount; ORACLE instance started. Total System Global Area 101782828 bytes Fixed Size 451884 bytes Variable Size 37748736 bytes Database Buffers 62914560 bytes Redo Buffers 667648 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,toname=>'/opt/oracle/oradata/conner/system01.dbf'); 8 sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>02,toname=>'/opt/oracle/oradata/conner/undotbs01.dbf'); 9 sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>03,toname=>'/opt/oracle/oradata/conner/users01.dbf'); 10 sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'/opt/oracle/product/9.2.0/dbs/0ggmiabq_1_1', params=>null); 11 sys.dbms_backup_restore.deviceDeallocate; 12 END; 13 / PL/SQL procedure successfully completed. SQL>
至此,從備份集中讀取文件完畢。
4.恢復(fù)控制文件
由于大意,也沒有備份控制文件,所以只好重建控制文件。
SQL> alter database mount; Database altered. SQL> alter database backup controlfile to trace; Database altered.
找到trace文件,編輯、執(zhí)行重建控制文件需要部分:
[oracle@jumper oracle]$ sqlplus "/ as sysdba" SQL*Plus: Release 9.2.0.4.0 - Production on Sat Jun 11 01:30:50 2005 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Connected to: Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production With the Partitioning option JServer Release 9.2.0.4.0 - Production SQL> shutdown immediate; ORA-01109: database not open Database dismounted. ORACLE instance shut down. SQL> startup nomount; ORACLE instance started. Total System Global Area 101782828 bytes Fixed Size 451884 bytes Variable Size 37748736 bytes Database Buffers 62914560 bytes Redo Buffers 667648 bytes SQL> set echo on SQL> @ctl SQL> SQL> CREATE CONTROLFILE REUSE DATABASE "CONNER" RESETLOGS ARCHIVELOG 2 -- SET STANDBY TO MAXIMIZE PERFORMANCE 3 MAXLOGFILES 5 4 MAXLOGMEMBERS 3 5 MAXDATAFILES 100 6 MAXINSTANCES 1 7 MAXLOGHISTORY 1361 8 LOGFILE 9 GROUP 1 '/opt/oracle/oradata/conner/redo01.log' SIZE 10M, 10 GROUP 2 '/opt/oracle/oradata/conner/redo02.log' SIZE 10M, 11 GROUP 3 '/opt/oracle/oradata/conner/redo03.log' SIZE 10M 12 -- STANDBY LOGFILE 13 DATAFILE 14 '/opt/oracle/oradata/conner/system01.dbf', 15 '/opt/oracle/oradata/conner/undotbs01.dbf', 16 '/opt/oracle/oradata/conner/users01.dbf' 17 CHARACTER SET ZHS16GBK 18 ; Control file created.
5.執(zhí)行恢復(fù)
SQL> recover database; ORA-00283: recovery session canceled due to errors ORA-01610: recovery using the BACKUP CONTROLFILE option must be done SQL> recover database using backup controlfile until cancel; ORA-00279: change 240560269 generated at 06/09/2005 17:33:48 needed for thread 1 ORA-00289: suggestion : /opt/oracle/oradata/conner/archive/1_7.dbf ORA-00280: change 240560269 for thread 1 is in sequence #7 Specify log: {=suggested | filename | AUTO | CANCEL} auto ORA-00279: change 240600632 generated at 06/10/2005 10:42:26 needed for thread 1 ORA-00289: suggestion : /opt/oracle/oradata/conner/archive/1_8.dbf ORA-00280: change 240600632 for thread 1 is in sequence #8 ORA-00278: log file '/opt/oracle/oradata/conner/archive/1_7.dbf' no longer needed for this recovery Specify log: {=suggested | filename | AUTO | CANCEL} auto ORA-00279: change 240620884 generated at 06/10/2005 10:45:42 needed for thread 1 ORA-00289: suggestion : /opt/oracle/oradata/conner/archive/1_9.dbf ORA-00280: change 240620884 for thread 1 is in sequence #9 ORA-00278: log file '/opt/oracle/oradata/conner/archive/1_8.dbf' no longer needed for this recovery ORA-00283: recovery session canceled due to errors ORA-00600: internal error code, arguments: [3020], [4242465], [1], [9], [314], [272], [], [] ORA-10567: Redo is inconsistent with data block (file# 1, block# 48161) ORA-10564: tablespace SYSTEM ORA-01110: data file 1: '/opt/oracle/oradata/conner/system01.dbf' ORA-10560: block type 'DATA SEGMENT HEADER - UNLIMITED' ORA-01112: media recovery not started SQL> recover database using backup controlfile until cancel; ORA-00279: change 240620949 generated at 06/10/2005 10:45:44 needed for thread 1 ORA-00289: suggestion : /opt/oracle/oradata/conner/archive/1_9.dbf ORA-00280: change 240620949 for thread 1 is in sequence #9 Specify log: {=suggested | filename | AUTO | CANCEL} cancel Media recovery cancelled. SQL> alter database open resetlogs; Database altered. SQL> select name from v$datafile; NAME ------------------------------------------------------------ /opt/oracle/oradata/conner/system01.dbf /opt/oracle/oradata/conner/undotbs01.dbf /opt/oracle/oradata/conner/users01.dbf SQL>
至此恢復(fù)完畢。