昨天做了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>

因为之前的归档没实用rman备份,而如今也不存在了,无法recover数据库,就算用resetlogs也无法open数据库。此时,仅仅有通过隐含參数_allow_resetlogs_corruption来open数据库了

SQL> show parameter spfile





NAME                                 TYPE        VALUE

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

spfile                               string      /u01/app/oracle/product/10.2.0

                                                 /db_1/dbs/spfileora10g.ora





--创建pfile  

SQL> create pfile from spfile;





File created.





--编辑$ORACLE_HOME/dbs/initora10g.ora初始化參数文件,在文件末尾加入*._allow_resetlogs_corruption = true

[oracle@ora10g ora10g]$ vi $ORACLE_HOME/dbs/initora10g.ora





ora10g.__db_cache_size=180355072

ora10g.__java_pool_size=4194304

ora10g.__large_pool_size=4194304

ora10g.__shared_pool_size=92274688

ora10g.__streams_pool_size=0

*.audit_file_dest='/u01/app/oracle/admin/ora10g/adump'

*.background_dump_dest='/u01/app/oracle/admin/ora10g/bdump'

*.compatible='10.2.0.1.0'

*.control_files='/u01/app/oracle/oradata/ora10g/control01.ctl','/u01/app/oracle/oradata/ora10g/control02.ctl','/u01/app/oracle/oradata/ora10g/control03.ctl'#Restore Controlfile

*.core_dump_dest='/u01/app/oracle/admin/ora10g/cdump'

*.db_block_size=8192

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='ora10g'

*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'

*.db_recovery_file_dest_size=2147483648

*.dispatchers='(PROTOCOL=TCP) (SERVICE=ora10gXDB)'

*.job_queue_processes=10

*.log_archive_format='%t_%s_%r.dbf'

*.nls_language='SIMPLIFIED CHINESE'

*.nls_territory='CHINA'

*.open_cursors=300

*.pga_aggregate_target=94371840

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.sga_target=285212672

*.undo_management='AUTO'

*.undo_tablespace='UNDOTBS1'

*.user_dump_dest='/u01/app/oracle/admin/ora10g/udump'

*._allow_resetlogs_corruption=TRUE





--关闭数据库实例,用pfile启动

SQL> shutdown immediate

ORA-01109: database not open







Database dismounted.

ORACLE instance shut down.

SQL> startup pfile=$ORACLE_HOME/dbs/initora10g.ora

ORACLE instance started.





Total System Global Area  285212672 bytes

Fixed Size                  1218992 bytes

Variable Size             100664912 bytes

Database Buffers          180355072 bytes

Redo Buffers                2973696 bytes

Database mounted.

ORA-01589: must use RESETLOGS or NORESETLOGS option for database open





--最后用resetlogs打开数据库

SQL> alter database open resetlogs;





Database altered.





SQL> 





[oracle@ora10g ora10g]$ ll

total 1051020

-rw-r----- 1 oracle oinstall   7061504 Aug 26 16:03 control01.ctl

-rw-r----- 1 oracle oinstall   7061504 Aug 26 16:03 control02.ctl

-rw-r----- 1 oracle oinstall   7061504 Aug 26 16:03 control03.ctl

-rw-r----- 1 oracle oinstall 104865792 Aug 26 16:03 example01.dbf

-rw-r----- 1 oracle oinstall  52429312 Aug 26 16:03 redo01.log

-rw-r----- 1 oracle oinstall  52429312 Aug 26 16:03 redo02.log

-rw-r----- 1 oracle oinstall  52429312 Aug 26 16:03 redo03.log

-rw-r----- 1 oracle oinstall 251666432 Aug 26 16:03 sysaux01.dbf

-rw-r----- 1 oracle oinstall 503324672 Aug 26 16:03 system01.dbf

-rw-r----- 1 oracle oinstall  20979712 Aug 26 16:03 temp01.dbf

-rw-r----- 1 oracle oinstall  31465472 Aug 26 16:03 undotbs01.dbf

-rw-r----- 1 oracle oinstall   5251072 Aug 26 16:03 users01.dbf

[oracle@ora10g ora10g]$ 





再次查看数据文件,发现又一次生成了3个online redo logfile了





--resetlogs把SEQUENCE#序列号又一次变成1

SQL> select group#,sequence# from v$log;





    GROUP#  SEQUENCE#

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

         1          0

         2          1

         3          0





--測试表仅仅留下了原来的数据库,由于没有commit,新插入的第3条记录丢失,就算commit,也是会丢数据的,由于redo logfile也被删除了

SQL> select * from aaron8219.test1;

INT

----------

         1

         2

注意,最后要把刚才设置的隐含參数_allow_resetlogs_corruption = true去掉,并又一次创建spfile,否则数据库将来会有引起不一致的风险,设置该隐含參数仅仅是下下策,为了能让数据库open而不得已为之,丢失数据库是肯定的了,由于这是在极端情况下得測试,通常仅仅有在丢失了状态为current的online redo logfile才会丢失数据,假设仅仅是inactive的redo logfile,就算使用alter database
open resetlogs;也不意味着100%丢数据。另外,要注意的是,当使用using backup controlfile关键词时,必需要配合使用open resetlogs来打开数据库。以resetlogs方式open数据库后,必须又一次做一次数据库全备,由于一旦incarnation改变之后,数据库原来的备份集就失效了。

