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

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

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

数据文件的最大大小取决于数据库的块大小。我相信默认情况下,每个数据文件最多可以保存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;

另外,通常做一个很好的/通常的做法是拥有一个专用于索引的表空间(由于你没有在创建索引语句中指定表空间,而是似乎没有这样做),而且它正在使用默认值系统表空间),所以在创建这样一个表空间后,你会运行这样的(在你的情况下):

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

(在创建表空间和数据文件之后),通过:

create tablespace name_of_ts_for_indexes datafile
'c:\app\xyz\oradata\orcl\name_of_ts_for_indexes01.dbf' autoextend on maxsize unlimited nologging;

这样你的表将在一个表空间上,索引在另一个表空间上。

http://stackoverflow.com/questions/25350703/ora-01652-unable-to-extend-temp-segment-by-128-in-tablespace-system-how-to-ext

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:sql – ORA-01652:表空间中无法扩展临时段128值SYSTEM:如何扩展?