我需要运行一个创建表查询,每次需要超过一个半小时,然后它会显示错误消息,如ora_01652:无法在表空间xyz中扩展临时段8192,我该如何修复它?
答案 0 :(得分:3)
首先,您可能需要alter session set resumable_timeout = 86400
。这将暂停查询,而不是让它简单地失败,让您有时间在情况发生时查看情况。正如@davek所提到的,你可能需要在某处添加空间。你需要弄清楚为什么它会占用这么多空间。
临时表空间主要用于排序和散列数据。例如,如果要对50GB表进行排序或散列连接,则需要大约50GB的临时表空间。正如@tbone建议的那样,一个非常糟糕的查询或执行计划可能会有一个交叉连接,试图创建一个不适合任何磁盘的大量结果集。确保您的联接正确并且执行计划看起来很清晰。要查找的一些内容是MERGE JOIN (CARTESIAN)
,或者如果有一些过滤器在散列或排序后应用而不是之前应用。如果计划不好,重新收集统计数据通常是很好的第一步。
如果查询和计划没有问题且您的空间不足,则需要以某种方式中断查询。这可以是多个插入而不是单个CTAS。打破查询通常是一个坏主意,但在资源稀缺的极少数情况下是必要的。或者您可能希望使用partition-wise joins来减少所需的空间量。
答案 1 :(得分:1)
您的磁盘已满(或几乎已满),或者您无权扩展相关的表空间。