转运固定损坏的系统管理的撤消段
有关处理腐败的其他信息, 见 不列颠哥伦比亚省专家关于腐败的笔记 和
见MOSC注释 1088018.1 – 处理Oracle数据库损坏问题.
另请参阅如何修复 撤消日志损坏 (现在-00375) 使用 _undo_log_corruption
在 Oracle 和更高版本的 Oracle 中,旧的回滚段已被替换为
撤销段和大部分, 已自动调整大小和管理. 然而,
当这些系统创建和管理的撤消段之一损坏时会发生什么?
好, 一方面,您将在警报日志中收到类似于以下内容的错误:
文件 /oracle/admin/test/bdump/test2_smon_21466.trc 中的错误:
现在-00600: 内部错误代码, 争论: [6006], [1], [], [], [], [], [], []
斯蒙: 标记撤销段 29 由于需要恢复
ORACLE 实例测试2 (pid = 11) – 错误 600 恢复事务时遇到
(29, 42) 在对象上 36.
(请注意,这将显示相同的撤销段, 交易, 和对象编号每次
它发生, 如果撤销段和事务号不同, 那么问题出在对象上
显示的数字)
实际上, 你可能会一遍又一遍地得到很多这样的东西.
所以, 你能怎么办?
如果您尝试使用 ALTER ROLLBACK SEGMENT 命令更改撤销段,您
将被明确告知这是系统管理的并且可以?不会被改变.
所以, 这是你需要做的:
新建系统管理undo表空间:
连接 / 作为sysdba
创建撤销表空间undotbs2数据文件 “/u02/oracle/oradata/test/undotbs2.dbf”
尺寸 500m;
确定问题撤销段:
选择段名称, 来自 dba_rollback_segs 的状态;
问题部分将显示一个 ?需要恢复? 状态.
改变系统以使用新的撤销表空间:
更改系统设置 undo_tablespace=undotbs2 scope=both;
(请注意,如果您没有使用 spfile, 省略范围命令)
如果您使用的是 spfile, 从中创建一个 pfile:
连接 / 作为sysdba
创建 pfile=”/u01/oracle/admin/test/pfile/inittest.ora” 来自spfile;
编辑 inittest.ora pfile 并添加 (使用示例错误中的撤销段):
*._offline_rollback_segments=? _SYSSMU29$?
*._corrupt_rollback_segments=?_SYSSMU29$?
现在关闭您的实例, 这可能需要关闭中止, 但首先尝试立即关机.
使用手动启动命令启动:
启动文件=”/u01/oacle/admin/test/pfile=inittest.ora”
离线更改旧的撤消表空间:
离线更改表空间 undotbs1;
删除有问题的表空间:
删除表空间 undotbs1,包括内容和数据文件;
立即关机.
编辑inittest.ora文件去掉下划线参数.
使用 pfile 选项重启实例.
从 pfile 创建一个 spfile:
从 pfile= 创建 spfile”/u01/oracle/admin/test/pfile/inittest.ora”;
一步 13 完成后数据库应该正常启动. 然而, 这可能是明智的
进行完整备份,然后使用导出和导入进行重建. 因为我们不得不放弃撤销
具有一些未应用的可能活动事务的段,数据库可能未完全
持续的.