【问题标题】:ORA-01652: unable to extend temp segment by 128 in tablespace TEMP error while using DBMS_RANDOM.VALUEORA-01652: 使用 DBMS_RANDOM.VALUE 时无法在表空间 TEMP 错误中将临时段扩展 128
【发布时间】: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 表有哪些常用列?

标签: sql oracle


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 2014-10-10
  • 1970-01-01
  • 2017-07-01
相关资源
最近更新 更多