ORA-30036: 无法在撤消表空间“UNDOTBS1”中将段扩展 8

5 oracle

由于执行涉及调用 pl/sql 过程和函数数量的插入和选择操作,我收到此错误。我没有得到确切的原因。我尝试优化查询,减少了获取行数并减少了插入行数。造成这种情况的确切原因是什么?

Dav*_*dge 3

UNDO 是存储将数据恢复到事务开始时的状态所需的更改向量的区域。

解决此问题的唯一方法是减少要更改的数据量(通过更改更少的数据或减小事务大小),或增加可用的撤消大小。

通过更频繁地提交来减少事务大小是有问题的,因为您仍然必须处理回滚已提交的事务,并且当数据库无法从撤消重建时,它还会引发快照太旧的错误与查询开始保持一致所需的数据。

因此,正如评论者所说,答案实际上是让 DBA 调整可用 UNDO 的大小。奇怪的是,他们可能不愿意这样做,或者至少不愿意充分这样做。如果您当前有 256MB 的 UNDO 并且您要求 2GB,他们可能会认为这是一个巨大的数量,在某种程度上可能是不可取的,并为您提供 1GB。对他们宽容地微笑,因为您已经将真正想要的数量增加了一倍,并且因为不存在过大 UNDO 表空间的情况。