ORA-01652:无法在表空间SYSTEM中将临时段扩展128:如何扩展?

Ufu*_*ici 37 sql database oracle

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

  CREATE INDEX FTS_INDEX ON FILTERED_TEKLI_IIS_TABLOSU (ilAdi,ilceAdi,caddeAdi)
Run Code Online (Sandbox Code Playgroud)

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

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

Bri*_*lia 55

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

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

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

select value from v$parameter where name = 'db_block_size';
Run Code Online (Sandbox Code Playgroud)

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

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

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

select bytes/1024/1024 as mb_size,
       maxbytes/1024/1024 as maxsize_set,
       x.*
from   dba_data_files x
Run Code Online (Sandbox Code Playgroud)

MAXSIZE_SET是您将数据文件设置为的最大大小.同样重要的是您是否将AUTOEXTEND选项设置为ON(其名称与其含义相同).

如果您的数据文件具有较低的最大大小或者autoextend未启用,则只需运行:

alter database datafile 'path_to_your_file\that_file.DBF' autoextend on maxsize unlimited;
Run Code Online (Sandbox Code Playgroud)

但是,如果其大小为/接近32gb,则自动扩展打开,则是,您需要另一个表空间数据文件:

alter tablespace system add datafile 'path_to_your_datafiles_folder\name_of_df_you_want.dbf' size 10m autoextend on maxsize unlimited;
Run Code Online (Sandbox Code Playgroud)

  • 只是为了在我的第二条评论中澄清,对于 1 TB (1000 GB),您实际上需要 32 个数据文件。我正在考虑 100GB,在这种情况下,您只需要 3 个。您始终可以为表空间添加多个数据文件,起始大小较小(即 10mb 或较小),最大大小为无限(最多边界),并自动扩展,以预测最终需要使用它们。 (2认同)