ORA-01548: active rollback segment XX found, terminate dropping tablespace
执行语句:
删除表空间报错误,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操作系统命令strings从system表空间的数据文件中获取回滚段信息。对于windows环境下的Oracle,可以将数据文件通过ftp,拷贝到linux系统中,然后执行strings命令:strings system01.dbf | grep _SYSSMU
_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)