1. ホーム
  2. sql

[解決済み] ORA-01652: テーブルスペースSYSTEMでtempセグメントを128拡張できない: 拡張する方法は?

2022-03-08 10:53:59

質問

私は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つまたは複数のデータファイルを持っています。

データファイルの最大サイズは、データベースのブロックサイズに依存します。デフォルトでは、1つのデータファイルにつき最大32gbになると思います。

実際の上限が32gbかどうかを調べるには、以下を実行してください。

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

得られた結果を以下の最初の列と比較してください。それが、あなたの最大データファイルサイズを示します。

私はOracle Personal Edition 11g r2を持っていますが、デフォルトのインストールでは、ブロックサイズが8192でした(1データファイルあたり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;