【问题标题】:ORA-01652 Unable to extend temp segment by in tablespaceORA-01652无法在表空间中扩展临时段
【发布时间】:2012-08-07 05:06:34
【问题描述】:

我正在创建一个类似的表

create table tablename
as
select * for table2

我收到了错误

ORA-01652 Unable to extend temp segment by in tablespace

当我用谷歌搜索时,我通常会发现 ORA-01652 错误显示一些值,例如

Unable to extend temp segment by 32 in tablespace

我没有得到任何这样的值。我运行了这个查询

select 
   fs.tablespace_name                          "Tablespace", 
   (df.totalspace - fs.freespace)              "Used MB", 
   fs.freespace                                "Free MB", 
   df.totalspace                               "Total MB", 
   round(100 * (fs.freespace / df.totalspace)) "Pct. Free" 
from 
   (select 
      tablespace_name, 
      round(sum(bytes) / 1048576) TotalSpace 
   from 
      dba_data_files 
   group by 
      tablespace_name 
   ) df, 
   (select 
      tablespace_name, 
      round(sum(bytes) / 1048576) FreeSpace 
   from 
      dba_free_space 
   group by 
      tablespace_name 
   ) fs 
where 
   df.tablespace_name = fs.tablespace_name; 

取自:Find out free space on tablespace

我发现我当前使用的表空间有大约 32Gb 的可用空间。我什至尝试创建像

这样的表
create table tablename tablespace tablespacename
as select * from table2 

但我又遇到了同样的错误。谁能给我一个想法,问题出在哪里以及如何解决。供您参考,select 语句将获取 40,000,000 条记录。

【问题讨论】:

  • 数据文件满了吗?

标签: oracle10g tablespace


【解决方案1】:

我找到了解决方案。有一个名为 TEMP 的临时表空间,由数据库在内部用于不同、连接等操作。由于我的查询(有 4 个连接)获取了近 5000 万条记录,因此 TEMP 表空间没有那么多空间来占用所有数据。因此,即使我的表空间有可用空间,查询也会失败。因此,在增加 TEMP 表空间的大小后,问题得到了解决。希望这可以帮助有同样问题的人。谢谢:)

【讨论】:

  • 可以帮助的另一种方法是检查是否有不需要太多临时空间的查询的替代计划 - 例如通过避免排序或合并。当然,这并不总是容易或可能的。
  • 如果您想知道如何缩小 TEMP 表空间以适应数据,请参阅这个很好的答案:stackoverflow.com/a/1878732/210114
【解决方案2】:

通过运行以下命令创建一个新的数据文件:

alter tablespace TABLE_SPACE_NAME add datafile 'D:\oracle\Oradata\TEMP04.dbf'            
   size 2000M autoextend on;

【讨论】:

    【解决方案3】:

    您不需要创建新的数据文件;您可以扩展现有的表空间数据文件。

    执行以下命令来确定现有表空间的文件名:

      SELECT * FROM DBA_DATA_FILES;
    

    然后按如下方式扩展数据文件的大小(将文件名替换为上一个查询中的文件名):

      ALTER DATABASE DATAFILE 'D:\ORACLEXE\ORADATA\XE\SYSTEM.DBF' RESIZE 2048M; 
    

    【讨论】:

      【解决方案4】:

      我遇到了同样的错误消息,但由于我不是 dba,所以我无法访问像“dba_free_space”这样的表。我使用以前的一些答案来检查可用空间,但我仍然有很多空间。但是,尽可能减少全表扫描后。问题已经解决了。我的猜测是 Oracle 使用临时表来存储全表扫描数据。如果数据大小超过限制,它将显示错误。希望这可以帮助遇到同样问题的人

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-10
        • 2013-07-29
        • 1970-01-01
        • 1970-01-01
        • 2012-03-23
        • 1970-01-01
        相关资源
        最近更新 更多