Welcome 微信登录

首页 / 数据库 / MySQL / 重建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;ORA-15064 错误解决Oracle 11.2.0.3在非Exadata环境禁掉了diskmon服务相关资讯      undo  Orace错误代码 
  • Oracle 11g undo_retention 以及  (05月28日)
  • undo表空间使用率  (07/23/2015 16:29:56)
  • undo表空间概述  (02/24/2015 20:32:43)
  • Oracle中利用undo进行数据的恢复操  (11/27/2015 09:31:30)
  • undo表空间修复小结  (07/08/2015 08:43:13)
  • Oracle 11gR2 Database UNDO表空间  (01/29/2015 11:30:59)
本文评论 查看全部评论 (0)
表情: 姓名: 字数