【问题标题】:Unable to run a join of large tables in oracle 11g无法在 oracle 11g 中运行大表连接
【发布时间】:2021-10-07 10:52:27
【问题描述】:

我在 oracle 11g 中加入两个大表(每个 >30GB)时遇到困难
我收到错误 ORA-01652:无法在表空间 DBXTEMP 中将临时段扩展 128。

我尝试获取前 10,000 条加入的行,它可以工作,但是我们仍然在团队中使用 oracle 11g,它不允许运行 OFFSET,因为它是 oracle12+ 的一个功能。 Rownum 方法也不行。

有什么办法可以加入 2 个大表而不会遇到此错误?

【问题讨论】:

标签: sql oracle join oracle11g


【解决方案1】:

错误提示您没有足够的 TEMP 空间。如果您想要根本原因,您需要查看临时空间使用的来源。它可能来自(散列)连接,也可能是一种排序。 SQL Monitor 报告将为您确定。那么你也许可以解决这个问题。

当然,您可以简单地添加一些 TEMP 空间并完成它。

【讨论】:

    【解决方案2】:

    正如错误告诉您的那样,如果您想对这些大表执行操作,则需要向临时表空间 DBXTEMP 添加更多空间。

    【讨论】:

    • 你好,如果三个大表的连接说每个 >100 GB,我应该向临时表空间添加多少大小?
    • @jonas - 这取决于查询和查询计划以及占用所有 TEMP 空间的内容。没有一般准则。
    【解决方案3】:

    您最初的问题似乎是:“我在将 oracle 11g 中的大型数据库中的数据导入 Couchbase 时遇到了困难。

    想到三个解决方案

    1. 您可以使用 rowid,但需要将其作为子选择中的选定字段向上传播

       select t.*, mod(rn,5) as num from (select t.*, rownnum rn
         from t
        ) t;
      

      然后只需添加一个 where 子句,如“mod(rn,5) = 0”,并运行五次。 或者使用限制和偏移量。

    2. 将各个未连接的表加载到 Couchbase 中,然后您可以使用 N1QL 来连接它们。

    3. 将各个未连接的表格加载到 Couchbase 中,然后您可以使用 Eventing Service 将它们快速连接到您的最终文档表单中。

    解决方案三 (3) 可以在没有索引的情况下工作,并且可以随时清理(从您要加入的“表”中删除行 [现在的文档]),因此不需要额外的空间。如果您想寻求 Eventing Function 解决方案,请通过 DM 与我联系。

    最好的

    乔恩·斯特拉巴拉 首席产品经理 - 服务器‌ Couchbase, Inc.

    【讨论】:

      猜你喜欢
      • 2015-02-15
      • 2021-10-18
      • 2011-12-21
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      • 1970-01-01
      相关资源
      最近更新 更多