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
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
解决方案 »
- ORACLE同步数据 只将更新的数据同步
- 用户以sysdba身份登录看不到以normal身份建的表?
- LINUX下Oracle数据库磁盘规划要注意什么,我们用EVA4400
- 要做个在线考试系统,关于数据库结构的设置,请教一下大家
- 监听器无法启动
- 初来此地,向各位问好,同时请教一点基础问题!:)
- oracle下如何想数据库插入图片?
- oracle小问题!
- 新手问题:已知数据库用户,如何知道其权限和角色?如何知道当前数据库的状态(未加载、已加载还是打开)?
- 使用qt生成数据库表当生成到400多万行后数据库不再生成,也没有报错
- Oracle查询SQL2000某张表时,带过滤条件的语法怎么写?
- A question about oracle varray and nested table
2、如果不能删除,说明还有活动事务在上面,找到相应的事务,提交或回滚。
3、如果还不能删除,重启数据库再删除。
验证过程:
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 。。