sql - ORA-01652 : unable to extend temp segment by 128 in tablespace SYSTEM: How to extend?

标签 sql database oracle

我有一个很大的 Oracle 表,其中包含 542512 行。它具有三列,当我尝试使用以下命令为其创建索引时:

  CREATE INDEX FTS_INDEX ON FILTERED_TEKLI_IIS_TABLOSU (ilAdi,ilceAdi,caddeAdi)

Oracle 给出以下错误:

SQL Error: ORA-01652: unable to extend temp segment by 128 in tablespace SYSTEM
01652. 00000 -  "unable to extend temp segment by %s in tablespace %s"
*Cause:    Failed to allocate an extent of the required number of blocks for
       a temporary segment in the tablespace indicated.
*Action:   Use ALTER TABLESPACE ADD DATAFILE statement to add one or more
       files to the tablespace indicated.

我搜索了一下这个错误,发现是Oracle在对大表执行连接表、创建索引等操作时没有足够的空间来存储中间数据时产生的。但是我没有找到明确的解决方案。这些 ALTER TABLESPACE 和 ADD DATAFILE 命令似乎可以完成这项工作,但我不确定如何调用这些命令以及使用哪些参数。任何帮助将不胜感激。

最佳答案

每个表空间都有一个或多个用于存储数据的数据文件。

数据文件的最大大小取决于数据库的 block 大小。我相信,默认情况下,每个数据文件的最大容量为 32gb。

要查明实际限制是否为 32gb,请运行以下命令:

select value from v$parameter where name = 'db_block_size';

将您获得的结果与下面第一列进行比较,这将表明您的最大数据文件大小。

我有 Oracle 个人版 11g r2,在默认安装中,它的 block 大小为 8,192(每个数据文件 32gb)。

Block Sz   Max Datafile Sz (Gb)   Max DB Sz (Tb)

--------   --------------------   --------------

   2,048                  8,192          524,264

   4,096                 16,384        1,048,528

   8,192                 32,768        2,097,056

  16,384                 65,536        4,194,112

  32,768                131,072        8,388,224

您可以运行此查询来查找您拥有的数据文件、它们关联的表空间以及您当前设置的最大文件大小(不能超过上述 32gb):

select bytes/1024/1024 as mb_size,
       maxbytes/1024/1024 as maxsize_set,
       x.*
from   dba_data_files x

MAXSIZE_SET 是您为数据文件设置的最大大小。同样相关的是您是否已将 AUTOEXTEND 选项设置为 ON(其名称正如它所暗示的那样)。

如果您的数据文件的最大大小较小或未启用自动扩展,您可以简单地运行:

alter database datafile 'path_to_your_file\that_file.DBF' autoextend on maxsize unlimited;

但是,如果它的大小是/接近 32gb,那么自动扩展是打开的,那么是的,您确实需要为表空间提供另一个数据文件:

alter tablespace system add datafile 'path_to_your_datafiles_folder\name_of_df_you_want.dbf' size 10m autoextend on maxsize unlimited;

关于sql - ORA-01652 : unable to extend temp segment by 128 in tablespace SYSTEM: How to extend?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25350703/

相关文章:

sql - 如何调用包中的函数

mysql - 需要有关如何构建在线集换式纸牌游戏的数据库架构的建议

mysql - 重叠的时间间隔

mysql - 规范化,困惑

java - Tomcat 和 mySQL 配置

c# - VS Entity Framework 中的Oracle实体不更新代码中的主键

oracle - 在plsql中编写函数

sql - PostgreSQL:如何列出访问特定表的所有存储函数

sql - 如何在 SQL Server 中设计查询或查找错误?

database - MS Access 中的 2GB 数据库限制是否影响链接表?