28

のようなテーブルを作成しています

create table tablename
as
select * for table2

エラーが発生しています

ORA-01652 Unable to extend temp segment by in tablespace

私がグーグルで検索したとき、私は通常、次のような値を示すORA-01652エラーを見つけました

Unable to extend temp segment by 32 in tablespace

私はそのような値を取得していません.私はこのクエリを実行しました

select 
   fs.tablespace_name                          "Tablespace", 
   (df.totalspace - fs.freespace)              "Used MB", 
   fs.freespace                                "Free MB", 
   df.totalspace                               "Total MB", 
   round(100 * (fs.freespace / df.totalspace)) "Pct. Free" 
from 
   (select 
      tablespace_name, 
      round(sum(bytes) / 1048576) TotalSpace 
   from 
      dba_data_files 
   group by 
      tablespace_name 
   ) df, 
   (select 
      tablespace_name, 
      round(sum(bytes) / 1048576) FreeSpace 
   from 
      dba_free_space 
   group by 
      tablespace_name 
   ) fs 
where 
   df.tablespace_name = fs.tablespace_name; 

出典:表領域の空き領域を調べる

現在使用しているテーブルスペースには約 32Gb の空き容量があることがわかりました。次のようなテーブルを作成してみました

create table tablename tablespace tablespacename
as select * from table2 

しかし、同じエラーが再び発生しています。問題の場所と解決方法を教えてください。参考までに、select ステートメントは 40,000,000 レコードをフェッチします。

4

4 に答える 4

44

これに対する解決策を見つけました。個別、結合などの操作のためにデータベースによって内部的に使用される TEMP と呼ばれる一時テーブルスペースがあります。私のクエリ (4 つの結合がある) は約 5,000 万件のレコードをフェッチするため、TEMP テーブルスペースにはすべてのデータを占有するスペースがありません。したがって、テーブルスペースに空き領域があってもクエリは失敗します。そのため、TEMP テーブルスペースのサイズを増やした後、問題は解決しました。これが同じ問題を抱えている人に役立つことを願っています。ありがとう :)

于 2012-08-07T22:49:07.537 に答える
3

新しいデータファイルを作成する必要はありません。既存のテーブルスペース データ ファイルを拡張できます。

以下を実行して、既存のテーブルスペースのファイル名を決定します。

  SELECT * FROM DBA_DATA_FILES;

次に、次のようにデータファイルのサイズを拡張します (ファイル名を前のクエリのものに置き換えます)。

  ALTER DATABASE DATAFILE 'D:\ORACLEXE\ORADATA\XE\SYSTEM.DBF' RESIZE 2048M; 
于 2014-02-19T01:22:35.540 に答える