ORA-01652无法在表空间中扩展临时段

Nir*_*lam 25 oracle10g tablespace

我正在创建一个像

create table tablename
as
select * for table2
Run Code Online (Sandbox Code Playgroud)

我收到了错误

ORA-01652 Unable to extend temp segment by in tablespace
Run Code Online (Sandbox Code Playgroud)

当我用Google搜索时,我经常发现ORA-01652错误显示有些值

Unable to extend temp segment by 32 in tablespace
Run Code Online (Sandbox Code Playgroud)

我没有得到任何这样的价值.我跑了这个查询

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; 
Run Code Online (Sandbox Code Playgroud)

取自:找出表空间的可用空间

我发现我目前使用的表空间大约有32Gb的可用空间.我甚至试过创建表格

create table tablename tablespace tablespacename
as select * from table2 
Run Code Online (Sandbox Code Playgroud)

但我又得到了同样的错误.任何人都可以给我一个想法,问题在哪里以及如何解决它.为了您的信息,select语句将获取40,000,000条记录.

Nir*_*lam 37

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

  • *可以*帮助的另一种方法是检查是否存在不需要如此多临时空间的查询的替代计划 - 例如通过避免排序或合并.当然,并非总是容易或可能. (4认同)

小智 6

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

alter tablespace TABLE_SPACE_NAME add datafile 'D:\oracle\Oradata\TEMP04.dbf'            
   size 2000M autoextend on;
Run Code Online (Sandbox Code Playgroud)