`

重建UNDO表空间遭遇ORA-01548

阅读更多


今天开发那边的一套数据库的undo表空间不知道被谁设置成了自动扩展,然后所谓的屋漏偏逢连夜雨的是,开发人员今天跑了一个很大的事物,然后直接后果就是undo表空间不断被扩展,直到把文件系统写爆了。没办法得把undo表空间删了重建以回收空间啊。安装常规的操作:

先新建一个新的undo表空间:

create undo tablespace tmpundo datafile '/soft/Oracle/oradata/sitjf/tmpundo01.dbf'size 1g autoextend off;

把新建的undo表空间设置为默认undo表空间:

alter system set undo_tablespace=tmpundo;

接下来就是删除原有undo表空间undotbs1了,但是我发现我悲剧了,删除报错:

SQL> DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES;
CREATE UNDO TABLESPACE UNDOTBS1 DATAFILE '/soft/oracle/oradata/sitjf/undotbs01.dbf' SIZE 1G AUTOEXTEND OFF;
DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES
*
ERROR at line 1:
ORA-01548: active rollback segment '_SYSSMU1_2181731349$' found, terminate
dropping tablespace

尝试过重启数据库,依然无效,尝试删除数据文件后,依然是报错:

SQL>  ALTER DATABASE  DATAFILE '/soft/oracle/oradata/sitjf/undotbs01.dbf' OFFLINE DROP;
Database altered.



最后弄的没办法了,还是Google一下吧,于是参照Google上的解决方法顺利的处理了:

1、修改init$ORACLE_SID.ora参数文件,为:

undo_management=manual
undo_retention=10800
undo_tablespace=tmpundo
_CORRUPTED_ROLLBACK_SEGMENTS = (_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$,_SYSSMU1_2181731349$)

及,把undo修改为手动管理,并把默认undo表空间设置为新建的临时过渡undo表空间tmpundo。

最重要的是_CORRUPTED_ROLLBACK_SEGMENTS参数,改参数Oracle会假设事务已经回滚,而不会进行其他的检查。一般UNDO表空间丢失或损害的时候可以尝试使用这个隐含参数。

然后以init$ORACLE_SID.ora参数文件启动数据库

SQL> startup force pfile='?/dbs/initsitjf.ora'
ORACLE instance started.


Total System Global Area 3423965184 bytes
Fixed Size                  2211584 bytes
Variable Size            1761607936 bytes
Database Buffers         1644167168 bytes
Redo Buffers               15978496 bytes
Database mounted.
Database opened.

现在就可以删除undotbs1表空间了

SQL> drop tablespace undotbs1 including contents and datafiles;
Tablespace dropped.

然后重建undotbs1表空间
SQL> create undo tablespace undotBS1 datafile '/soft/oracle/oradata/sitjf/undotbs01.dbf' size 100M ;
Tablespace created.

重新修改undo表空间为自动管理,并且设置默认undo表空间为undotbs1,通过init参数修改。

undo_management=auto
undo_retention=10800
undo_tablespace=undotbs1

重启数据库,现在就可以删除过渡undo表空间tmpundo了:

SQL> drop tablespace tmpundo including contents;
Tablespace dropped.

现在空间已经回收了,undo表空间也被收缩了。



注:

也可以使用drop rollback命令来删除回滚段_SYSSMU1_2181731349$,undo表空间必须为manual管理方式

DROP ROLLBACK SEGMENT "_SYSSMU1_2181731349$";

查看回滚段

SELECT SEGMENT_NAME, OWNER, TABLESPACE_NAME, STATUS FROM DBA_ROLLBACK_SEGS;
  • 大小: 51.6 KB
分享到:
评论

相关推荐

    ORA-00600【4194】.pdf

    Oracle 错误处理 - ORA-...本文讨论了 Oracle 错误代码 ORA-00600[4194] 的处理方法,以及相关的知识点,例如隐含参数、Undo 表空间、ORA-00600 错误处理、Oracle 参数文件、Oracle 启库和关闭、Oracle 表空间管理。

    断电与ORA-600问题集

    2. **重建UNDO表空间:** 如果问题仍然存在,可以考虑重建整个UNDO表空间。 #### 1.7. 其他问题 ##### 1.7.1. ORA-00600[kcratr1_lostwrt] ORA-00600[kcratr1_lostwrt]错误通常发生在数据库试图写入控制文件时失败...

    undo表空间恢复

    4. **调整参数和设置**:如果undo表空间出现问题,可能需要调整数据库参数文件(如init.ora)中的某些参数,例如`*_allow_resetlogs_corruption`和`*_corrupted_rollback_segments`来允许特定的恢复操作。...

    脚本-Oracle释放过度使用的Undo表空间

    ### 关于Oracle释放过度使用的Undo表空间的知识点 在Oracle数据库管理中,Undo表空间扮演着极其重要的角色。它主要用于存储事务处理过程中产生的Undo记录,这些记录对于事务回滚、一致性读取以及恢复操作至关重要。...

    oracle 收缩undo表空间

    ### Oracle收缩Undo表空间 #### 一、概述 在Oracle数据库管理中,有时需要对Undo表空间进行管理和优化。特别是当Undo表空间因为历史数据积累而变得过大时,可能会影响数据库性能。本文将详细介绍如何通过新建一个...

    oracle10g服务器断电恢复

    - 创建新的 undo 表空间并删除旧的,但在删除时由于 ora-01548 错误,发现仍有基于旧 undo 表空间的活动事务。 5. **进一步处理**: - 为消除回滚段中的活动事务,需要在 pfile 中配置手动 undo 管理,设置 undo_...

    Oracle的Temp表空间和UNDO表空间的处理

    修改初始化参数文件(init.ora),设置`UNDO_TABLESPACE`参数为新创建的UNDO表空间名称,然后重启数据库。 ##### 步骤三:删除旧的UNDO表空间 确认所有事务都已完成,并确保没有事务依赖于旧的UNDO表空间后,可以...

    oracle 9i UNDO表空间数据文件丢失恢复

    ### Oracle 9i UNDO 表空间数据文件丢失恢复知识点详解 #### 一、概述 在Oracle数据库管理中,UNDO表空间是非常重要的组成部分之一,主要用于存储事务处理期间的回滚信息。当UNDO表空间的数据文件丢失时,可能会...

    地震前兆Oracle数据库UNDO表空间持续增长修复.pdf

    Oracle数据库在面对UNDO表空间持续增长的问题时,通常涉及到一系列复杂的故障排查和修复步骤。在本案例中,问题源于一次存储阵列故障,导致数据库出现异常,使得UNDO表空间持续增长。UNDO表空间在Oracle数据库中主要...

    undo-----router os 小秘技.doc

    undo-----router os 小秘技

    数据库undo表空间问题集锦

    在Oracle数据库系统中,"undo表空间"是一个至关重要的组成部分,它主要负责存储事务的回滚(rollback)信息。本文将深入探讨undo表空间的概念、作用、管理以及常见问题的处理,帮助你全面理解并有效地解决数据库undo...

    oracle错误及解决方法

    - **ORA-01555:快照过旧**:考虑增大_undo表空间或者优化查询以减少回滚段的使用。 - **ORA-27037:无法打开文件**:检查文件路径、权限或磁盘空间。 - **ORA-01405:不能检索隐藏列**:确保没有尝试访问不应...

    Oracle 数据库常见问题诊断方法

    - 可以考虑删除回滚段所在表空间,并取消 UNDO 事务。 ##### 1.4 ORA-0165x - **特征**: - 表空间没有足够的空间供分配。 - **原因**: - 表空间已满。 - 存储参数不合理,比如 `NEXT` 参数设置过小。 - 表...

    Oracle中重做undo表空间

    在Oracle数据库系统中,"重做undo表空间"是一个至关重要的概念,它是数据库事务处理的基础。Undo表空间是用来存储事务撤销操作时所需信息的地方,这些信息被称为重做日志(Redo Log)。当一个事务对数据进行修改时,...

    [Oracle] 浅析令人抓狂的ORA-01555问题

    - **Undo太小**:Undo表空间的大小不足是触发ORA-01555的一个常见原因。如果Undo表空间不足以存储所有需要回滚的信息,或者保留的时间不够长,就可能导致前镜像被过早地清除。解决方案包括增加Undo表空间的大小,并...

    管理undo表空间全面分析详解

    ### 管理undo表空间全面分析详解 #### 一、引言 在Oracle数据库管理中,`undo表空间`的管理是一项至关重要的任务。它不仅关乎数据的一致性和完整性,还直接影响到数据库的性能。本文将从DML语句与undo的关系入手,...

    相克军 ORACLE 讲座 深度剖析UNDO段 笔记.doc

    UNDO表空间用来存放改变前的旧值。里面也有段区块,ORACLE自动建立生成、自动使用UNDO段。 作为高级别的DBA是需要知道ORACLE如何使用UNDO段的。 1 Undo表空间及管理方式 ORACLE开始一个事务的时候,会用到表空间。...

    收缩Oracle数据库的undo表空间

    演示如何收缩Oracle数据库的undo表空间

Global site tag (gtag.js) - Google Analytics