Oracle Undo表空间

Posted on 2008-06-03 11:56 sdl 阅读(2068) 评论(2)  编辑  收藏 所属分类: Oracle
    在开发过程中遇到这样一个问题:
    2008-06-02 16:29:23,262 WARN [org.hibernate.util.JDBCExceptionReporter] SQL Error: 30036, SQLState: 99999
2008-06-02 16:29:23,263 ERROR [org.hibernate.util.JDBCExceptionReporter] ORA-30036: unable to extend segment by 1024 in undo tablespace 'UNDOTBS2'
后来查资料才发现是Undo表空间的问题。查看了一下Undo表空间剩的空间已经很少了。这种问题解决方法如下:

    


UNDO表空间用于存放UNDO数据,当执行DML操作(INSERT,UPDATE和DELETE)时,oracle会将这些操作执行前的旧数据写入到UNDO段,在oracle9i之前,管理UNDO数据时使用(Rollback Segment)完成的.从oracle9i开始,管理UNDO数据不仅可以使用回滚段,还可以使用UNDO表空间.因为规划和管理回滚段比较复杂,所有oracle database 10g已经完全丢弃用回滚段.并且使用UNDO表空间来管理UNDO数据.

1:查看所有的Undo表空间

SELECT * FROM dba_tablespaces where contents='UNDO'


2:Undo大小计算公式:

SELECT ((UR * (UPS * DBS)) + (DBS * 24))/1048576 AS "MB"
FROM (SELECT value AS UR
FROM v$parameter
WHERE name = 'undo_retention'),
(SELECT (SUM(undoblks)/SUM
(((end_time-begin_time)*86400))) AS UPS
FROM v$undostat),
(SELECT value AS DBS
FROM v$parameter
WHERE name = 'db_block_size');
3:修改Undo表空间大小

 先删除原来的表空间:
 drop tablespace UNDOTBS2 including contents and datafiles
 再建立一个和原来名称一样的表空间
 create undo tablespace UNDOTBS2 datafile '/home/oracle/oradata/depsight/undotbs2.dbf' size 50m

Feedback

# re: Oracle Undo表空间  回复  更多评论   

2008-11-05 23:04 by rrr
兄弟,不对吧,UNDO段是循环使用的,Undo表空间剩的空间已经很少时,oracle可以循环使用的,出现以上的原因是UNDO表空间太小吧

# re: Oracle Undo表空间[未登录]  回复  更多评论   

2009-10-10 13:47 by dd
晕,不懂就不要写

只有注册用户登录后才能发表评论。


网站导航:
 

posts - 12, comments - 2, trackbacks - 0, articles - 0

Copyright © sdl