私
一時表領域を縮小してみたんだけど全然小さくなってない!そんなときの対処法を紹介。
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 が発生しても縮小はできている可能性があるので確認してみてね