新聞中心
隨著業(yè)務(wù)的增長和數(shù)據(jù)量的增加,數(shù)據(jù)庫的性能問題逐漸成為了企業(yè)最關(guān)心的問題之一。數(shù)據(jù)庫空間管理是數(shù)據(jù)庫性能優(yōu)化的一個非常重要的方面。在數(shù)據(jù)庫運維中,臨時表空間是常見的占用很多磁盤空間和影響數(shù)據(jù)庫性能的問題。

10多年的井陘網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整井陘建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)公司從事“井陘網(wǎng)站設(shè)計”,“井陘網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
在Oracle數(shù)據(jù)庫中,臨時表空間用于存儲SQL語句執(zhí)行時的中間結(jié)果。當SQL語句需要使用排序、分組、連接等操作時,數(shù)據(jù)庫會將結(jié)果暫時存放到臨時表空間中,以供后續(xù)使用。由于臨時表空間的使用過程涉及到大量的磁盤IO,因此臨時表空間的管理對于數(shù)據(jù)庫性能的影響非常大。正確地管理臨時表空間可以更大限度地減少磁盤IO,提高數(shù)據(jù)庫的性能。
然而,在實際的數(shù)據(jù)庫運維中,經(jīng)常會有臨時表空間占用磁盤空間過多的情況,這將導(dǎo)致磁盤空間的緊張甚至磁盤滿了,進而影響數(shù)據(jù)庫的正常運行。為了解決這一問題,我們需要采取一些有效的措施進行臨時表空間的管理和優(yōu)化。
一、檢查臨時表空間容量
在日常數(shù)據(jù)庫運維中,我們應(yīng)該經(jīng)常檢查臨時表空間的容量情況。當發(fā)現(xiàn)臨時表空間的容量占用過多時,我們需要盡快采取措施進行優(yōu)化??梢酝ㄟ^以下SQL語句查詢當前使用了多少臨時表空間:
“`sql
select TABLESPACE_NAME, sum(BYTES)/1024/1024 MB_USED,
(sum(MAXBYTES)-sum(BYTES))/1024/1024 MB_FREE,
sum(MAXBYTES)/1024/1024 MB_TOTAL
from v$tempfile
group by TABLESPACE_NAME;
“`
該語句將輸出每個表空間當前使用的空間、空閑空間和總?cè)萘?。通過這些信息,我們可以清楚地了解到臨時表空間的容量情況,并判斷是否需要進行優(yōu)化。
二、刪除不再使用的臨時表空間
在數(shù)據(jù)庫運維中,由于一些SQL語句未能正常執(zhí)行或運行時發(fā)生了異常,可能會導(dǎo)致臨時表空間沒有被正確地釋放,從而占用了大量的磁盤空間。此外,在數(shù)據(jù)庫備份和轉(zhuǎn)儲過程中,也可能產(chǎn)生大量的臨時表空間。這些不再使用的臨時表空間會對數(shù)據(jù)庫的性能帶來負面影響。因此,我們應(yīng)該在適當?shù)臅r候刪除這些不再使用的臨時表空間。
可以采用以下SQL語句檢查數(shù)據(jù)庫中不再使用的臨時表空間:
“`sql
select * from dba_temp_files where tablespace_name not in
(select distinct tablespace_name from v$tempfile);
“`
以上語句將從數(shù)據(jù)庫中查詢出不再使用的臨時表空間,這些臨時表空間可以被刪除以釋放磁盤空間。
三、刪除臨時表空間中已經(jīng)過期的臨時數(shù)據(jù)
由于臨時表空間的數(shù)據(jù)是暫時性的,所以在臨時表空間中存在很多已經(jīng)過期的臨時數(shù)據(jù)。如果不及時清除這些過期的臨時數(shù)據(jù),將對數(shù)據(jù)庫的性能產(chǎn)生一定的影響。因此,及時清除過期的臨時數(shù)據(jù)也是優(yōu)化臨時表空間的一個非常重要的措施。
可以采用以下SQL語句查找臨時表空間中的過期數(shù)據(jù):
“`sql
select * from v$sort_usage where timestamp
“`
該語句將查詢出臨時表空間中24小時內(nèi)未使用的臨時數(shù)據(jù),可以通過該語句清除掉已經(jīng)過期的臨時數(shù)據(jù)。
四、通過腳本自動化管理臨時表空間
除了手動管理臨時表空間,我們還可以采用腳本自動化管理臨時表空間。通過腳本自動化管理,不僅可以提高管理效率,還可以大大減少人為失誤的風(fēng)險。以下是一個簡單的腳本示例:
“`sql
BEGIN
FOR TEMP_TBL IN (SELECT A.tablespace_name tablespace_name, A.file_name file_name,
TO_CHAR(C.sysdate, ‘yyyymmdd’) system_date
FROM dba_temp_files A,V$TEMPORARY_LOBS B, V$SESSION C
WHERE A.file_id=B.file_id AND B.tablespace_name=A.tablespace_name
AND B.saddr=C.saddr AND C.username = ‘MYUSERNAME’)
LOOP
EXECUTE IMMEDIATE ‘ALTER TABLESPACE ‘||TEMP_TBL.tablespace_name||’ ADD TEMPFILE ”’||
REPLACE (TEMP_TBL.file_name,’.dbf’,”)||’_’||TEMP_TBL.system_date||
‘.dbf” SIZE 50M AUTOEXTEND ON NEXT 10M MAXSIZE 2023M’;
EXECUTE IMMEDIATE ‘ALTER TABLESPACE ‘||TEMP_TBL.tablespace_name||’ TEMPFILE ”’||
TEMP_TBL.file_name||”’ DROP INCLUDING DATAFILES’;
END LOOP;
END;
“`
以上腳本將刪除臨時表空間中過期的臨時數(shù)據(jù),并創(chuàng)建一個新的臨時表空間,以保證數(shù)據(jù)庫的正常運行。此外,我們還可以通過修改腳本中的參數(shù)來自定義臨時表空間的大小和自動擴展等行為,以滿足不同業(yè)務(wù)的需要。
優(yōu)化臨時表空間可以大大提高數(shù)據(jù)庫的性能,降低磁盤IO,同時也能夠釋放寶貴的磁盤空間。在實際的數(shù)據(jù)庫運維中,我們需要經(jīng)常檢查臨時表空間的容量情況,及時刪除不再使用的臨時表空間和過期的臨時數(shù)據(jù),并且可以通過腳本自動化管理臨時表空間,以保證數(shù)據(jù)庫的正常運行。隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展和數(shù)據(jù)量的不斷增長,數(shù)據(jù)庫性能優(yōu)化的問題將越來越受到企業(yè)的關(guān)注,我們需要不斷地學(xué)習(xí)和掌握數(shù)據(jù)庫運維和優(yōu)化的技能,以提高業(yè)務(wù)運行的效率和質(zhì)量。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計及定制高端網(wǎng)站建設(shè)服務(wù)!
OracleTemp臨時表空間處理
Temporary tablespace是oracle里臨時表空間 臨時表空間主要用途是在數(shù)據(jù)庫進行排序運算 管理索引 訪問視圖等操作時提供臨時的運算空間 當運算完成之后系統(tǒng)會磨高自動清理 當oracle里需要用到sort的時候 PGA中sort_area_size大小不夠時 將會把數(shù)據(jù)放入臨時表空間里進行排序 同時如果有異常情況的話 也會被放入臨時表空間 正常來說 在完成Select語句 create index等一些使用TEMP表空間的排序操作后 Oracle是會自動釋放掉臨時段的 但有些有侯我們則會遇到臨時段沒有被釋放 TEMP表空間幾乎滿的狀況 甚至是我們重漏游埋啟了數(shù)據(jù)庫仍沒有解決問題
排序是很耗資源的 Temp表空間滿了 關(guān)鍵是優(yōu)化你的語句 盡量使排序減少才是上策
Temp表空間滿時的處理方法
一 修改參數(shù)(僅適用于 i及 i以下版本)
修改一下TEMP表空間的storage參數(shù) 讓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以后只能創(chuàng)建本地管理的表空間
CREATE TABLESPACE TEST DATAFILE D:\TEST dbf SIZE M EXTENT MANAGEMENT DICTIONARY
CREATE TABLESPACE TEST DATAFILE D:\TEST dbf SIZE M EXTENT MANAGEMENT LOCAL;
三 重啟數(shù)據(jù)庫庫
庫重啟時 Smon進程會完成臨時段釋放 TEMP表空間的清理操作 不過很多的時侯我們的庫是不允許down的 所以這種方法缺少了一點的應(yīng)用機會 不過這種方法還是很好用的
四 使用診斷事件的一種方法 也是最有效的一種方法
確定TEMP表空間的ts#
SQL>select ts# name from sys ts$ ;
TS# NAME
SYSTEM
UNDOTBS
SYSAUX
TEMP
USERS
UNDOTBS
執(zhí)行清理操作
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
SYSTEMTEMP
DBSNMPTEMP
SYANTEMP
創(chuàng)建中轉(zhuǎn)臨時表空間
create temporary tablespace TEMP TEMPFILE E:\ORACLE\ORADATA\ORCL\temp DBF SIZE M REUSE AUTOEXTEND ON NEXT M MAXSIZE UNLIMITED;
改變?nèi)笔∨R時表空間 為剛剛創(chuàng)建的新臨時表空間temp
alter database default temporary tablespace temp ;
刪除原來臨時表空間
drop tablespace temp including contents and datafiles;
重新創(chuàng)建臨時表空間
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;
刪除中轉(zhuǎn)用臨時表空間
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/202311/17017
關(guān)于sql 數(shù)據(jù)庫刪除臨時表空間的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),香港虛擬主機被稱為香港虛擬空間/香港網(wǎng)站空間,或者簡稱香港主機/香港空間。香港虛擬主機特點是免備案空間開通就用, 創(chuàng)新互聯(lián)香港主機精選cn2+bgp線路訪問快、穩(wěn)定!
分享文章:SQL數(shù)據(jù)庫優(yōu)化:簡單快捷刪除臨時表空間(sql數(shù)據(jù)庫刪除臨時表空間)
文章鏈接:http://www.dlmjj.cn/article/coppidh.html


咨詢
建站咨詢
