我有一个大型的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命令似乎可以完成这项工作,但我不知道如何调用这些以及使用哪些参数。任何帮助将不胜感激。
答案 0 :(得分:49)
每个表空间都有一个或多个用于存储数据的数据文件。
数据文件的最大大小取决于数据库的块大小。我相信,默认情况下,每个数据文件的最大容量为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(其名称与其暗示的内容相同)。
如果您的数据文件的最大大小较小或者autoextend未启用,则只需运行:
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;