我有一个存储过程执行非常大的更新。有时作业失败,错误为ORA-30036 Unable to extend segment by 8 in undo tablespace 'undotbs2'
但几个小时后,我们重新开始工作并顺利完成。
我查了一下,发现undotbs2已经将AUTOEXTENSIBLE设置为YES,大小为3 GB,所以我想撤销表空间已经有相当不错的尺寸了,并且已经开启了自动空间管理。
我的问题是,为什么在我们重新运行后它成功完成?是因为还有其他交易同时使用undotbs2吗?对于这个错误,Oracle提到"另一种方法是等待活动事务提交。",做"活动事务"引用除存储过程之外发生的其他事务/ sql?
Oracle版本为11.2.0.1.0
谢谢
答案 0 :(得分:3)
看起来您的UNDO表空间已到达MAXSIZE
。如果您与其他冗长的交易一起进行长期交易,则会发生这种情况。
Oracle使用UNDO表空间来保留交易发出ROLLBACK
后恢复数据所需的信息。也就是说,它的使用取决于在任何给定时刻有多少活动交易,以及每个活动交换的信息量。
表空间的最终用法/大小可以 - 正如您所经历的那样 - 非常随机。
解决方案可能是:
MAXSIZE
,以便它可以处理您的lenghty事务产生的信息量