我正在创建一个像
这样的表格create table tablename
as
select * for table2
我收到错误
ORA-01652 Unable to extend temp segment by in tablespace
当我用Google搜索时,我经常发现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条记录。
答案 0 :(得分:35)
我找到了解决方法。有一个名为TEMP的临时表空间,数据库在内部使用它来执行诸如distinct,join等操作。由于我的查询(有4个连接)获取了近5000万条记录,因此TEMP表空间没有足够的空间来占用所有数据。因此,即使我的表空间具有可用空间,查询也会失败。因此,在增加TEMP表空间的大小之后,问题得以解决。希望这可以帮助有同样问题的人。谢谢:))
答案 1 :(得分:6)
运行以下命令创建新数据文件:
alter tablespace TABLE_SPACE_NAME add datafile 'D:\oracle\Oradata\TEMP04.dbf'
size 2000M autoextend on;
答案 2 :(得分:2)
您不需要创建新的数据文件;您可以扩展现有的表空间数据文件。
执行以下操作以确定现有表空间的文件名:
SELECT * FROM DBA_DATA_FILES;
然后按如下方式扩展数据文件的大小(将文件名替换为上一个查询中的文件名):
ALTER DATABASE DATAFILE 'D:\ORACLEXE\ORADATA\XE\SYSTEM.DBF' RESIZE 2048M;
答案 3 :(得分:0)
我遇到了相同的错误消息,但是由于我不是dba,因此无法访问“ dba_free_space”之类的表。我使用以前的一些答案来检查可用空间,但我仍然有很多空间。但是,在减少全表扫描后,应尽可能多。问题已经解决了。我的猜测是Oracle使用临时表存储全表扫描数据。如果数据大小超出限制,则会显示错误。希望这对遇到同样问题的人有所帮助