【问题标题】:ORA-01652: unable to extend temp segment by 128 in tablespace SYSTEM: How to extend?ORA-01652: 无法在表空间中将临时段扩展 128 系统:如何扩展?
【发布时间】:2014-10-10 14:56:33
【问题描述】:

我有一个大型 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 命令似乎可以完成这项工作,但我不确定如何调用这些以及使用哪些参数。任何帮助将不胜感激。

【问题讨论】:

  • "使用 ALTER TABLESPACE ADD DATAFILE 语句将一个或多个文件添加到指定的表空间。"更多信息,请访问dba-oracle.com/…

标签: sql database oracle


【解决方案1】:

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

数据文件的最大大小取决于数据库的块大小。我相信,默认情况下,每个数据文件最多留给您 32gb。

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

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

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

我有 Oracle Personal Edition 11g r2,在默认安装中它有 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;

【讨论】:

  • 看来我已经通过向SYSTEM表空间添加一个新的数据文件来解决它。但是当我通过 SELECT * FROM DBA_DATA_FILES 命令查看我当前的表空间时,我看到所有当前的表空间都是可自动扩展的。那么为什么 Oracle 未能将表空间扩展到所需的数量呢?
  • 因为最大为 32gb。即使开启自动扩展,它也不会无限增加,它仍然具有上限。换句话说,您需要为每个表空间内的每 32gb 数据添加一个数据文件。因此,如果您有一个需要 TB 数据的表空间,则必须有 3 个数据文件,每个都带有自动扩展功能和一个最大文件大小(因为实际最大值为 32)
  • @UfukCanBiçici 32gb 取决于您的数据库的块大小。我相信这是默认设置,但无论如何,您都可以通过运行上述查询并参考上面的图表来检查您的实际情况(我刚刚将该信息添加到答案中)。
  • 只是在我的第二条评论中澄清一下,对于 TB (1000gb),您实际上需要 32 个数据文件。我在考虑 100gb,在这种情况下你只需要 3 个。你总是可以为一个表空间添加多个数据文件,起始大小很小(即 10mb 或其他小东西),最大大小为无限制(最多边界),并自动扩展,以预期最终需要使用它们。
  • 谢谢布赖恩!你是救生员:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 2013-07-29
相关资源
最近更新 更多