臨時表空間爆滿的處理辦法

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; 
這個看到空閒的塊
發佈了33 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章