删除undo表空间

mengyan_0808 2010-09-01 12:06:00


UNDOTB2为undo表空间下面的为添加的扩展表空间

UNDO_TB3 D:\ORACLE\PRODUCT\10.2.0\ORADATA\TAXDEV\
UNDO_TB5 E:\ORACLE\PRODUCT\10.2.0\ORADATA\TAXDEV\
UNDO_TB2 D:\ORACLE\PRODUCT\10.2.0\ORADATA\TAXDEV\
UNDOTBS01.DBF E:\ORACLE\PRODUCT\10.2.0\ORADATA\TAXDEV\
UNDO_TB31 E:\ORACLE\PRODUCT\10.2.0\ORADATA\TAXDEV\

新建立一个UNDOTB3 undo表空间,切换undo表空间


切换UNDO表空间
• 可以从使用一个UNDO 表空间切换到使用另一个UNDO表空间。 • 一次只能将一个UNDO 表空间分配给某个数据库。 • 一个例程中可以存在多个UNDO 表空间,但只能有一个处于活动状态。 • 使用ALTER SYSTEM 命令,可以在各个UNDO 表空间之间进行动态切换。

ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTB3;


删除UNDO表空间
• 使用DROP TABLESPACE 命令,可以删除UNDO 表空间。 DROP TABLESPACE UNDOTB2; • 某个UNDO 表空间只有在当前未由任何例程使用的时候才能被删除。 • 要删除活动的UNDO 表空间,请执行以下操作: – 切换到新的UNDO 表空间
ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTB3;

– 完成当前所有事务处理后,删除该表空间 要确定是否存在任何一个活动的事务处理,请使用以下查询:
SQL> SELECT a.name,b.status 2 FROM v$rollname a, v$rollstat b 3 WHERE a.name IN ( SELECT segment_name 4 FROM dba_segments 5 WHERE tablespace_name = 'UNDOTBS‘ ) 6 AND a.usn = b.usn;
查询结果为空。

状态为PENDING OFFLINE 的某个还原段仍包含活动的事务处理。如果查询没有返回任 何行,则表明所有事务处理均已完成,并且可以使用以下命令删除该表空间。

SQL> DROP TABLESPACE UNDOTB2;

删除提示 无法删除 undotb2下面的扩展表空间 UNDO_TB2

ORA-01548: 已找到活动回退段 '_SYSSMU6$', 终止删除表空间



求助如何:删除 UNDOTB2 在切换undotb3是 已经把undotb2状态变为挂起 offline
...全文
839 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mengyan_0808 2010-09-07
  • 打赏
  • 举报
回复
问题描述:ORA-01548: 已找到活动回退段'_SYSSMU1$',终止删除表空间 解决办法

该问题已经解决.解决步骤如下:


验证过程:
1 查看所有回滚段信息:
select segment_name,status,tablespace_name from dba_rollback_segs;
SEGMENT_NAME STATUS TABLESPACE_NAME
------------------------------ ---------------- ------------------------------
SYSTEM ONLINE SYSTEM
_SYSSMU1$ NEEDS RECOVERY UNDOTBS1
_SYSSMU2$ NEEDS RECOVERY UNDOTBS1
_SYSSMU3$ NEEDS RECOVERY UNDOTBS1
_SYSSMU4$ NEEDS RECOVERY UNDOTBS1
_SYSSMU5$ NEEDS RECOVERY UNDOTBS1
_SYSSMU6$ NEEDS RECOVERY UNDOTBS1
_SYSSMU7$ NEEDS RECOVERY UNDOTBS1
_SYSSMU8$ NEEDS RECOVERY UNDOTBS1
_SYSSMU9$ NEEDS RECOVERY UNDOTBS1
_SYSSMU10$ NEEDS RECOVERY UNDOTBS1
.....共计50行

已选择50行。
说明是有问题的。

--------------
处理过程
下面可以为系统创建新的UNDO表空间,并实现切换:

SQL>create undo tablespace UNDOTBS2 datafile 'D:oracleoradataPS30710UNDOTBS2.DBF' size 100m;
alter system set undo_tablespace=undotBS2;
drop tablespace undotbs1 including contents;(进行这部操作的时候会报下面的错):
ORA-01548: 已找到活动回退段'_SYSSMU1$',终止删除表空间

2 修改文件init.ora.162007221035,如下:
undo_management=manual
undo_retention=10800
undo_tablespace=undotBS2
_CORRUPTED_ROLLBACK_SEGMENTS =(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)



检查系统的回滚段信息,发现UNDOTBS1中的所有回滚段都需要恢复。在没有备份的情况下,只能尝试使用隐含参数将数据库打开,不过这个过程会破坏数据库的一致性,而且可能造成数据库出现逻辑错误。采用下面的方法打开数据库后,应该马上执行EXP备份,重建数据库后,再导入。

下面开始尝试恢复数据库,首先创建PFILE,并关闭数据库:

SQL> CREATE PFILE='F:INITTEST.ORA' FROM SPFILE;




FONT>

文件已创建。

SQL> SHUTDOWN IMMEDIATE数据库已经关闭。已经卸载数据库。
ORACLE 例程已经关闭。

手工编辑PFILE,修改UNDO_MANAGEMENT为MANUAL,并添加隐含参数--我的添加了50个
_OFFLINE_ROLLBACK_SEGMENTS=(_SYSSMU1$,_SYSSMU2$,……_SYSSMU10$):

*.undo_management='MANUAL'
_offline_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)

