當前位置:成語大全網 - 新華字典 - OracleTemp臨時表空間處理

OracleTemp臨時表空間處理

 Temporary tablespace是oracle裏臨時表空間 臨時表空間主要用途是在數據庫進行排序運算 管理索引 訪問視圖等操作時提供臨時的運算空間 當運算完成之後系統會自動清理 當oracle裏需要用到sort的時候 PGA中sort_area_size大小不夠時 將會把數據放入臨時表空間裏進行排序 同時如果有異常情況的話 也會被放入臨時表空間 正常來說 在完成Select語句 create index等壹些使用TEMP表空間的排序操作後 Oracle是會自動釋放掉臨時段的 但有些有侯我們則會遇到臨時段沒有被釋放 TEMP表空間幾乎滿的狀況 甚至是我們重啟了數據庫仍沒有解決問題

 排序是很耗資源的 Temp表空間滿了 關鍵是優化妳的語句 盡量使排序減少才是上策

 Temp表空間滿時的處理方法

 壹 修改參數(僅適用於 i及 i以下版本)

 修改壹下TEMP表空間的storage參數 讓Smon進程觀註壹下臨時段 從而達到清理和TEMP表空間的目的

 SQL>alter tablespace temp increase ;

 SQL>alter tablespace temp increase ;

 二 kill session

  使用如下語句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

 WHERE se saddr = su session_addr

  kill正在使用臨時段的進程

 SQL>Alter system kill session sid serial# ;

  把TEMP表空間回縮壹下

 SQL>Alter tablespace TEMP coalesce;

 註

 這處方法只能針對字典管理表空間(Dictionary Managed Tablespace) 於本地管理表空間(LMT:Local Managed Tablespace) 不需要整理的 i以後只能創建本地管理的表空間

 CREATE TABLESPACE TEST DATAFILE D:\TEST dbf SIZE M EXTENT MANAGEMENT DICTIONARY

 CREATE TABLESPACE TEST DATAFILE D:\TEST dbf SIZE M EXTENT MANAGEMENT LOCAL;

 三 重啟數據庫庫

 庫重啟時 Smon進程會完成臨時段釋放 TEMP表空間的清理操作 不過很多的時侯我們的庫是不允許down的 所以這種方法缺少了壹點的應用機會 不過這種方法還是很好用的

 四 使用診斷事件的壹種方法 也是最有效的壹種方法

  確定TEMP表空間的ts#

 SQL>select ts# name from sys ts$ ;

 TS# NAME

 

  SYSTEM

  UNDOTBS

  SYSAUX

  TEMP

  USERS

  UNDOTBS

  執行清理操作

 SQL>alter session set events immediate trace name DROP_SEGMENTS level ;

 說明

 temp表空間的TS# 為 So TS#+ =

 重建TEMP 表空間

 Temporary tablespace是不能直接drop默認的臨時表空間的 不過我們可以通過以下方法來做

 準備 查看目前的Temporary Tablespace

 SQL> select name from v$tempfile;

 NAME

 ———————————————————————

 D:\ORACLE\ORADATA\TEST\TEMP DBF

 SQL> select username temporary_tablespace from dba_users;

 USERNAME TEMPORARY_TABLESPACE

 

 MGMT_VIEW? TEMP

 SYS? TEMP

 SYSTEM TEMP

 DBSNMP TEMP

 SYSMAN TEMP

  創建中轉臨時表空間

 create temporary tablespace? TEMP TEMPFILE E:\ORACLE\ORADATA\ORCL\temp DBF SIZE M REUSE AUTOEXTEND ON NEXT? M MAXSIZE UNLIMITED;

  改變缺省臨時表空間 為剛剛創建的新臨時表空間temp

 alter database default? temporary tablespace? temp ;

  刪除原來臨時表空間

 drop tablespace temp including contents and datafiles;

  重新創建臨時表空間

 create temporary tablespace? TEMP TEMPFILE E:\ORACLE\ORADATA\ORCL\temp DBF SIZE M REUSE AUTOEXTEND ON NEXT? M MAXSIZE UNLIMITED;

  重置缺省臨時表空間為新建的temp表空間

 alter database default? temporary tablespace? temp;

  刪除中轉用臨時表空間

 drop tablespace temp including contents and datafiles;

  如果有必要 那麽重新指定用戶表空間為重建的臨時表空間

 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 * )

  ) 使用比

 F TOTAL_BYTES 空閑空間(M)

 F MAX_BYTES 最大塊(M)

 FROM (SELECT TABLESPACE_NAME

 ROUND(SUM(BYTES) / ( * ) ) TOTAL_BYTES

 ROUND(MAX(BYTES) / ( * ) ) MAX_BYTES

 FROM SYS DBA_FREE_SPACE

 GROUP BY TABLESPACE_NAME) F

 (SELECT DD TABLESPACE_NAME

 ROUND(SUM(DD BYTES) / ( * ) ) TOT_GROOTTE_MB

 FROM SYS DBA_DATA_FILES DD

 GROUP BY DD TABLESPACE_NAME) D

 WHERE D TABLESPACE_NAME = F TABLESPACE_NAME

lishixinzhi/Article/program/Oracle/201311/17017