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