アットウィキロゴ
テンポラリ・セグメントは、インデックス作成、表の結合、集合関数の利用等のソートを伴う処理において、メモリ上で割り当て切れなかったデータに対して、一時的にディスクに格納するための領域です。このセグメントを格納するための表領域が一時表領域です。大きな領域を必要としないソート処理はパラメータsort_area_sizeによってメモリ上に確保された領域で処理され、それ以上についてはディスク上の一時表領域で処理されます。

Oracle上で以下の処理を行う時にテンポラリ・セグメントが使用される可能性があります。


ソートを伴う処理が発生したとき

DISTINCT、UNION、MINUS、GROUP BY、ORDER BY など

INDEX作成

SORT/MARGE・JOIN

表をJOINするSQL文の実行計画が「HASH_JOIN」を選択したとき



従って、メモリの許す範囲において、できるだけsort_area_sizeを大きく設定し、エクステントサイズの設定については、sort_area_sizeの整数倍に設定すれば効率的です。



5.5.1.一時表領域の必要性

Oracleでは、テンポラリ・セグメントを格納する領域として、一時表領域を作成することを推奨しています。一時表領域はユーザ作成時に明示的に定義します。ここで定義をしない場合は、SYSTEM表領域がテンポラリ・セグメントを格納する領域となります。SYSTEM表領域は、データディクショナリで使用される領域で、これ以外の用途に使用するべきではありません。

ユーザ表領域やインデックス表領域内に提示することも可能ですが、フラグメンテーションの原因となるため定義しません。


ユーザ作成時の一時表領域の定義例 SVRMGR>create user SCOTT identified by TIGER

2> default tablespace USR_DATA

3>temporary tablespace TMP_DATA ;




5.5.2.一時表領域の見積もり

一時表領域の必要容量を正確に算出することは困難です。指針として、最大表のサイズの2倍とします。



5.5.3.一時表領域の作成

一時表領域を作成するに当たって、必要となる知識を示します。

テンポラリ・セグメントは削除されない。*1

1つのエクステントは、一人のユーザが占有します。

エクステントは自動的に全て同じ値になる。*2

エクステントの管理はSGAで行われる。

MAXEXTENTSはUNLIMITEDとする。


1 Oracle7 R7.3.x以前のバージョンでは、テンポラリ・セグメントは自動的に作成・拡張・削除が行われていました。Oracle8ではソート処理が終了して必要なくなっても削除されません。よって、全てのユーザで共有されます。



2 エクステントサイズ「INITIAL」の値は使用されず、「NEXT」の値のみが採用されます。「PCTINCREASE」は0になります。



SVRMGR>create tablespace TMP_DATA

2>datafile ‘/opt/oracle/temp/tmp01.dbf’ size 10M

3>default storage (initial 1M next 1M maxextents unlimited)

4>temporary;


一時表領域の作成例


注意として、網掛け部「temporary」を必ず指定してください。Oracleで一時表領域という認識ができません。作成後は次のSQLで、「TEMPORARY」と表示されることを必ず確認してください。


SVRMGR>select tablespace_name, contents from dba_tablespaces

2>where tablespace_name = ‘TMP_DATA’;


一時表領域モードの確認


「PARMANENT」と表示された場合は、次のSQL文で修正してください。

SVRMGR>alter tablespace TMP_DATA temporary;
最終更新:2008年11月15日 22:11