Oracle その他

TEMP 領域(一時表領域)が SHRINK で縮小できない場合の対処法

一時表領域を縮小してみたんだけど全然小さくなってない!そんなときの対処法を紹介。

SHRINKというコマンドがあるが、これを実行しても一時表領域が縮小されないことがある。

実際の実行例が以下。ほんの少しだけ小さくなってるが、これではあまり意味がない。

実行例

SQL> select tablespace_name, file_name, status, bytes/1024/1024 mbytes, increment_by, autoextensible from dba_temp_files;

TABLESPACE FILE_NAME                                    STATUS     MBYTES   INCREMENT_BY  AUT
---------- ------------------------------------------- ------- ---------- ------------    ---
TEMP       /u01/app/oracle/oradata/orcl/temp01.dbf     ONLINE         131           80    YES

SQL> alter tablespace TEMP shrink space;  
 
表領域が変更されました。

SQL> select tablespace_name, file_name, status, bytes/1024/1024 mbytes, increment_by, autoextensible from dba_temp_files;

TABLESPACE FILE_NAME                                STATUS      MBYTES INCREMENT_BY AUT
---------- ---------------------------------------- ------- ---------- ------------ ---
TEMP       /u01/app/oracle/oradata/orcl/temp01.dbf  ONLINE  130.294503           80 YES

そんなときは KEEP オプションをつけて試してみよう。

ALTER TABLESPACE <表領域名> SHRINK SPACE KEEP <縮小ターゲットサイズ>;


以下の例では 100MB をターゲットに縮小をしている。

実行例

SQL> ALTER TABLESPACE temp SHRINK SPACE KEEP 100M;

表領域が変更されました。 

SQL>  select tablespace_name, file_name, status, bytes/1024/1024 mbytes, increment_by, autoextensible from dba_temp_files;

TABLESPACE FILE_NAME                                                    STATUS      MBYTES INCREMENT_BY AUT
---------- ------------------------------------------------------------ ------- ---------- ------------ ---
TEMP       /u01/app/oracle/oradata/orcl/temp01.dbf                     ONLINE         100           80 YES

<縮小ターゲットサイズ> を指定しない場合、縮小できる可能なサイズまで縮小をしてくれるよ

<縮小ターゲットサイズ> に縮小可能以下のサイズを指定してしまった場合、以下のような ORA-03297 エラーが発生してしまう。

実行例

 SQL> ALTER TABLESPACE temp SHRINK SPACE KEEP 10M;  
 ALTER TABLESPACE temp SHRINK SPACE KEEP 10M
 *
 行1でエラーが発生しました。:
 ORA-03297: ファイルには、リクエストしたRESIZE値を超える使用中のデータが含まれています。

SQL> select tablespace_name, file_name, status, bytes/1024/1024 mbytes, increment_by, autoextensible from dba_temp_files;

TABLESPACE FILE_NAME                                  STATUS     MBYTES INCREMENT_BY AUT
---------- ---------------------------------------  ------- ---------- ------------ ---
TEMP       /u01/app/oracle/oradata/orcl/temp01.dbf   ONLINE  30.294503          80 YES

ORA-03297 が発生しても縮小はできている可能性があるので確認してみてね

この記事が役に立ったという方は
ボタンをポチッとしてくれたら喜びます

-Oracle, その他
-