1

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

4

2 回答 2

3

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

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

如果查询和计划都正常,而您只是没有足够的空间,那么您需要以某种方式分解查询。这可以是多个插入而不是单个 CTAS。分解查询通常是一个坏主意,但在资源稀缺的极少数情况下是必要的。或者您可能想考虑使用分区连接来减少所需的空间量。

于 2013-10-16T17:07:41.760 回答
1

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

于 2013-10-16T14:15:45.363 回答