oracle临时表空间地址,Oracle认证:详解OracleTemp临时表空间处理方法
臨時表空間主要用途是在數據庫進行排序運算、管理索引、訪問視圖等操作時提供臨時的運算空間,當運算完成之后系統會自動清理。當oracle里需要用到sort的時候,PGA中sort_area_size大小不夠時,將會把數據放入臨時表空間里進行排序,同時如果有異常情況的話,也會被放入臨時表空間,正常來說,在完成Select語句、create index等一些使用TEMP表空間的排序操作后,Oracle是會自動釋放掉臨時段的。但有些有侯我們則會遇到臨時段沒有被釋放,TEMP表空間幾乎滿的狀況,甚至是我們重啟了數據庫仍沒有解決問題。
排序是很耗資源的,Temp表空間滿了,關鍵是優化你的語句,盡量使排序減少才是上策.
Temp表空間滿時的處理方法:
一、修改參數(僅適用于8i及8i以下版本)
修改一下TEMP表空間的storage參數,讓Smon進程觀注一下臨時段,從而達到清理和TEMP表空間的目的。
SQL>alter?tablespace?temp?increase?1;
SQL>alter?tablespace?temp?increase?0;
二、kill session
1、 使用如下語句a查看一下認誰在用臨時段
SELECT?se.username,?se.SID,?se.serial#,?se.sql_address,?se.machine,?se.program,?su.TABLESPACE,
su.segtype,??su.CONTENTS?FROM?v$session?se,?v$sort_usage?su
WHEREse.saddr=su.session_addr
2、kill正在使用臨時段的進程
SQL>Alter?system?kill?session?'sid,serial#';
3、把TEMP表空間回縮一下
SQL>Alter?tablespace?TEMP?coalesce;
注:
這處方法只能針對字典管理表空間(Dictionary Managed Tablespace)。于本地管理表空間(LMT:Local Managed Tablespace),不需要整理的。9i以后只能創建本地管理的表空間。
CREATE?TABLESPACE?TEST?DATAFILE?'D:\TEST01.dbf'?SIZE?5M?EXTENT?MANAGEMENT?DICTIONARY
CREATE?TABLESPACE?TEST?DATAFILE?'D:\TEST01.dbf'?SIZE?5M?EXTENT?MANAGEMENT?LOCAL;
三、重啟數據庫庫
庫重啟時,Smon進程會完成臨時段釋放,TEMP表空間的清理操作,不過很多的時侯我們的庫是不允許down的,所以這種方法缺少了一點的應用機會,不過這種方法還是很好用的。
四、使用診斷事件的一種方法,也是最有效的一種方法
1、 確定TEMP表空間的ts#
SQL>select?ts#,?name?from?sys.ts$?;
TS#?NAME
----------?------------------------------
0?SYSTEM
1?UNDOTBS1
2?SYSAUX
3?TEMP
4?USERS
5?UNDOTBS2
2、執行清理操作
SQL>alter?session?set?events?'immediate?trace?name?DROP_SEGMENTS?level?4'?;
說明:
temp表空間的TS# 為 3, So TS#+ 1= 4
重建TEMP 表空間:
Temporary tablespace是不能直接drop默認的臨時表空間的,不過我們可以通過以下方法來做。
準備:查看目前的Temporary Tablespace
SQL>select?name?from?v$tempfile;
NAME
———————————————————————
D:\ORACLE\ORADATA\TEST\TEMP01.DBF
SQL>select?username,temporary_tablespace?from?dba_users;
USERNAME????????????????????TEMPORARY_TABLESPACE
------------------------------?------------------------------
MGMT_VIEW??????????????????TEMP
SYS????????????????????????????????TEMP
SYSTEM?????????????????????????TEMP
DBSNMP?????????????????????????TEMP
SYSMAN?????????????????????????TEMP
1.創建中轉臨時表空間
create?temporary?tablespace??TEMP1?TEMPFILE?'E:\ORACLE\ORADATA\ORCL\temp02.DBF'?SIZE?512M?REUSE?AUTOEXTEND?ON?NEXT??1M?MAXSIZE?UNLIMITED;
2.改變缺省臨時表空間 為剛剛創建的新臨時表空間temp1
alter?database?default??temporary?tablespace??temp1;
3.刪除原來臨時表空間
drop?tablespace?temp?including?contents?and?datafiles;
4.重新創建臨時表空間
create?temporary?tablespace??TEMP?TEMPFILE?'E:\ORACLE\ORADATA\ORCL\temp01.DBF'?SIZE?512M?REUSE?AUTOEXTEND?ON?NEXT??1M?MAXSIZE?UNLIMITED;
5.重置缺省臨時表空間為新建的temp表空間
alter?database?default??temporary?tablespace??temp;
6.刪除中轉用臨時表空間
drop?tablespace?temp1?including?contents?and?datafiles;
7.如果有必要,那么重新指定用戶表空間為重建的臨時表空間
alter?user?arbor?temporary?tablespace??temp;
查看表空間語句,不過查不出Temp表空間:
SELECT?UPPER(F.TABLESPACE_NAME)?"表空間名",
D.TOT_GROOTTE_MB?"表空間大小(M)",
D.TOT_GROOTTE_MB?-?F.TOTAL_BYTES?"已使用空間(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB?-?F.TOTAL_BYTES)?/?D.TOT_GROOTTE_MB?*?100,2),
'990.99')?"使用比",
F.TOTAL_BYTES?"空閑空間(M)",
F.MAX_BYTES?"最大塊(M)"
FROM?(SELECT?TABLESPACE_NAME,
ROUND(SUM(BYTES)?/?(1024?*?1024),?2)?TOTAL_BYTES,
ROUND(MAX(BYTES)?/?(1024?*?1024),?2)?MAX_BYTES
FROM?SYS.DBA_FREE_SPACE
GROUP?BY?TABLESPACE_NAME)?F,
(SELECT?DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES)?/?(1024?*?1024),?2)?TOT_GROOTTE_MB
FROM?SYS.DBA_DATA_FILES?DD
GROUP?BY?DD.TABLESPACE_NAME)?D
WHERED.TABLESPACE_NAME=F.TABLESPACE_NAME
ORDER?BY?4?DESC
以上就是Oracle臨時表空間的處理方法,希望會對讀者帶來幫助。
【編輯推薦】
【責任編輯:趙鵬 TEL:(010)68476606】
總結
以上是生活随笔為你收集整理的oracle临时表空间地址,Oracle认证:详解OracleTemp临时表空间处理方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试题整理|45个CSS面试题
- 下一篇: 使用selenium + pytest