542512行を含む大きなOracleテーブルがあります。 3つの列があり、次のコマンドでインデックスを作成しようとすると:
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コマンドは仕事をしているように見えますが、これらをどのように呼び出すか、どのパラメーターを使用するかはわかりません。任意の助けをいただければ幸いです。
各表領域には、データを格納するために使用する1つ以上のデータファイルがあります。
データファイルの最大サイズは、データベースのブロックサイズに依存します。デフォルトでは、データファイルごとに最大32GBになると思います。
実際の制限が32 GBかどうかを確認するには、次を実行します。
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;