ブログ - Oracleで一時表領域(TEMPテーブルスペース)を拡張したり小さくしたりする
例えば,PGAの物理メモリ内でソートができなかったりしたら,TEMP表領域を使ってソートをおこなう.この時に自動的に拡張される.
「自動的に拡張する」というのは拡張された時に少し処理が(何もしないよりは)重たくなるので,オンライン処理中に「自動的に増える」というイベントが発生しないようにしたい.
自動的に増えないようにするということは,十分なサイズのTEMP表領域を準備しておくということになるので,今回,それを増やしてみる.
現状確認
まずは,現在の容量を確認.
桁数が多くてクラクラする...ので,これはバイト単位なので,メガバイトに変換する.
20MBでした.
増やす
20MBだったので,これを100MBに増やす.
確認する.
増えた模様.
TEMP領域がどれくらい使われているか確認
100MBに増やして見たものの,実際に使われているのはいくらなのか確認.
100MBのうちの使用済みは2MBで,99MBは余っている模様.数値が合わないのは誤差か.これだともったいない.
勿体無いので,削減する.
TEMP領域を小さくする
今回は100MB用意したけれど,実際に使われているのが2MBだったので,50MBに減らす.
これで100MBから50MBに変更された.確認する.
51MBの領域があって,1MB使っていて残り50MB余っている.数値が違うのは誤差.
「自動的に拡張する」というのは拡張された時に少し処理が(何もしないよりは)重たくなるので,オンライン処理中に「自動的に増える」というイベントが発生しないようにしたい.
自動的に増えないようにするということは,十分なサイズのTEMP表領域を準備しておくということになるので,今回,それを増やしてみる.
現状確認
まずは,現在の容量を確認.
SQL> select a.FILE_NAME,a.TABLESPACE_NAME,a.BYTES from dba_temp_files a;🆑
FILE_NAME
--------------------------------------------------------------------------------
TABLESPACE_NAME BYTES
------------------------------ ----------
/u01/app/oracle/oradata/XE/temp.dbf
TEMP 20971520🈁
SQL>
SQL> select a.FILE_NAME,a.TABLESPACE_NAME,(a.BYTES/1024/1024) from dba_temp_files a;🆑
FILE_NAME
--------------------------------------------------------------------------------
TABLESPACE_NAME (A.BYTES/1024/1024)
------------------------------ -------------------
/u01/app/oracle/oradata/XE/temp.dbf
TEMP 20🈁
SQL>
増やす
20MBだったので,これを100MBに増やす.
SQL> alter database tempfile '/u01/app/oracle/oradata/XE/temp.dbf' resize 100M;🆑
データベースが変更されました。🈁
SQL>
SQL> select a.FILE_NAME,a.TABLESPACE_NAME,(a.BYTES/1024/1024) from dba_temp_files a;
FILE_NAME
--------------------------------------------------------------------------------
TABLESPACE_NAME (A.BYTES/1024/1024)
------------------------------ -------------------
/u01/app/oracle/oradata/XE/temp.dbf
TEMP 100
SQL>
TEMP領域がどれくらい使われているか確認
100MBに増やして見たものの,実際に使われているのはいくらなのか確認.
SQL> select tablespace_size / 1024 / 1024,allocated_space / 1024 /1024,🆑
2 free_space / 1024 / 1024 from dba_temp_free_space;🆑
TABLESPACE_SIZE/1024/1024 ALLOCATED_SPACE/1024/1024 FREE_SPACE/1024/1024
------------------------- ------------------------- --------------------
100 2 99🈁
SQL>
勿体無いので,削減する.
TEMP領域を小さくする
今回は100MB用意したけれど,実際に使われているのが2MBだったので,50MBに減らす.
SQL> alter tablespace TEMP shrink space keep 50M;🆑
表領域が変更されました。🈁
SQL>
SQL> select tablespace_size / 1024 / 1024,allocated_space / 1024 /1024,
2 free_space / 1024 / 1024 from dba_temp_free_space;
TABLESPACE_SIZE/1024/1024 ALLOCATED_SPACE/1024/1024 FREE_SPACE/1024/1024
------------------------- ------------------------- --------------------
51 1 50
SQL>