探索Oracle不完全恢复之--基于cancel的恢复 第二篇(一)

2014-11-24 18:45:14 · 作者: · 浏览: 0

基于cancel 的不一致性恢复(归档丢失) 第二篇


主要适用于:基于Cancel的不完全恢复适用场景:Recover时,所需的某个归档日志损坏,或主机断电,current状态的联机日志损坏。



创建测试表


创建wwl002表,切换日志,再创建新的wwl003表,主机断电,删除当前日志,模拟文件损坏。


SQL> conn wwl/wwl


Connected.



SQL> select * from tab;


TNAME TABTYPE CLUSTERID


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


WWL001 TABLE



SQL> create table WWL002 as select *from wwl001;


Table created.



SQL> conn / as sysdba


Connected.



切换日志


SQL> alter system switch logfile;


System altered.



后再创建第二张表


SQL> conn wwl/wwl


Connected.



SQL> create table wwl003 as select *from wwl001;


Table created.



查看当前日志组,确定当前活动的日志组,是组4


SQL> conn / as sysdba


Connected.


SQL> set line 200


SQL> select * from v$log;



GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM


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


4 1 2 134217728 2 YES ACTIVE 1716929 30-JUL-12


5 1 1 134217728 2 YES INACTIVE 1692728 27-JUL-12


6 1 3 134217728 2 NO CURRENT 1720396 30-JUL-12


7 1 0 134217728 2 YES UNUSED 0



定位当前日志组的日志文件,有两个。


SQL> col member format a30


SQL> select * from v$logfile;



GROUP# STATUS TYPE MEMBER IS_


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


7 ONLINE /DBBak2/oradata/WWL/redo7a.log NO


7 ONLINE /DBBak2/oradata/WWL/redo7b.log NO


6 ONLINE /DBBak2/oradata/WWL/redo6a.log NO


6 ONLINE /DBBak2/oradata/WWL/redo6b.log NO


5 STALE ONLINE /DBBak2/oradata/WWL/redo5a.log NO


5 STALE ONLINE /DBBak2/oradata/WWL/redo5b.log NO


4 ONLINE /DBBak2/oradata/WWL/redo4a.log NO


4 ONLINE /DBBak2/oradata/WWL/redo4b.log NO



8 rows selected.



删除当前日志组文件,模拟在线事务丢失:


SQL> !rm -f/DBBak2/oradata/WWL/redo4a.log


SQL> !rm -f/DBBak2/oradata/WWL/redo4b.log



模拟服务器断电


SQL> shutdown abort;



恢复步骤:


1、尝试启动数据库的时候报当前日志丢失。


SQL> startup


ORACLE instance started.



Total System Global Area 100663296 bytes


Fixed Size 1217884 bytes


Variable Size 88083108 bytes


Database Buffers 8388608 bytes


Redo Buffers 2973696 bytes


Database mounted.


ORA-00313: open failedfor members of log group 4 of thread 1


ORA-00312: online log 4thread 1: '/DBBak2/oradata/WWL/redo4b.log'


ORA-27037: unable toobtain file status


Linux Error: 2: No suchfile or directory


Additional information: 3


ORA-00312: online log 4thread 1: '/DBBak2/oradata/WWL/redo4a.log'


ORA-27037: unable toobtain file status


Linux Error: 2: No suchfile or directory


Additional information: 3



2、尝试Clear redo4


SQL> alter database clear logfile group4;


alter database clear logfile group 4


*


ERROR at line 1:


ORA-01624: log 4 needed for crash recoveryof instance WWL (thread 1)


ORA-00312: online log 4 thread 1:'/DBBak2/oradata/WWL/redo4a.log'


ORA-00312: online log 4 thread 1:'/DBBak2/oradata/WWL/redo4b.log'



3、在当前库做基于Cancel的不完全恢复


SQL> recover database until cancel;


ORA-00279: change 1716930 generated at07/30/2012 11:03:51 needed for thread 1


ORA-00289: suggestion :/DBSoft/product/10.2.0/db_1/dbs/arch1_2_