love wife love life —Roger的Oracle/MySQL数据恢复博客

Phone:18180207355 提供专业Oracle/MySQL数据恢复、性能优化、迁移升级、紧急救援等服务

手工清除回滚段的几种方法

本站文章除注明转载外,均为本站原创: 转载自love wife love life —Roger的Oracle/MySQL数据恢复博客

本文链接地址: 手工清除回滚段的几种方法

在某些情况下,我们需要手动去清除一些有问题的回滚段,如果该回滚段中
包含活动事务,那么使用正常的方式将无法drop,所以此时你drop undo tablespace 也将失败。
可能就会遇到如下的错误:

下面介绍几种方法:

####### 方法1 用隐含参数

用如下隐含参数:

_offline_rollback_segments=(_SYSSMU9$)
_corrupted_rollback_segments=(_SYSSMU9$)


这里可能有人会问上面的_undo_debug_mode参数为啥不管用?其实不是没效果,
是针对这种情况下,没用而已,对于自动undo管理模式,可以使用该参数来手工
删除某个回滚段,前提是该回滚段无活动事务。


######## 方法2 通过更改数据字典表来删除回滚段和undo tablespace


简单的总结下,其实我们只要通过如下步骤就能轻易的删除:
1. 将回滚段更改为临时段
2. 重启实例
3. 从seg$中删除记录
4. 从undo$中删除记录

需要注意一下的是,如果不使用hcheck.full 那么直接drop tablespace可能遇到如下错误:


########## 方法3 使用bbed 修改元数据


下面我们通过bbed来修改元数据,也就是直接修改回滚段的状态,将其修改为offline。

5 Responses to “手工清除回滚段的几种方法”

  1. Dave Says:

    不错,转帖过来。

  2. Rongshiyuan Says:
  3. 手工清除回滚段的几种方法 - Oracle - 开发者第994646个问答 Says:

    […] 原文链接:http://www.killdb.com/?p=196 […]

  4. xccheese Says:

    bbed修改是比较简单 只要把状态改成2就行了

  5. roger Says:

    SQL> startup mount
    ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
    ORACLE instance started.

    Total System Global Area 1573527552 bytes
    Fixed Size 1344420 bytes
    Variable Size 721423452 bytes
    Database Buffers 838860800 bytes
    Redo Buffers 11898880 bytes
    Database mounted.
    SQL> alter database datafile 6 offline drop;

    Database altered.

    SQL> alter database open;

    Database altered.

    SQL> DROP tablespace undotbs including contents AND datafiles;
    DROP tablespace undotbs including contents AND datafiles
    *
    ERROR at line 1:
    ORA-01548: active rollback segment ‘_SYSSMU13_14654527$’ found, terminate dropping tablespace

    前面必须加个offline drop的步骤。有点问题

Leave a Reply

You must be logged in to post a comment.