当前位置:操作系统 > Unix/Linux >>

ORA-01548: active rollback segment XX found, terminate dropping tablespace

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)
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,