#一時表領域(Temp表領域)とは
一時セグメントと呼ばれる作業用のディスク領域を格納する表領域のこと。
ソート処理などで、処理に必要な一時的な作業領域がメモリ上に確保出来なかった場合に一時セグメントが割り当てられる。
DBCAでデータベースを作成すると、デフォルトで「TEMP」という名の表領域が作成される
以下で表領域の使用率を確認。この環境では容量が20480KB(=約20MB)。
SQL> SELECT dt.file_name, dt.tablespace_name,
2 to_char(dt.bytes / 1024, '99999990.000') file_kbytes,
3 to_char(t.bytes_cached / 1024, '99999990.000') used_kbytes,
4 to_char(t.bytes_cached / dt.bytes * 100, '990.00') || '%' capacity
5 FROM sys.dba_temp_files dt, v$temp_extent_pool t, v$tempfile v
6 WHERE t.file_id(+)= dt.file_id AND dt.file_id = v.file#;
FILE_NAME TABLESPACE FILE_KBYTES USED_KBYTE CAPACITY
---------------------------------------- ---------- -------------- ---------- ----------
C:\APP\AIMER\ORADATA\ORA12201\TEMP01.DBF TEMP 20480.000 13312.000 65.00%
#一時ファイル
一時表領域は、一時ファイル(一時データファイル)という特殊なデータファイルで構成される。v$tempfileで確認可能
SQL> col name for a40
SQL> select name,bytes,status from v$tempfile;
NAME BYTES STATUS
---------------------------------------- ---------- --------------
C:\APP\AIMER\ORADATA\ORA12201\TEMP01.DBF 20971520 ONLINE
#一時表領域の拡張
一時ファイルを拡張することで、一時表領域の容量の拡張が可能。
ALTER DATABASE TEMPFILE文を利用する
SQL> alter database tempfile 'C:\APP\AIMER\ORADATA\ORA12201\TEMP01.DBF' resize 30M;
データベースが変更されました。
SQL> select name,bytes,status from v$tempfile;
NAME BYTES STATUS
---------------------------------------- ---------- --------------
C:\APP\AIMER\ORADATA\ORA12201\TEMP01.DBF 31457280 ONLINE
#一時ファイルのサイズ上限
一時ファイルのサイズには、データブロックのサイズなどに応じたサイズの上限がある。
たとえばsmallfile表領域を使用しており、データブロックが8KBの場合、
一時ファイルのサイズは約32GBが上限となる。
上限を超えた値を指定すると、エラーになる。
SQL> alter database tempfile 'C:\APP\AIMER\ORADATA\ORA12201\TEMP01.DBF' resize 40G;
alter database tempfile 'C:\APP\AIMER\ORADATA\ORA12201\TEMP01.DBF' resize 40G
*
行1でエラーが発生しました。:
ORA-01144: ファイル・サイズ(5242880ブロック)が最大値4194303ブロックを超えています。
・Oracle® Databaseリファレンス
12c リリース1 (12.1) A.2 物理データベースの制限
https://docs.oracle.com/cd/E57425_01/121/REFRN/GUID-939CB455-783E-458A-A2E8-81172B990FE9.htm
#一時表領域の追加
CREATE TEMPORARY TABLESPACE文で、一時表領域の追加が可能(CREATE TABLESPACEシステム権限が必要)。
このとき、一時ファイルも新規作成される。
SQL> CREATE TEMPORARY TABLESPACE temptest TEMPFILE 'C:\APP\AIMER\ORADATA\ORA12201\TEMPTEST.DBF'
2 size 20M reuse EXTENT MANAGEMENT LOCAL;
表領域が作成されました。
SQL> select name,bytes,status from v$tempfile;
NAME BYTES STATUS
---------------------------------------- ---------- --------------
C:\APP\AIMER\ORADATA\ORA12201\TEMP01.DBF 31457280 ONLINE
C:\APP\AIMER\ORADATA\ORA12201\TEMPTEST.DBF 20971520 ONLINE
・Oracle® Database管理者ガイド
12cリリース1 (12.1)
13.2.6.2 ローカル管理の一時表領域の作成
https://docs.oracle.com/cd/E57425_01/121/ADMIN/tspaces.htm#GUID-03CCF8D4-9DAA-451A-B9F8-836F8262B43D