解决删除undo表空间时的ORA-01548错误

今天有个同学碰到这个问题,帮他解决了下
它的undotbs1表空间有问题,想要删除它,碰到问题。
SQL> drop tablespace undotbs1 including contents and datafiles;
drop tablespace undotbs1 including contents and datafiles
*
ERROR at line 1:
ORA-01548: active rollback segment '_SYSSMU1_557037162$' found, terminate
dropping tablespace
数据文件的状态
SQL> select FILE#,STATUS,ENABLED,name from v$datafile;

     FILE# STATUS  ENABLED
---------- ------- ----------
NAME
--------------------------------------------------------------------------------
         1 SYSTEM  READ WRITE
/u01/app/oracle/oradata/PROD1/system01.dbf

         2 ONLINE  READ WRITE
/u01/app/oracle/oradata/PROD1/sysaux01.dbf

         3 RECOVER READ WRITE
/u01/app/oracle/oradata/PROD1/undotbs01.dbf


     FILE# STATUS  ENABLED
---------- ------- ----------
NAME
--------------------------------------------------------------------------------
         4 ONLINE  READ WRITE
/u01/app/oracle/oradata/PROD1/example01.dbf

         5 ONLINE  READ WRITE
/u01/app/oracle/oradata/PROD1/users01.dbf

         6 ONLINE  READ WRITE
/u01/app/oracle/oradata/PROD1/datafile/o1_mf_test05_dbqconro_.dbf


     FILE# STATUS  ENABLED
---------- ------- ----------
NAME
--------------------------------------------------------------------------------
         7 ONLINE  READ WRITE
/u01/app/oracle/oradata/PROD1/test07.dbf

undotbs01.dbf文件是有问题的,可是他没有备份。
show一下undo的参数
SQL> show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     18000
undo_tablespace                      string      UNDOTBS3
默认的undo表空间是UNDOTBS3了,而undotbs01.dbf是undotbs01表空间的数据文件。
按理应该能删啊。

解决方法:
加入或修改以下参数
vi /u01/app/oracle/product/11.2.0/dbhome_1/dbs /initORCL.ora
undo_management=manual
undo_retention=10800
undo_tablespace=undotBS3
_CORRUPTED_ROLLBACK_SEGMENTS = (_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$,_SYSSMU1_557037162$)
启用静态参数文件启动
startup pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs /initORCL.ora'
删除之前删除不了的表空间
drop tablespace undotbs1 including contents;
到这步可见,表空间居然删除了
接着再把库关闭
shutdown immediate
修改静态参数文件
vi /u01/app/oracle/product/11.2.0/dbhome_1/dbs /initORCL.ora
undo_management=auto
undo_retention=10800
undo_tablespace=undotBS3
去除_CORRUPTED_ROLLBACK_SEGMENTS 参数
然后创建动态参数,打开数据库
sqlplus / as sysdba
create spflie from pfile
startup
这样就算全部完成啦!
请使用浏览器的分享功能分享到微信等