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

转自:http://blog.csdn.net/tianlesoftware/article/details/6261475

 

Oracle 不同故障的恢复方案

http://blog.csdn.net/tianlesoftware/archive/2010/12/30/6106178.aspx

 

Oracle undo 表空间管理

http://blog.csdn.net/tianlesoftware/archive/2010/07/11/5689558.aspx

 

 

       上面的2篇Blog 讲到了Oracle 一些故障下的恢复方法,但是还有2点,之前没有做详述。即current online redo 损坏的情况和undo的损坏情况。 之所以把他们放一起讲,是因为他们之间有联系。

       在做操作之前,最好把控制文件,redo log 和数据文件做一个冷备份,以防万一.

 

 

一.  UNDO 的补充信息

所以这里补充说明一下。 在补充之前先讲一下undo segment的概念。

 

       在blog:Oracle undo 管理

       http://blog.csdn.net/tianlesoftware/archive/2009/11/30/4901666.aspx

 

中提到了Oracle 的undo 有两种管理方式,通过参数undo_management来设置auto 和 manual。

 

1.1 当undo_management被设置成MENUAL时使用系统回滚段, 即将undo records 记录到SYSTEM 表空间下的SYSTEM段。

 

SQL> col segment_name format a10

SQL> select segment_name,tablespace_name,bytes,next_extent  from dba_segments where segment_type='ROLLBACK';

 

SEGMENT_NA TABLESPACE_NAME       BYTES NEXT_EXTENT

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

SYSTEM     SYSTEM                 393216     1048576

 

       通过上面的这条语句,我们查到了这个用于rollback 的system segment 存在与system 表空间。 默认情况下,只有一个segment,并且它还比较小,所以,如果使用system 段来存储undo records。肯定会影响数据库的性能。 所以Oracle 是建议使用Undo tablespace 来管理undo records。

 

1.2  当undo_management设置成AUTO时使用UNDO tablespace来管理回滚段。 这个时候,我们将有多个undo segment,并且这些segment 是存放在UNDO 表空间里的。 这样对DB的性能就会提高。

 

SQL> select segment_name,tablespace_name,bytes,next_extent  from dba_segments where segment_type='TYPE2 UNDO';

 

SEGMENT_NAME    TABLESPACE_NAME    BYTES NEXT_EXTENT

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

_SYSSMU1$            UNDOTBS1                1179648       65536

_SYSSMU2$            UNDOTBS1                1179648       65536

_SYSSMU3$            UNDOTBS1                2228224       65536

_SYSSMU4$            UNDOTBS1                1179648       65536

_SYSSMU5$            UNDOTBS1                 262144       65536

_SYSSMU6$            UNDOTBS1                1179648       65536

_SYSSMU7$            UNDOTBS1                1179648       65536

_SYSSMU8$            UNDOTBS1                1179648       65536

_SYSSMU9$            UNDOTBS1                1179648       65536

_SYSSMU10$           UNDOTBS1                1179648       65536

 

通过以上SQL的查询结果,我们可以看出,有10个undo segment来存放undo records。

 

       以上我们是通过dba_segment 表查看的结果。 也可以通过v$rollstat和v$rollname 两个视图来查看信息。 这2个视图会显示所有rollback 段的信息。包括system段和undo段。

 

SQL> col name format a15

SQL> select s.usn,n.name,s.extents,s.hwmsize,s.status from v$rollstat s, v$rollname n where s.usn=n.usn;

 

       USN NAME               EXTENTS    HWMSIZE STATUS

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

         0 SYSTEM                   6     385024 ONLINE

         1 _SYSSMU1$                3    7659520 ONLINE

         2 _SYSSMU2$                3    9691136 ONLINE

         3 _SYSSMU3$                4    7462912 ONLINE

         4 _SYSSMU4$                3   76668928 ONLINE

         5 _SYSSMU5$                4    8511488 ONLINE

         6 _SYSSMU6$                3    7462912 ONLINE

         7 _SYSSMU7$                3   33480704 ONLINE

         8 _SYSSMU8$                3    8577024 ONLINE

         9 _SYSSMU9$                3    7462912 ONLINE

        10 _SYSSMU10$               3   13754368 ONLINE

 

11 rows selected.

 

二.  UNDO 损坏的情况

 

       了解了第一部分的补充知识后,我们在来看一下undo 损坏的情况。 出现这种情况,大多数是因为异常宕机,在启动的时候报的错误。DB 不能启动。

      

       比如:ORA-00600: internal error code, arguments: [4194],  

 

       对于Undo 损坏的情况,能用备份恢复最好,如果不能,就只能通过一些特殊的方法来恢复。

 

2.1 方法一,使用system segment。

在Blog:

       Oracle undo 表空间管理

       http://blog.csdn.net/tianlesoftware/archive/2010/07/11/5689558.aspx

 

提到了一种方法,就是使用SYSTEM 的回滚段, 步骤如下:

 

(1)用spfile 创建pfile,然后修改参数:

#*.undo_tablespace='UNDOTBS1'

#*.undo_management='AUTO'

#*.undo_tablespace

#*.undo_retention

undo_management='MANUAL'

rollback_segments='SYSTEM'

 

(2)用修改之后的pfile,重启DB

SQL> STARTUP MOUNT pfile='F:/initorcl.ora' ;

 

(3)删除原来的表空间,创建新的UNDO 表空间

SQL> drop tablespace undotbs;

SQL> create undo tablespace undotbs1 datafile '/u01/oradata/undotbs1.dbf' size 10M;

 

(4)关闭数据库,修改pfile参数,然后用新的pfile创建spfile,在正常启动数据库。

*.undo_tablespace='UNDOTBS1'

*.undo_management='AUTO'

#undo_management='MANUAL'

#rollback_segments='SYSTEM'

 

 

2.2. 方法二:跳过损坏的segment

       在方法一里面,我们使用了system segment。 通过第一部分我们了解到,undo segment 有多个,我们可以通过alert log 来查看正在使用的是哪些segment,这些段有可能损坏了。 我们只需要把这些损坏的segment 跳过,先正常启动DB,在创建新的UNDO 表空间,在切换一下。

 

(1)修改pfile,添加参数:

*._corrupted_rollback_segments='_SYSSMU11$','_SYSSMU12$','_SYSSMU13$'

 

这些字段的值,我们通过alert log 查看。 也可以通过如下命令查看:

#strings system01.dbf | grep _SYSSMU | cut -d $ -f 1 | sort -u

 

(2)用修改之后的pfile启动DB

       因为跳过了哪些损坏的segment,所以DB 可以正常启动。

 

(3)创建新的UNDO 表空间,并切换过来

 

SQL> create undo tablespace undotbs1 datafile '/u01/oradata/undotbs1.dbf' size 10M;

SQL> alter system set undo_tablespace=undotbs1;

SQL> drop tablespace undotbs;

 

(4)修改pfile,创建spfile,并正常启动

删除:

*._corrupted_rollback_segments='_SYSSMU11$','_SYSSMU12$','_SYSSMU13$'

 

 

以上就是UNDO 出现故障的2种处理方法。

 

 

三.  Current online Redo 损毁的处理

       其实在之前的不同故障处理的那篇blog里已经提到了这点。 但这种情况是一种特殊的情况。 所以还是单独拿出来说明一下。

 

current online log 损坏有两种恢复方法:

(1)如果有归档和备份,可以用不完全恢复。

SQL>startup mount;

SQL>recover database until cancel; 先选择auto,尽量恢复可以利用的归档日志,然后重新执行:

SQL>recover database until cancel; 这次输入cancel,完成不完全恢复,

用resetlogs打开数据:

SQL>alter database open resetlogs; 打开数据库

 

(2)强制恢复, 这种方法可能会导致数据不一致

sql>startup mount;

sql>alter system set "_allow_resetlogs_corruption"=true scope=spfile;

sql>recover database until cancel;

sql>alter database open resetlogs;

 

这里主要看2点:

(1)使用了_allow_resetlogs_corruption 参数

(2)这种情况下,可能会报ORA-600[2662](SCN有关)和 ORA-600[4000](回滚段有关)的错误。

 

       使用_allow_resetlogs_corruption参数,强制的打开数据库,可能会导致逻辑的坏块,从而影响数据字典。 所以,即使使用该参数正常打开后,也需要做的一个操作:逻辑导出数据。 重建实例,导入实例。 消除逻辑坏块的可能性。

 

       如果使用_allow_resetlogs_corruption参数启动报了undo segment的错误而无法启动,处理方法参考第二节中undo 的处理情况。 只要DB 能正常open,就导出数据,重建实例,在导入。

 

非当前redo:

alter database clear unarchived logfile group 4;

时间: 2024-10-26 05:50:03

Current online Redo 和 Undo 损坏的处理方法的相关文章

【Oracle】Current online Redo 和 Undo 损坏的处理方法

由于机房断电,导致数据库异常down 机,重启的时候报错: Errors in file /opt/oracle/admin/aliuid/bdump/aliuid_arc1_19960.trc: ORA-00354: corrupt redo log block header ORA-00353: log corruption near block 26402 change 0 time 02/14/2012 01:32:17 ORA-00312: online log 1 thread 1:

redo 和 undo 之一

