1.oracle11g下清理臨時表空間
1:查看用戶的默認臨時表空間
SQL> select * from v$version where rownum<=1;
2:查看錶空間的利用率
SELECT D.TABLESPACE_NAME,
SPACE || 'M' "SUM_SPACE(M)",
BLOCKS "SUM_BLOCKS",
SPACE - NVL (FREE_SPACE, 0) || 'M' "USED_SPACE(M)",
ROUND ( (1 - NVL (FREE_SPACE, 0) / SPACE) * 100, 2) ||
'%'
"USED_RATE(%)",
FREE_SPACE || 'M' "FREE_SPACE(M)"
FROM ( SELECT TABLESPACE_NAME,
ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE,
SUM (BLOCKS) BLOCKS
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) D,
( SELECT TABLESPACE_NAME,
ROUND (SUM (BYTES) / (1024 * 1024), 2)
FREE_SPACE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
UNION ALL
--如果有臨時表空間
SELECT D.TABLESPACE_NAME,
SPACE || 'M' "SUM_SPACE(M)",
BLOCKS SUM_BLOCKS,
USED_SPACE || 'M' "USED_SPACE(M)",
ROUND (NVL (USED_SPACE, 0) / SPACE * 100, 2) || '%'
"USED_RATE(%)",
NVL (FREE_SPACE, 0) || 'M' "FREE_SPACE(M)"
FROM ( SELECT TABLESPACE_NAME,
ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE,
SUM (BLOCKS) BLOCKS
FROM DBA_TEMP_FILES
GROUP BY TABLESPACE_NAME) D,
( SELECT TABLESPACE_NAME,
ROUND (SUM (BYTES_USED) / (1024 * 1024), 2)
USED_SPACE,
ROUND (SUM (BYTES_FREE) / (1024 * 1024), 2)
FREE_SPACE
FROM V$TEMP_SPACE_HEADER
GROUP BY TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
ORDER BY 1;
結果爲:
3:temp表空間已經100%,需要釋放。
SQL> col file_name for a50
SQL> col autoextensible for a10
SQL> select file_name,autoextensible
from dba_temp_files
where tablespace_name='TEMP';
FILE_NAME AUTOEXTENS
-------------------------------------------------- ----------
D:\APP\ADMINISTRATOR\ORADATA\VLSI\TEMP01.DBF YES
SQL> alter tablespace temp shrink space;
表空間已更改。
4:shrink後,再次查看temp表空間的使用率
5:一下降到了1.99M,此時需要添加一個臨時文件,固定大小。
SQL> alter tablespace temp add tempfile 'D:\app\Administrator\oradata\vlsi\TEMP02.DBF' size 1024 M ;
表空間已更改。
6:再次查看錶空間使用率
從結果可以看出,使用率降到了0.19%。問題解決。
總結:在oracle 11g中,當臨時表空間使用率過高時,可以通過alter tablespace temp shrink space來降低使用率。
通過添加文件,也可以達到降低空間使用率的目的。