首页 / 数据库 / MySQL / current online redo logfile 丢失的处理方法
前面(见http://www.linuxidc.com/Linux/2014-08/105978.htm)做了rm -rf操作后的恢复演练,而且是在没有任何备份的情况下。今天在做破坏性操作前,做了个rman全备,然后在线删除全部数据库文件,包括控制文件,数据文件,在线日志文件,归档文件等。来看看有什么方法可以让数据库恢复运行,由于是current redo logfile丢失,那么本次测试是会丢失数据的,所以可以作为不完全恢复的一个案例。 --登入数据库进行dml操作 [Oracle@ora10g ~]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on Tue Aug 26 13:40:37 2014 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options SQL> select * from aaron8219.test1; INT ---------- 1 2 SQL> insert into aaron8219.test1 values(3); 1 row created. SQL> select group#,status,sequence# from v$log; GROUP# STATUS SEQUENCE# ---------- ---------------- ---------- 1 INACTIVE 1 2 CURRENT 2 3 INACTIVE 0 --不提交,另开一个session进行rm -rf操作 [root@ora10g ~]# cd /u01/app/oracle/oradata [root@ora10g oradata]# ll total 4 drwxr-x--- 2 oracle oinstall 4096 Aug 25 16:09 ora10g [root@ora10g oradata]# rm -rf ora10g/ [root@ora10g oradata]# ll total 0 --原session直接abort关闭,模拟current online redo logfile丢失 SQL> shutdown abort --用之前刚生成的rman全备来还原数据库各类文件 [oracle@ora10g ~]$ rman target / Recovery Manager: Release 10.2.0.1.0 - Production on Tue Aug 26 13:44:58 2014 Copyright (c) 1982, 2005, Oracle. All rights reserved. connected to target database: ora10g (not mounted) RMAN> restore controlfile from "/rmanbak/full_ORA10G_4175411955_20140826_02pgtq5h_1_1.bak"; Starting restore at 26-AUG-14 using channel ORA_DISK_1 channel ORA_DISK_1: restoring control file channel ORA_DISK_1: restore complete, elapsed time: 00:00:04 output filename=/u01/app/oracle/oradata/ora10g/control01.ctl output filename=/u01/app/oracle/oradata/ora10g/control02.ctl output filename=/u01/app/oracle/oradata/ora10g/control03.ctl Finished restore at 26-AUG-14 RMAN> alter database mount; database mounted released channel: ORA_DISK_1 RMAN> restore database; Starting restore at 26-AUG-14 Starting implicit crosscheck backup at 26-AUG-14 allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=156 devtype=DISK Crosschecked 1 objects Finished implicit crosscheck backup at 26-AUG-14 Starting implicit crosscheck copy at 26-AUG-14 using channel ORA_DISK_1 Finished implicit crosscheck copy at 26-AUG-14 searching for all files in the recovery area cataloging files... cataloging done List of Cataloged Files ======================= File Name: /u01/app/oracle/flash_recovery_area/ORA10G/autobackup/2014_08_26/o1_mf_s_856615092_9zr3snsq_.bkp using channel ORA_DISK_1 channel ORA_DISK_1: starting datafile backupset restore channel ORA_DISK_1: specifying datafile(s) to restore from backup set restoring datafile 00001 to /u01/app/oracle/oradata/ora10g/system01.dbf restoring datafile 00002 to /u01/app/oracle/oradata/ora10g/undotbs01.dbf restoring datafile 00003 to /u01/app/oracle/oradata/ora10g/sysaux01.dbf restoring datafile 00004 to /u01/app/oracle/oradata/ora10g/users01.dbf restoring datafile 00005 to /u01/app/oracle/oradata/ora10g/example01.dbf channel ORA_DISK_1: reading from backup piece /rmanbak/full_ORA10G_4175411955_20140826_01pgtq36_1_1.bak channel ORA_DISK_1: restored backup piece 1 piece handle=/rmanbak/full_ORA10G_4175411955_20140826_01pgtq36_1_1.bak tag=TAG20140826T123653 channel ORA_DISK_1: restore complete, elapsed time: 00:01:46 Finished restore at 26-AUG-14 RMAN> exit
Recovery Manager complete. 由于rman并不备份在线日志文件,刚才的rman只是做了个全库备份和控制文件的备份,可以看到redo01.log,redo02.log,redo03.log这3个文件并不存在 [oracle@ora10g ~]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on Tue Aug 26 14:52:35 2014 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options SQL> select open_mode from v$database; OPEN_MODE ---------- MOUNTED SQL> col member for a60 SQL> select group#,member from v$logfile; GROUP# MEMBER ---------- ------------------------------------------------------------ 3 /u01/app/oracle/oradata/ora10g/redo03.log 2 /u01/app/oracle/oradata/ora10g/redo02.log 1 /u01/app/oracle/oradata/ora10g/redo01.log
SQL> alter database open resetlogs; alter database open resetlogs * ERROR at line 1: ORA-01152: file 1 was not restored from a sufficiently old backup ORA-01110: data file 1: "/u01/app/oracle/oradata/ora10g/system01.dbf" 由于只是restore了数据库,还未recover,数据库是无法打开的 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 until cancel; 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; ORA-00279: change 502729 generated at 08/26/2014 15:36:54 needed for thread 1 ORA-00289: suggestion : /u01/app/oracle/flash_recovery_area/ORA10G/archivelog/2014_08_26/o1_mf_1_3_%u_.arc ORA-00280: change 502729 for thread 1 is in sequence #3 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} auto ORA-00308: cannot open archived log "/u01/app/oracle/flash_recovery_area/ORA10G/archivelog/2014_08_26/o1_mf_1_3_%u_.arc" ORA-27037: unable to obtain file status Linux Error: 2: No such file or directory Additional information: 3 ORA-00308: cannot open archived log "/u01/app/oracle/flash_recovery_area/ORA10G/archivelog/2014_08_26/o1_mf_1_3_%u_.arc" ORA-27037: unable to obtain file status Linux Error: 2: No such file or directory Additional information: 3 SQL> recover database using backup controlfile until cancel; ORA-00279: change 502729 generated at 08/26/2014 15:36:54 needed for thread 1 ORA-00289: suggestion : /u01/app/oracle/flash_recovery_area/ORA10G/archivelog/2014_08_26/o1_mf_1_3_%u_.arc ORA-00280: change 502729 for thread 1 is in sequence #3 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} cancel Media recovery cancelled. SQL>