LoginSignup
3
6

More than 3 years have passed since last update.

一時表領域(Temp表領域)についての私的まとめ

Last updated at Posted at 2020-11-21

一時表領域(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

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6