1这个是查看当前占用临时表空间的sql
Select se.username,
se.sid,
su.extents,
su.blocks * to_number(rtrim(p.value)) as Space,
tablespace,
segtype,
sql_text
from v$sort_usage su, v$parameter p, v$session se, v$sql s
where p.name = 'db_block_size'
and su.session_addr = se.saddr
and s.hash_value = su.sqlhash
and s.address = su.sqladdr
order by se.username, se.sid;
千万注意,这个在rac环境下,db1和db2看到的东西是不一样的,包括v$sort_segment和V$SORT_USAGE
2.切换临时表空间,没有就建一个新的
create temporary tablespace temp2 tempfile '+VGDATA/boss/tempfile/temp2.dbf' size 32000m;
alter database default temporary tablespace temp2;
select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE'; --看看是不是这个
3再看所有程序切过去没有,切了就把原来的临时表空间drop掉
删除表空间temp,但不删除其文件 用:drop tablespace temp;
删除表空间temp同时删除表空间的数据对象 用drop tablespace temp including contents;
删除表空间temp及其包含数据对象以及数据文件 用drop tablespace temp including contents and datafiles;
由于9i之后临时表空间用指针,用这个才可以真正看到temp表空间的使用率,看v$sort_segment也可以
SELECT A.TABLESPACE_NAME, A.ALLOC_KB - NVL(B.USED_KB, 0), ROUND(NVL(B.USED_KB / A.ALLOC_KB, 0) * 100, 2)
FROM (SELECT TABLESPACE_NAME, SUM(BYTES) / 1024 ALLOC_KB
FROM DBA_TEMP_FILES
GROUP BY TABLESPACE_NAME) A,
(SELECT TABLESPACE, SUM(BLOCKS) * 8 USED_KB
FROM V$SORT_USAGE
GROUP BY TABLESPACE) B
WHERE A.TABLESPACE_NAME = B.TABLESPACE(+);
由于以上语句默认block大小为8k,仅当show parameter db_block_size为8192的时候正确。
select TABLESPACE_NAME,total_extents,total_blocks,free_extents,free_blocks from v$sort_segment;
这个看到空闲的块