如何修复ora-01652

时间:2013-10-16 14:14:07

标签: oracle temp segment

我需要运行一个创建表查询,每次需要超过一个半小时,然后它会显示错误消息,如ora_01652:无法在表空间xyz中扩展临时段8192,我该如何修复它?

2 个答案:

答案 0 :(得分:3)

首先,您可能需要alter session set resumable_timeout = 86400。这将暂停查询,而不是让它简单地失败,让您有时间在情况发生时查看情况。正如@davek所提到的,你可能需要在某处添加空间。你需要弄清楚为什么它会占用这么多空间。

临时表空间主要用于排序和散列数据。例如,如果要对50GB表进行排序或散列连接,则需要大约50GB的临时表空间。正如@tbone建议的那样,一个非常糟糕的查询或执行计划可能会有一个交叉连接,试图创建一个不适合任何磁盘的大量结果集。确保您的联接正确并且执行计划看起来很清晰。要查找的一些内容是MERGE JOIN (CARTESIAN),或者如果有一些过滤器在散列或排序后应用而不是之前应用。如果计划不好,重新收集统计数据通常是很好的第一步。

如果查询和计划没有问题且您的空间不足,则需要以某种方式中断查询。这可以是多个插入而不是单个CTAS。打破查询通常是一个坏主意,但在资源稀缺的极少数情况下是必要的。或者您可能希望使用partition-wise joins来减少所需的空间量。

答案 1 :(得分:1)

您的磁盘已满(或几乎已满),或者您无权扩展相关的表空间。