ORA-30036间歇性地发生

时间:2015-04-30 15:47:14

标签: oracle oracle11g undo tablespace

我有一个存储过程执行非常大的更新。有时作业失败,错误为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

谢谢

1 个答案:

答案 0 :(得分:3)

看起来您的UNDO表空间已到达MAXSIZE。如果您与其他冗长的交易一起进行长期交易,则会发生这种情况。

Oracle使用UNDO表空间来保留交易发出ROLLBACK后恢复数据所需的信息。也就是说,它的使用取决于在任何给定时刻有多少活动交易,以及每个活动交换的信息量。

表空间的最终用法/大小可以 - 正如您所经历的那样 - 非常随机。

解决方案可能是:

  • 增加UNDO表空间的MAXSIZE,以便它可以处理您的lenghty事务产生的信息量
  • 修改您的实现,因此它会不时发出COMMITS,因此可以释放您的lenghty事务的UNDO信息。