current online redo logfile 丢失的处理方法的更多相关文章

  1. Current online Redo 和 Undo 损坏的处理方法

    转自:http://blog.csdn.net/tianlesoftware/article/details/6261475 Oracle 不同故障的恢复方案 http://blog.csdn.net ...

  2. drop redo logfile current报错

    目的:在安装完毕11.2.0.4版本Oracle单实例数据库后,对日志进行格式化,删除原日志组current状态,删除报错 #对于理论学习,而带来的理解命令,因此作为记录 #查询日志状态SYS > ...

  3. 【恢复】 Redo文件丢失的恢复

    第一章 Redo文件丢失的恢复 1.1  online redolog file 丢失 联机Redo日志是Oracle数据库中比较核心的文件,当Redo日志文件异常之后,数据库就无法正常启动,而且有丢 ...

  4. 实验记录:Oracle redo logfile的resize过程

    实验记录:Oracle redo logfile的resize过程. 实验环境:RHEL 6.4 + Oracle 11.2.0.3 单实例 文件系统 实验目的:本实验是修改redo logfile的 ...

  5. [讨论] 这几天来封装Win7用户配置文件丢失的解决方法个人心得

    [讨论] 这几天来封装Win7用户配置文件丢失的解决方法个人心得 prerouting 发表于 2010-5-9 16:50:46 https://www.itsk.com/thread-36634- ...

  6. iis7中session丢失的解决方法小结

    这篇文章主要介绍了在windows server 2008系统中,session丢失的解决方法,供大家学习参考 问题描述: Windows Server 2008 +IIS +ASP.net +SQL ...

  7. oracle服务丢失的处理方法之OracleServiceORCL不存在示例

    oracle服务是oracle数据库的重要组成部分,下面就教您oracle服务丢失的处理方法,如果您之前遇到过oracle服务丢失的问题,不妨一看. 今天发现数据库服务器上的所有oracle服务都丢失 ...

  8. oracle - redo 损坏或删除处理方法

    OS: Oracle Linux Server release 5.7 DB: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - ...

  9. 07 归档模式 Active redo log丢失或损坏的恢复

    环境同上一篇 模拟处于active状态的redo log损坏 sesion 1 SYS@ orcl >/ GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEM ...

随机推荐

  1. UVA 10622 - Perfect P-th Powers(数论)

    UVA 10622 - Perfect P-th Powers 题目链接 题意:求n转化为b^p最大的p值 思路:对n分解质因子,然后取全部质因子个数的gcd就是答案,可是这题有个坑啊.就是输入的能够 ...

  2. 用qsort排序

     冒泡,快排都是常见的排序方法,这里介绍用头文件里的qsort函数排序.只是自己要先一个cmp函数. #include<stdlib.h>//qsort的头文件 int a[100]= ...

  3. android一个上传图片的样例,包含怎样终止上传过程,假设在上传的时候更新进度条(一)

    先上效果图: Layout为: <? xml version="1.0" encoding="utf-8"?> <LinearLayout x ...

  4. 对称加密算法DES,3重DES,TDEA,Blowfish,RC5,IDEA,AES。

    对称加密算法:DES,3重DES,TDEA,Blowfish,RC5,IDEA,AES. 1.对称加密算法 1.1 定义 对称加密算法是应用较早的加密算法,技术成熟.在对称加密算法中,数据发信方将明文 ...

  5. Uva - 11419 - SAM I AM

    题意:一个矩形——R*C的网格,在某些位置上有石头,在网格外开一炮可以打掉该行或者该列的石头,求打掉这些石头最少需要多少门大炮,位置分别设在哪行哪列(0<R<1001, 0 < C ...

  6. Android开发之模板模式初探

    模板模式我认为在Android的开发中是最长用到的,基本是随处可见的,认识该模式,有助于我们对Android的源代码及框架有一个更深层次的认识.那什么是模板模式呢,模板模式就是定义一个基本框架,将当中 ...

  7. Burp Suite抓包、截包和改包

    Burp Suite..呵呵.. 听说Burp Suite是能够监測.截取.改动我们訪问web应用的数据包,这么牛X? 条件:本地网络使用代理.由Burp Suite来代理.也就是说,每一个流出外网的 ...

  8. Remote Desktop Organizer – 管理组织远程桌面 - 小众软件

    http://www.appinn.com/remote-desktop-organizer/

  9. 32位Linux文件限制大小

    线上程序不断重新启动,查看log发现是进程由于SIGXFSZ信号退出.对过大的文件进行操作的时候会产生此信号,一般仅仅在32位机器上出现,文件限制大小为2G.用lsof查看进程打开的文件,果然有一个文 ...

  10. umlの实现图

    在uml中大部分模型描写叙述了逻辑和设计方面的信息: 用例图知道期望 类图能够知道问题域的词汇(类.对象) 状态图.交互图和活动图能够知道类图中的词汇是怎样写作完毕行为的(逻辑结构) 实现图是用来描写 ...