首页 > Linux操作系统 > Linux操作系统 > 臨時表空間已滿的解決方法
臨時表空間主要用來存放由排序、匯總、索引產生的臨時數據。
臨時表空間已滿的解決方法:
以下方法均經過我實際操作,可行方法。
一、利用中轉臨時表空間:新建一個臨時表空間,修改默認臨時表空間
1. create temporary tablespace temp2 tempfile ‘D:\ORACLE\ORADATA\ORCL\TEMP02.dbf’ size 20M reuse autoextend on next 640k maxsize unlimited; --創建中轉表空間
2. alter database default temporary tablespace temp2;--修改默認表空間
3. drop tablespace temp including contents and datafiles;--刪除原來的臨時表空間
4. create temporary tablespace temp tempfile ‘D:\ORACLE\ORADATA\ORCL\TEMP.dbf’ size 20M reuse autoextend on next 640k maxsize unlimited;--重新創建臨時表空間
5. alter database default temporary tablespace temp;--重置默認臨時表空間為temp表空間
6. drop tablespace temp2 including contents and datafile;--刪除中轉用的臨時表空間
7. alter user scott temporary tablespace temp;--重新指定用戶臨時表空間為重建的臨時表空間
二、重啟數據庫(上次遇到這個問題時,重啟庫之後數據庫突然變得很慢,不知道是否跟我做了alter system flush shared_pool操作有關,過段時間后,速度正常了)
三、Kill掉正在使用臨時段的進程
1. 查看誰在使用臨時段
SELECT se.username, SID, serial#, sql_address, machine, program, TABLESPACE,
segtype, CONTENTS
FROM v$session se, v$sort_usage su
WHERE se.saddr = su.session_addr
2. Kill掉這些進程
alter system kill session ‘sid,serial#’
3. 對temp表空間進行碎片整理
alter tablespace temp coalesce;(不能對臨時表空間進行碎片整理?)
四、使用診斷時間
1、確定temp表空間的ts#
select ts#, name from ts$;
0,SYSTEM
1,UNDOTBS1
2,SYSAUX
3,TEMP
4,USERS
5,UNDOTBS2
6,EXAMPLE
7,HR_DATA
8,TEMP2
9,TEMP1
2、執行清理操作
3、alter session set events ‘immediate trace name DROP_SEGMENTS level 4’;
其中,level值為ts#+1;
查看表空間使用情況:
SELECT a.tablespace_name "表空間名(M)", total / 1024 / 1024 "表空間大小(M)",
free / 1024 / 1024 "表空間剩余大小(M)",
(total - free) / 1024 / 1024 "表空間使用大小(M)",
ROUND ((total - free) / total, 4) * 100 "使用率 %"
FROM (SELECT tablespace_name, SUM (BYTES) free
FROM dba_free_space
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM (BYTES) total
FROM dba_data_files
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name
order by 5 desc;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10314474/viewspace-616902/ ,如需转载,请注明出处,否则将追究法律责任。