ORA-01652: 使用 DBMS_RANDOM.VALUE 时无法在表空间 TEMP 错误中将临时段扩展 128

Posted

技术标签:

【中文标题】ORA-01652: 使用 DBMS_RANDOM.VALUE 时无法在表空间 TEMP 错误中将临时段扩展 128【英文标题】:ORA-01652: unable to extend temp segment by 128 in tablespace TEMP error while using DBMS_RANDOM.VALUE 【发布时间】:2018-10-28 15:00:10 【问题描述】:

下面是我的 sql 查询。在这里,我使用 DBMS_RANDOM.VALUE 过滤来自 2 个不同表的 2 组数据。 Oracle SQL 加载时间很长,并抛出以下错误。我尝试搜索相同的错误。但答案并不能解决我的问题。请让我知道是否有任何其他方法可以达到结果。

select * from (select ac.account, ph.phone_no
from account ac, phone ph
and ac.account_status = 'OPEN'
and ac.account_type ='1'             
and ac.account_sub_type ='2'
and ac.account = ph.phone_account
order by DBMS_RANDOM.VALUE)
where rownum = '1';

我看到 ORA-01652:无法在表空间 TEMP 中将临时段扩展 128 错误。每次运行查询时,我都需要从帐户和电话表中获取随机帐户和相应的 phone_no。

编辑:从上面的查询中,我需要从帐户表和电话号码表中随机选择一组帐号和电话号码。请注意,帐号来自 account 表,电话号码来自 phone 表。

示例输出只是 1 个帐号和一个电话号码。例如:123456 1234567890

编辑 2:有时它可以工作,但加载一组数据大约需要 40-60 分钟,这对于我的自动化测试用例来说是非常不切实际的。需要更好的选择。

【问题讨论】:

编辑您的问题并解释您想要做什么。样本数据和期望的结果会有所帮助。 ROWNUM 是一个数字,而不是一个字符串。 是我遗漏了什么,还是您只是将表格帐户和电话组合在一起而不加入它们?错误本身只是意味着 oracle 需要比现在可用的更多临时空间,这表明您的查询为数据库创建了相当多的工作。如果可能,请查看查询执行计划并优化查询。该错误不是您的根本问题,它只是昂贵查询的症状。 完成;请看一下。谢谢戈登... @DirkTrilsbeek 是正确的。您的查询生成笛卡尔连接(表 A 中的所有行都连接到表 B 中的所有行)。 ACCOUNTPHONE 表有哪些常用列? 【参考方案1】:

据我所知,这种情况下的连接和随机化在运行时会动态消耗大量内存。您应该在某些条件下限制您的加入,或者将 Dbms_Random.value 设置为受限,因为它超出了临时空间作为错误本身。

【讨论】:

如何限制 DBMS_RANDOM.VALUE? 如果你可以写在 where 子句 Dbms_Random.value 谢谢 Himanshu。我的最终查询是这样的; 'select * from (select ac.account, ph.phone_no from account ac, phone ph and ac.account_status = 'OPEN' and ac.account_type ='1' and ac.account_sub_type ='2' and DBMS_RANDOM.VALUE 太棒了?@sandeep hegde

以上是关于ORA-01652: 使用 DBMS_RANDOM.VALUE 时无法在表空间 TEMP 错误中将临时段扩展 128的主要内容,如果未能解决你的问题,请参考以下文章

ORA-01652 从游标获取时出错

ORA-01652:无法通过128(在表空间ZLTOOLSTMP中)扩展 temp 段

oracle暂时表空间 ORA-01652:无法通过16(在表空间XXX中)扩展 temp 字段

如何在 Oracle 中对两个远程表之间的数据进行部分比较以避免 ORA-01652

Pentaho Spoon 转换抛出:ORA-01652:无法在表空间 TEMP 中将临时段扩展 128

ORA-01652: 无法在表空间 TEMP 中将临时段扩展 128,但有 500GB 可用