ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Undo和Current Online Redo损坏的处理方法

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

原创 Linux操作系统 作者:keeptrying 时间:2013-11-12 16:55:56 0 删除 编辑

一、Undo损坏

1Undo的两种管理方式

Oracle undo管理详解:

http://space.itpub.net/25744374/viewspace-776025/

Oracle undo有两种管理方式:automanual。通过参数undo_management来设置。

1)、MANUAL方式将undo信息记录到SYSTEM表空间下的SYSTEM segment

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

通过上面的查询,可以看出这个system segmentsystem表空间,默认情况下,只有一个segment,而且比较小,所以如果使用system segment来存储undo信息,会影响数据库的性能。所以Oracle推荐使用undo tablespace方式。

2)、AUTO方式使用undo tablespace存储undo信息。

使用Undo tablespace存储,会有多个undo segment,并且由于是在undo表空间,而不是system表空间,所以对数据库性能会有所提高。

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

SEGMENT_NA    TABLESPACE_NAME         BYTES     NEXT_EXTENT

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

_SYSSMU1$      UNDOTBS1                2228224       65536

_SYSSMU2$      UNDOTBS1                1179648       65536

_SYSSMU3$      UNDOTBS1                1179648       65536

_SYSSMU4$      UNDOTBS1                1179648       65536

_SYSSMU5$      UNDOTBS1                1179648       65536

_SYSSMU6$      UNDOTBS1                1179648       65536

_SYSSMU7$      UNDOTBS1                1179648       65536

_SYSSMU8$      UNDOTBS1                2228224       65536

_SYSSMU9$      UNDOTBS1                2228224       65536

_SYSSMU10$     UNDOTBS1                3276800       65536

已选择10行。

通过上面的查询,可以看出,有10undo segment来存储undo信息。

也可以通过v$rollnamev$rollstat视图来查看这些信息:

l   v$rollnameList the names of all online rollback segments.

l   v$rollstatContains rollback segment statistics.

2Undo损坏的处理

Undo损坏大多数是因为异常宕机,在启动的时候报错,DB不能启动,比如:

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

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

方法一:使用system segment

步骤:

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=’E:\initsorcl.ora’;

3)、删除原来的表空间,创建新的undo表空间

SQL> drop tablespace undotbs1;

SQL> create undo tablespace undotbs1 datafile ‘E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\undotbs1.dbf’ size 10M;

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

*.undo_tablespace='UNDOTBS1'

*.undo_management='AUTO'

#undo_management='MANUAL'

#rollback_segments='SYSTEM'

=================================================

方法二:跳过损坏的 segment

因为undo segment有多个,可以通过查看alert log来判断是哪些段损毁了,只需要把这些损坏的segment跳过,先正常启动DB,再创建新的undo表空间,再切换一下。

步骤:

1)、用spfile创建pfile,然后添加参数:

*._corrupted_rollback_segments=’ _SYSSMU11$’,’ _SYSSMU11$’,’ _SYSSMU11$’

这些字段的值可以通过alert log查看。

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

SQL> startup mount pfile=’E:\initsorcl.ora’;

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

3)、创建新的undo表空间,并切换过来

SQL> create undo tablespace undotbs2 datafile ‘E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\UNDOTBS2.DBF’ size 10M;

SQL> alter system set undo_tablespace=undotbs2;

SQL> drop tablespace undotbs1;

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

删除:

*._corrupted_rollback_segments=’ _SYSSMU11$’,’ _SYSSMU11$’,’ _SYSSMU11$’

=================================================

二、Current Online Redo损坏

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

SQL> startup mount;

SQL> recover database until cancle;

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;

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

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

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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25744374/viewspace-776419/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-04-25

  • 博文量
    130
  • 访问量
    950481