1.oracle 的日志分3类:  警告日志-=Alert log files :  跟踪日志--Trace files用户和进程): 重做日志--redo log 录数据库的更改). redo log file 重做日志文件,包括: 归档(archive)重做日志文件---------归档重做日志,简称归档日志,指当条件满足时,Oracle将在线重做日志以文件形式保存到硬盘(持久化) 在线(online)重做日志文件 -------又称联机重做日志,指Oracle以SQL脚本的形式实时记录数据

【知识点整理】NOLOGGING、APPEND、ARCHIVE和PARALLEL下,REDO、UNDO和执行速度的比较

[知识点整理]Oracle中NOLOGGING.APPEND.ARCHIVE和PARALLEL下,REDO.UNDO和执行速度的比较 1  BLOG文档结构图     2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 系统和会话级别的REDO和UNDO量的查询 ② NOLOGGING.APPEND.ARCHIVE和PARALLEL下,REDO.UNDO和执行速度的比较(重点)   Tips:

Oracle中在没有备份的情况下undo损坏怎么办

如果Oracle在运行中很不幸遇到undo损坏,当然最好的方法是完全恢复,不过如果没有备 份,可以采用一种非常规的手段(利用Oracle的隐藏参数),如果此时undo包含未提交的事 务,会造成一点点的数据丢失(一般都是可忍受的),如果没有未提交的事务,则不会有数 据丢失.其主要步骤有: 1. 修改undo表空间管理为手动: 2. 设置隐藏参数 (_offline_rollback_segments或_corrupted_rollback_segments)标识受影响的回滚段,使 Oracle忽略

Oracle] 解析在没有备份的情况下undo损坏怎么办

Oracle在运行中很不幸遇到undo损坏,当然最好的方法是完全恢复,但如果是在没有备份的情况下undo损坏怎么办?以下就为大家介绍出现这种情况的解决办法,需要的朋友参考下   如果Oracle在运行中很不幸遇到undo损坏,当然最好的方法是完全恢复,不过如果没有备份,可以采用一种非常规的手段(利用Oracle的隐藏参数),如果此时undo包含未提交的事务,会造成一点点的数据丢失(一般都是可忍受的),如果没有未提交的事务,则不会有数据丢失.其主要步骤有: 1. 修改undo表空间管理为手动: 2

win7出现Awc.exe损坏文件解决方法

win7出现Awc.exe损坏文件解决方法   1.首先按组合键win+r打开运行窗口,输入cmd调出命令提示符,如图所示: 2.随后输入命令"chkdsk /f"并回车,如图所示: 3.之后屏幕上会弹出需要用户确定的窗口,直接单击键盘上的"y"键并回车即可,如图所示: 4.完成上述设置之后,重新启动计算机生效.

win7系统下提示"部分便笺的元数据已被损坏"的解决方法

  虽然win7系统有很多功能,而且服务组件也很多,这是他的优点,但是有时也是导致一些系统故障的"元凶".这些组件的损坏很可能导致win7旗舰版电脑无法开机,系统无法正常登陆,但是有些文件的出现则只会导致部分的功能无法使用.这些故障都是由于组件的损坏导致的.但是像这样大的故障不会经常出现,只是会有一些小的问题比如:win7旗舰版电脑开机出现"部分便笺的元数据已被损坏"错误,这个问题不会影响正常的电脑操作,但是一旦用到便签功能势必会受到影响,所以下面就看看小编怎么解决

Win7系统RM视频文件损坏的解决方法

  大家现在观看的网络视频基本上都是以RM格式或RMVB格式存在,我们的win7系统电脑在使用的过程中有可能会遇到视频文件被损坏的情况,那么出现这样的情况大家的视频文件就无法观看,一些不知道如何解决的朋友就会比较着急,那么遇到这样的情况该怎么办呢,小编马上给大家说说这个解决方法吧! Win7系统RM视频文件损坏的解决方法如下: 1.要是大家在播放文件的时候被卡主,那么就可能是我们的RM视频被损坏了,大家直接跳过损坏的部分就可以了. 解决方法:大家可以去下载软件"rmfixit"对我们的

php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)_php实例

在做PHP程序时,需要使用PHP做的文件下载 那做就做呗把代码复制过来改了一改. 很多效果也出来了 那么点击下载后,恩,本以为搞定了文件下载,谁知道,图片打开的时候提示文件损坏,这我就观察了文件的大小.似乎真是多了 1KB左右. 使用PS打开,恩,提示了损坏,不过图象可以出来. 那么我就认为是 那多出来的 1kb的问题了. 然后,我把一个txt上传上去,然后下载. 果然发现,文件的前面以及后面,都多了几个 字符. 那我就在想应该怎么去掉啊.各种百度,谷歌,上论坛提问. 最后,经过我一个多小时的搜