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
解决方案 »
- 使用loader 为什么第一行的数据导不进去表中?
- 弱弱的问一句 oracle 如何将数字转换成百分比!
- 请教高手,优化sql!!
- 请教一下:如果将系统时间精确到毫秒,谢谢!
- sqlldr使用问题,在线等待中...
- 我在查找数据库对象中找不着创建成功的表,但是TableSpace Map里却能看到,但不能修改属性.
- 一個TRIGGER的問題
- 什么是“监听器”?
- Is there any limitation of datafile size and tablespace size in Oracle8.0.5
- oracle 查询
- 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 。。