繁体   English   中英

11左外连接查询和Oracle错误

[英]11 Left Outer Join in a query and Oracle error

我必须为新报告创建一个sql查询。 问题是我必须做11个Left Outer Join !!! 哦,是的,这是不好的部分。 当我执行查询Oracle时,会产生此错误:

ORA-01652: unable to extend temp segment by 128 in tablespace TEMP
01652. 00000 -  "unable to extend temp segment by %s in tablespace %s"
*Cause:    Failed to allocate an extent of the required number of blocks for
           a temporary segment in the tablespace indicated.
*Action:   Use ALTER TABLESPACE ADD DATAFILE statement to add one or more
           files to the tablespace indicated.

我肯定会触发此错误,因为有很多方法要处理。 您有什么建议可以帮助我吗?

谢谢,瓦卢德

报告结果是否以任何方式汇总? 如果是这样,您可以将查询分为多个阶段并存储中间结果,而不必一次单击。 如果不查看查询本身,并且对域和需求没有基本的了解,将很难进一步提供帮助。

如果不是与聚合有关,则如nineside所提到的...

Oracle 9i及以下版本存在外部联接问题,尤其是哈希外部联接问题,这可能是相关的-直到10g table_a = table_b(+)的驱动表必须为table_a,这可能意味着有效的哈希联接在table_a小于table_b不会发生。 事实证明,替代方案通常是排序合并,这可能需要大量的临时存储。

解决方法可能是从三年前终止扩展支持的版本进行升级;)

检查您的临时表空间设置。 排序或哈希表所需的临时表空间通常与该表的段大小大致相同。 使用类似的查询找到这些数字:

select bytes/1024/1024/1024 GB, dba_segments.*
from dba_segments
where segment_name = '<table_name>';

然后将其与可用的临时表空间进行比较:

select free_space/1024/1024/1024 GB, dba_temp_free_space.*
from dba_temp_free_space;

如果要对大于临时空间的表进行排序或散列,最简单的解决方案可能是添加更多空间。

还要检查其他进程是否正在占用大量临时表空间。 假设块大小为8K:

select blocks * 8 * 1024 /1024/1024 MB, v$sort_usage.*
from gv$sort_usage;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM