【Oracle问题集6】ORA-01548: active rollback segment XX found, terminate dropping tablespace

说明:【oracle问题集】是博主平时操作数据库遇到的问题以及解决方案。
执行语句:表示操作数据库过程
出错现象:表示操作数据库过程出现错误现象
出错原因:表示出现错误的原因
解决方法:表示解决错误的方法
相关知识:表示与这个主题相关的知识
=============================================================
执行语句:
删除表空间报错误,drop tablespace 表空间名
出错现象:
“ORA-01548: active rollback segment '_SYSSMU11_4270384673$ ' found, terminate dropping tablespace” 
错误原因:
删除undo表空间中的segment需要回复
解决方法:
删除回滚段信息

1、关闭相应undo表空间的数据文件

alter database datafile '/home/oracle/undofile.dbf' offline drop

2、查询需要segment状态

SQL> select segment_name,tablespace_name,status from dba_rollback_segs; SEGMENT_NAME TABLESPACE_NAME STATUS ------------------------------ ------------------------------ ---------------- _SYSSMU12_3879543783$ UNDO_SMALL OFFLINE _SYSSMU11_4270384673$ UNDO_SMALL NEEDS RECOVERY _SYSSMU30_2482938352$ UNDO_TPFDA OFFLINE

3、利用pfile参数文件启动数据库

关闭数据库:shutdown immediate

创建pfile文件:create pfile '/home/oracle/pfile.ora' from spfile

修改pfile文件,添加以下参数

*.undo_management='Manual'

_corrupted_rollback_segments('_SYSSMU11_4270384673$')

启动数据库:startup pfile='/home/oracle/pfile.ora'

4、删除状态为needs Recovery的segment

drop rollback segment ‘_SYSSMU11_4270384673$’

5、重启数据库并删除undo表空间

drop tablespace UNDO_SMALL

Oracle将需要回滚的数据当作已经提交的数据,为了避免随后出现不可预测的问题,在重起数据库去掉隐藏参数后,应该导出数据,并建立新库,将源数据导入。

对于没有启动的数据库,可以通过Linux操作系统命令stringssystem表空间的数据文件中获取回滚段信息。对于windows环境下的Oracle,可以将数据文件通过ftp,拷贝到linux系统中,然后执行strings命令:strings system01.dbf | grep _SYSSMU

相关知识:
    声明:为了更好的使读者能够明白与主题相关内容,特别引用http://www.askmaclean.com/archives/ora-00600-4000-ora-00704-bootstrap-process-failure.html  内容,在此表示感谢maclean!
     _CORRUPTED_ROLLBACK_SEGMENTS(corrupted undo segment list)隐藏参数所独有的功能:

  • 在实例启动startup并open database的阶段_CORRUPTED_ROLLBACK_SEGMENTS所列出的undo segments(撤销段/回滚段)将不会被访问读取
  • 所有指向这些被_CORRUPTED_ROLLBACK_SEGMENTS列出的undo segments的事务都被认为已经提交了commit,和这个undo segments已经被drop时类似
    • 这将导致严重的逻辑讹误
    • 如果数据字典上有活跃事务那么将更糟糕,数据字典逻辑讹误会造成数据库管理问题
    • 如果bootstrap自举核心对象有活跃事务,那么将无法忽略错误ORA-00704: bootstrap process failure错误,导致无法强制打开数据库
  • 衷心地建议用_CORRUPTED_ROLLBACK_SEGMENTS这个参数打开数据库后导出数据并重建数据库,这个参数使用的后遗症可能很顽固
  • Oracle公司内部有叫做TXChecker的工具可以检查问题事务

_offline_rollback_segments 和 _corrupted_rollback_segments 均会造成的实例行为变化:

  • 以上2个参数所列出的Undo Segments(撤销段/回滚段)将不会被在线使用online
  • 在UNDO$数据字典基表中将体现为OFFLINE的记录
  • 在实例instance的生命周期中将不会再给新的事务分配使用
  • 参数所列出的Undo Segments列表上的活跃事务active transaction将即不被回滚亦不被标记为dead以便SMON去回滚(了解你所不知道的SMON功能(五):Recover Dead transaction)






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章