ora-01578 ora-01110

alert日志 

大家应该都知道在Oracle数据库中有一个undo表空间,它扮演了十分重要的角色,它的主要作用就是数据的回滚。其中undo表空间中的undo块记录了数据修改之前的操作,可以帮助我们随时对数据的修改进行回退!但是,undo存在坏块那怎么办呢?

坏块概念

首先,小编给大家大概介绍一下什么是坏块?在数据库中有一个概念叫做数据块的一致性,Oracle的数据块的一致性包括了两个层次:物理一致性和逻辑一致性,如果一个数据块在这两个层次上存在不一致性,那它就是一个坏块,数据库后台日志就会告警ORA-1578或者是ORA-600错误。

坏块处理方案

在这里给大家分享一个案例,从以下的日志可以看到Oracle data block corrupted(file#116,block#836180),这个输出的意思就是第116号数据文件的第836180块已经损坏了,通过视图查询得知,这个116号数据文件就是undo表空间。这时候的SMON进程为了保护数据的一致性,强制关闭了数据库,让我们无法打开数据库。

下面就来说说当undo出现坏块要如何解决。

思路是这样的,需要创建出新的undotbs2表空间替换掉已经坏掉的undotbs1表空间,创建新的undo表空是需要打开数据库的,但是只要数据库一启动,SMON进程就会强行关闭数据库,那不就走进了死胡同了吗?

数据文件脱机

这时候,我们需要在数据库mount的状态下,将带有坏块的#116数据文件进行offline drop脱机处理,这样SMON进程就暂时检测不到坏块,成功拉起数据库!

startup mountalter database datafile 116 offline drop;alter database open

创建新undo表空间

前面小编也说到了,undo表空间在数据库中扮演了十分重要的角色,数据库怎么能一日没有undo呢?

所以我们打开数据库以后,需要创建一个新的undo表空间,并设置为默认表空间,

create undo tablespace undotbs2 datafile '/oradata/ETL/UNDOTBS2.dbf' size 1G autoextend on;alter system set undo_tablespace=undotbs2 scope=both;

删除旧undo表空间

新的表空间建立好以后,原来坏掉的undo表空间我们就可以彻底删除了,但是在删除的过程中发现原undo表空间仍然存在活跃的undo段

drop tablespace undotbs1 including contents and datafiles; 

原来还有活跃的旧undo段在,所以数据库阻止了我们的删除!

查询相关视图,获取所有原undo表空间仍活跃的undo段

select status,segment_name from dba_rollback_segs where status not in ('OFFLINE') and tablespace_name='UNDOTBS1';

将这些活跃的undo段添加到pfile参数文件中,进行跳过处理。

*._allow_resetlogs_corruption=true*._allow_terminal_recovery_corruption=true*._corrupted_rollback_segments=(_SYSSMU10_1197734989$,_SYSSMU20_1050586925$,_SYSSMU26_3131552754$,_SYSSMU28_1349284785$,_SYSSMU32_980979620$,_SYSSMU34_3070439537$,_SYSSMU47_2705532003$,_SYSSMU50_602588002$,_SYSSMU51_201410034$,_SYSSMU58_3524391680$,_SYSSMU59_773718799$,_SYSSMU60_1941620517$,_SYSSMU61_1757677461$,_SYSSMU64_3091325918$,_SYSSMU65_2877150887$,_SYSSMU66_2848890605$)

 关闭数据库,以修改后的pfile文件进行启动数据库

startup pfile=/oracle/product/11.2.0/db_1/dbs/initETL.ora;

这时候,没有活跃段的阻拦,我们成功删除了旧undo表空间及其的所有数据

drop tablespace undotbs1 including contents and datafiles;

至此,新的undo表空间替换成功!数据库正常运行!大功告成!

友情提醒:记得要将参数文件中添加的隐含参数注释掉,重新启动数据库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值