下面重起数据库:

SQL> STARTUP startup pfile='D:oracleadminPS30710pfileinit.ora.421200715439'
ORACLE 例程已经启动。

Total System Global Area 76619308 bytes
Fixed Size 454188 bytes
Variable Size 50331648 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes数据库装载完毕。数据库已经打开。

【由于设置了隐含参数,现在可以删除回滚段了:

SQL> DROP ROLLBACK SEGMENT "_SYSSMU1$";

回退段已删除。

SQL> DROP ROLLBACK SEGMENT "_SYSSMU2$";

回退段已删除。

SQL> DROP ROLLBACK SEGMENT "_SYSSMU3$";

回退段已删除。

SQL> DROP ROLLBACK SEGMENT "_SYSSMU4$";

回退段已删除。

SQL> DROP ROLLBACK SEGMENT "_SYSSMU5$";

回退段已删除。

SQL> DROP ROLLBACK SEGMENT "_SYSSMU6$";

回退段已删除。

SQL> DROP ROLLBACK SEGMENT "_SYSSMU7$";

回退段已删除。

SQL> DROP ROLLBACK SEGMENT "_SYSSMU8$";

回退段已删除。

SQL> DROP ROLLBACK SEGMENT "_SYSSMU9$";

回退段已删除。

SQL> DROP ROLLBACK SEGMENT "_SYSSMU10$";

回退段已删除。


下面就可以删除UNDOTBS1表空间了:-----我的直接把UNDOTB01去掉,改变后缀 重启后没有报错,

***********************************************
下面的表为UNDOTB2的原扩展表空间

UNDO_TB3 D:\ORACLE\PRODUCT\10.2.0\ORADATA\TAXDEV\
UNDO_TB5 E:\ORACLE\PRODUCT\10.2.0\ORADATA\TAXDEV\
UNDO_TB2 D:\ORACLE\PRODUCT\10.2.0\ORADATA\TAXDEV\
UNDOTBS01.DBF E:\ORACLE\PRODUCT\10.2.0\ORADATA\TAXDEV\
UNDO_TB31 E:\ORACLE\PRODUCT\10.2.0\ORADATA\TAXDEV\

***************************************************

SQL> DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES;

表空间已丢弃。

表空间删除后,通过重起来去掉加载的隐含参数。至此,恢复操作告一段落:

SQL> SHUTDOWN IMMEDIATE数据库已经关闭。已经卸载数据库。
ORACLE 例程已经关闭。
SQL> STARTUP
ORACLE 例程已经启动。

Total System Global Area 76619308 bytes
Fixed Size 454188 bytes
Variable Size 50331648 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes数据库装载完毕。数据库已经打开。
SQL> SHOW PARAMETER UNDO


好了 ,该问题已经解决,方法是加入隐含参数修改init 。。
tangren 2010-09-01
  • 打赏
  • 举报
回复
1、如果没有事务,可以过undo_retention指定的时间来删除。
2、如果不能删除,说明还有活动事务在上面,找到相应的事务,提交或回滚。
3、如果还不能删除,重启数据库再删除。
luoyoumou 2010-09-01
  • 打赏
  • 举报
回复
-- 重启动一下数据库,再删除原来的undo 表空间,这样试试呢?

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