回滚段损坏的修复实例

前几天同事打电话过来,说公司的开发库每天死4,5次
正好今天回公司,顺道看了一下

检查alertlog,发现成百上千的报错,全部是:
Errors in file D:/oracle/admin/croot/bdump/crootSMON.TRC:
ORA-01578: ORACLE data block corrupted (file # 22, block # 14715)
ORA-01110: data file 22: 'D:/ORACLE/ORADATA/CROOT/TRBS1.ORA'

file#=22的文件是回滚段表空间中的一个数据文件,很明显回滚段数据块损坏了。
但是数据库还算能用,可以正常打开,但是无法正常关闭,
关闭的时候报:
Shutting down instance (immediate)
License high water mark = 90
Mon Oct 25 12:03:23 2004
ORACLE Instance croot (pid = 6) - Error 1578 encountered while recovering transaction (2, 50).
Mon Oct 25 12:03:23 2004
Errors in file D:/oracle/admin/croot/bdump/crootSMON.TRC:
ORA-01578: ORACLE data block corrupted (file # 22, block # 14715)
ORA-01110: data file 22: 'D:/ORACLE/ORADATA/CROOT/TRBS1.ORA'

然后整个实例就crash了

检查坏块所在的对象,发现是RBS01,再检查dba_rollback_segs视图,发现除了RBS01是online状态,其它的都是partitial available状态,手工将其余的回滚段online以后,就无法再次offline了,立刻有active的transaction占据回滚段,停掉了所有的其它会话,仍然是这种情况,查看v$trasaction视图,已经没有任何记录显示还有正在运行的事务了。

这种情况,无法正常地drop掉回滚段,自然也就没办法drop掉回滚段表空间。

由于是开发库,根本就是处于非归档模式,也没有什么定时的备份,所以恢复数据库也不用想了。

不过也好在是开发库,那些事务丢了也根本无所谓。
于是,关闭数据库,修改初始化参数文件,添加隐含参数:
 _corrupted_rollback_segments=(rbs1,rbs2,rbs4,rbs5,rbs6,rbs7,rbs8,rbs9,rbs10)

全部标志为corrupted的,然后启动数据库到mount状态
drop掉file#=22的数据文件
然后recover database;alter database open;

数据库打开以后,再次检查v$rollname视图,发现只有SYSTEM表空间中的回滚段存在了,OK,再去dba_rollback_segs视图检查状态,发现除了SYSTEM回滚段其它的都处于need recover状态,好,没错。开始删除。

直接drop掉所有的回滚段,drop掉回滚段表空间,然后创建新的表空间,创建新的回滚段,将所有回滚段online,中间出了个小插曲,后面提到。

最后,正常关闭数据库,修改init参数,将_corrupted_rollback_segments这行注释掉,最后正常启动数据库。随便找几张表,作几个insert测试了一下,没有问题,OK,修复完成。

小插曲:创建新的回滚段时出了一个问题,耽误了一段时间,因为是8i的库,system表空间是DMT的,所以回滚段表空间也必须是DMT的,开始按照习惯创建了一个LMT的表空间,然后创建回滚段的时候总是报错,说非系统回滚段无法使用SYSTEM表空间,想了好一阵,才想起DMT和LMT的这回事儿,然后drop掉新建的LMT表空间,创建了一个DMT的表空间,再重新创建回滚段,没有问题了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: ORA-00376是Oracle数据库的错误代码,表示在尝试打开或读取数据文件时发生了错误。这可能是由于数据文件已经损坏或丢失,或者由于数据库实例无法访问数据文件。 ORA-01110也是Oracle数据库的错误代码,表示在尝试打开数据库时发生了错误。这可能是由于数据库文件已经损坏或丢失,或者由于数据库实例无法访问数据库文件。 在处理这些错误时,需要检查数据库文件的完整性和可用性,并尝试修复或恢复任何损坏的文件。还可以尝试重新启动数据库实例或重新启动服务器以解决问题。如果问题仍然存在,请参考Oracle文档或联系Oracle支持团队以获取更多帮助。 ### 回答2: ORA-00376是Oracle数据库出现的错误代码,表示无法在指定的日志文件中找到数据块。这通常发生在数据库回滚或恢复过程中。当Oracle尝试读取日志文件时,发现某个数据块在日志文件中不存在,导致无法继续进行回滚或恢复操作。 解决ORA-00376错误的方法包括: 1. 确保数据库的日志文件完整且可用。可以检查日志文件的存储位置和状态。 2. 如果数据库已经关闭,可以尝试删除损坏的日志文件,然后重新启动数据库Oracle会自动创建新的空白日志文件。 3. 如果数据库仍然打开,可以尝试切换到另一个日志文件组。可以使用ALTER DATABASE命令进行切换。 4. 如果以上方法都无效,可能需要进行数据库恢复操作。可以使用Oracle的恢复工具或备份来修复数据。 ORA-01110是Oracle数据库出现的错误代码,表示无法打开数据库文件。这通常发生在启动或恢复数据库时,Oracle无法找到或访问指定的数据文件。 解决ORA-01110错误的方法包括: 1. 确保数据文件的路径和名称是否正确。可以检查数据库参数文件(parameter file)中数据文件的配置。 2. 检查数据文件所在的磁盘或文件系统是否可用。确保数据库服务器可以正常访问数据文件所在的位置。 3. 如果数据文件已经存在且无法打开,可以尝试使用ALTER DATABASE命令指定新的数据文件。例如,ALTER DATABASE RENAME FILE 'oldfile' TO 'newfile'。 4. 如果数据文件损坏或丢失,可能需要进行数据库恢复操作。可以使用Oracle的恢复工具或备份来修复数据。 综上所述,ORA-00376和ORA-01110是Oracle数据库中常见的错误代码,分别表示无法在日志文件中找到数据块和无法打开数据库文件。解决这些错误通常需要检查和修复相关的日志文件和数据文件。 ### 回答3: ORA-00376和ORA-01110是Oracle数据库中的错误代码,表示数据库发生了一些问题。 ORA-00376错误代码表示无法读取文件。它通常出现在数据库打开和恢复过程中,可能是由于文件丢失、文件损坏或访问权限限制等问题导致的。要解决这个问题,可以检查文件路径是否正确,确保文件存在并且具有适当的访问权限。如果文件已损坏,则可以尝试进行修复或还原。 ORA-01110错误代码表示数据文件已经写满或无法写入。这通常是由于磁盘空间不足或文件系统错误导致的。要解决这个问题,需要检查磁盘空间是否足够,并确保文件系统没有出现错误。如果磁盘空间不足,则可以释放一些空间或重新分配空间。如果文件系统出现错误,则可以尝试修复文件系统或更换存储设备。 总之,ORA-00376和ORA-01110是Oracle数据库中常见的错误代码,表示数据库遇到了读取文件或写入文件时的问题。要解决这些问题,需要检查文件路径、访问权限、磁盘空间和文件系统等因素,并采取相应的措施修复或恢复数据库
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值