11G的新视图DBA_TEMP_FREE_SPACE
Kevin Zou
2011-9-27
在11G引入了一个新的视图DBA_TEMP_FREE_SPACE,可以更加高效的管理临时表空间。
SQL> select * from v$version where rownum < 2;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
SQL> desc DBA_TEMP_FREE_SPACE
Name Null? Type
----------------------------------------- -------- ----------------------------
TABLESPACE_NAME NOT NULL VARCHAR2(30)
TABLESPACE_SIZE NUMBER
ALLOCATED_SPACE NUMBER
FREE_SPACE NUMBER
SQL> SELECT * FROM dba_temp_free_space;
TABLESPACE_NAME TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE
------------------------------ --------------- --------------- ----------
TEMP 524288000 5242880 522190848
在我这个的环境里,临时表空间的大小为524M,已经分配的空间是5M,还有522M 空闲的空间。这里为啥FREE+ALLOCATED的值大于总值呢?
可以在线缩小临时表空间:
SQL> alter tablespace temp shrink space keep 200m;
Tablespace altered.
SQL> SELECT * FROM dba_temp_free_space;
TABLESPACE_NAME TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE
------------------------------ --------------- --------------- ----------
TEMP 210763776 2097152 208666624
也可以直接缩小某个临时文件:
SQL> select name from v$tempfile;
NAME
L:\ORADATA\TEST\TEMP11\TEMP01.DBF
SQL> alter tablespace temp shrink tempfile 'L:\ORADATA\TEST\TEMP11\TEMP01.DBF' keep 100M;
Tablespace altered.
SQL> SELECT * FROM dba_temp_free_space;
TABLESPACE_NAME TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE
------------------------------ --------------- --------------- ----------
TEMP 105897984 3137536 103809024
Keep语句指定了需要保留的最小值;如果忽略该语句,那直接将TABLESPACE和TEMPFILE缩小到最小。
SQL> alter tablespace temp shrink space;
Tablespace altered.
SQL> SELECT * FROM dba_temp_free_space;
TABLESPACE_NAME TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE
------------------------------ --------------- --------------- ----------
TEMP 2088960 2088960 0
-THE END-