2006.01.30

一時表のセグメント割当て

少々難易度の高い帳票やバッチプログラムなどでは、
よく一時表を利用します。
一時表はトランザクションまたはセッション期間中にのみ
存在するデータを保持するもので、Oracleの場合、
CREATE GLOBAL TEMPORARY TABLE 文 によって予め一時表を作成しておきます。
通常は表作成時(CREATE時)にセグメント割当てする表領域を指定しますが、
一時表の場合は出来ません。一時表のセグメント割当ては、
表作成時ではなく、初回INSERTが発行された時点で初めて割当てられるからです。
そしてトランザクションまたはセッション終了時に自動的に
その一時表セグメントが削除されます。
どの表領域にできるかというと、
そのユーザのデフォルト一時表領域内に割当てられます。
ユーザ定義の一時表領域がない場合、
SYSTEM表領域がデフォルトの一時表領域として使用されますので、
一時表領域は必ず固有のものを定義するようにしましょう。
あと一時表領域は、SQL文にORDER BY、GROUP BY、UNION など、
普段、当たり前のように記述するものが含まれる場合も
使用されるので、その領域は多めにとっておいた方がいいです。

photo
minami