解决Oracle的还原表空间UNDO写满磁盘空间的具体步骤(二)

2014-11-24 18:23:20 · 作者: · 浏览: 2
FLINE
49 _SYSSMU48$ UNDOTBS1 48 OFFLINE
50 _SYSSMU49$ UNDOTBS1 49 OFFLINE
51 _SYSSMU50$ UNDOTBS1 50 OFFLINE
52 _SYSSMU51$ UNDOTBS1 51 OFFLINE
53 _SYSSMU52$ UNDOTBS1 52 OFFLINE
54 _SYSSMU53$ UNDOTBS1 53 OFFLINE
55 _SYSSMU54$ UNDOTBS1 54 OFFLINE
56 _SYSSMU55$ UNDOTBS1 55 OFFLINE
57 _SYSSMU56$ UNDOTBS1 56 OFFLINE
58 _SYSSMU57$ UNDOTBS1 57 OFFLINE
59 _SYSSMU58$ UNDOTBS1 58 OFFLINE
60 _SYSSMU59$ UNDOTBS1 59 OFFLINE
61 _SYSSMU60$ UNDOTBS1 60 OFFLINE
62 _SYSSMU61$ UNDOTBS1 61 OFFLINE
63 _SYSSMU62$ UNDOTBS2 62 ONLINE
64 _SYSSMU63$ UNDOTBS2 63 ONLINE
65 _SYSSMU64$ UNDOTBS2 64 ONLINE
66 _SYSSMU65$ UNDOTBS2 65 ONLINE
67 _SYSSMU66$ UNDOTBS2 66 ONLINE
68 _SYSSMU67$ UNDOTBS2 67 ONLINE
69 _SYSSMU68$ UNDOTBS2 68 ONLINE


上面对应的UNDOTBS1还原表空间所对应的回滚段均为OFFLINE


9、删除原UNDO表空间


SQL> drop tablespace undotbs1 including contents and datafiles;


Tablespace dropped.


10、可以再次查看系统磁盘空间:
AIX系统:/> df -g (Linux系统: df -h)


如果需要规范数据库的表空间和路径,还原表空间名称undotbs1和路径不能改变,
可以安装刚才的步骤进行切换回来。
1、创建新的原来的UNDO表空间
可以在其它的磁盘空间临时创建还原表空间
SQL>
create undo tablespace undotbs1
datafile '/u01/app/oracle/undo/undotbs01.dbf'
size 10M autoextend on maxsize 15G;


刚开始为10M,设置自动扩展,最大为15GB


Tablespace created.


2、切换UNDO表空间为新的UNDO表空间


SQL> alter system set undo_tablespace=undotbs1 scope=both;
System altered.


3、验证当前数据库的还原表空间
SQL> show parameter undo


NAME TYPE VALUE
------------------------------------ ----------- --------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1


4、等待原UNDO表空间所有UNDO SEGMENT OFFLINE


select t.segment_name,t.tablespace_name,t.segment_id,t.status from dba_rollback_segs t;
SEGMENT_NAME TABLESPACE_NAME SEGMENT_ID STATUS


上面对应的UNDOTBS2还原表空间所对应的回滚段均为OFFLINE


5、删除UNDO2表空间


SQL> drop tablespace undotbs2 including contents and datafiles;


Tablespace dropped.



6、可以再次查看系统磁盘空间:
AIX系统:/> df -g (Linux系统: df -h)


undo_retention:指定事物commit后undo 将要保存的时间(秒),在ORACLE10g中默认的是900秒。


GUARANTEE : 保证undo_retention参数所设定的时间有效,这个是10g的新功能。


SQL> ALTER TABLESPACE undotbs1 RETENTION GUARANTEE;


SQL> ALTER TABLESPACE undotbs1 RETENTION NOGUARANTEE;


在没有guarantee的保证下,ORACLE并不能保证能够将undo信息存储900秒,如果undo表空间不足,那么ORACLE将忽略undo_retention的设置,直接覆盖掉以前的undo,这个时候有可能会产生ORA-01555错误。如果undo表空间空间足够,那么undo将会保存很长一段时间,直到undo表空间达到maxsize,这个时候才会覆盖undo信息,而且ORACLE会从最古老的undo信息开始覆盖。


ORACLE推荐我们将undo 表空间中的datafile 设定MAXSIZE ,不要让它一直自动扩展,如果ORACLE获得了自动扩展的能力,那么旧的undo不会被覆盖,到后来undo表空间会越来越大,越来越大,直到将磁盘空间耗尽。


在有guarantee的保证下,ORACLE将会保证undo信息能够保存到undo_retention设定的值之后才被覆盖,如果这个时候同时执行了很多事物,将undo表空间耗完了,那么那个事物会失败,会报ORA-30036 错误,所以使用guarantee一定要慎用,如果非要使用guarantee,那么尽量将undo 表空间设大 一点。


Oracle10g开始,如果你设置UNDO_RETENTION为0,那么Oracle启用自动调整以满足最长运行查询的需要。当然如果空间不足,那么Oracle满足最大允许的长时间查询,而不再需要用户手工调整。