Oracle臨時(shí)表空間管理和優(yōu)化操作
一、臨時(shí)表空間簡介
在執(zhí)行SQL時(shí),經(jīng)常會遇到排序操作,當(dāng)結(jié)果集無法放在內(nèi)存中時(shí),Oracle就會使用臨時(shí)表空間來排序。臨時(shí)表空間中不能創(chuàng)建持久性對象,用戶唯一能創(chuàng)建的就是臨時(shí)表,而且隨著用戶會話退出,臨時(shí)表也會被刪除。
當(dāng)Oracle安裝完成時(shí),默認(rèn)就已經(jīng)創(chuàng)建了1個(gè)臨時(shí)表空間TEMP,且所有未顯式指定使用其他臨時(shí)表空間的用戶,都會使用這個(gè)臨時(shí)表空間,使用下面的SQL可以查詢數(shù)據(jù)庫的默認(rèn)臨時(shí)表空間:
select property_name, property_value from database_properties where property_name='DEFAULT_TEMP_TABLESPACE';
臨時(shí)表空間的底層使用的是臨時(shí)文件(tempfile),通常采用本地管理策略(Locally Management),臨時(shí)表空間不會生成redo日志,根據(jù)其服務(wù)的實(shí)例數(shù)量還可以分為:
- 本地臨時(shí)表空間,通常保存在本地磁盤,只能給一個(gè)實(shí)例訪問
- 共享臨時(shí)表空間:通常保存在共享存儲上,可以被多個(gè)實(shí)例同時(shí)訪問
二、臨時(shí)表空間管理
雖然Oracle初始已經(jīng)建立了一個(gè)臨時(shí)表空間,但用戶也可以根據(jù)自身需求對臨時(shí)表空間進(jìn)行定制。
2.1 創(chuàng)建臨時(shí)表空間
使用create temporary tablespace語句創(chuàng)建臨時(shí)表空間,語法和創(chuàng)建普通表空間類似,不同點(diǎn)在于其需要指定temporary和tempfile關(guān)鍵字。
示例:創(chuàng)建一個(gè)臨時(shí)表空間temptbs01,文件大小20M,reuse關(guān)鍵字指示如果文件已存在則重用:
create temporary tablespace temptbs01 tempfile '/u01/app/oracle/oradata/PROD/temptbs01.dbf' size 20m reuse;
如果開啟了OMF特性,可以不指定文件屬性,只提供表空間名稱即可:
create temporary tablespace temptbs02;
創(chuàng)建好的臨時(shí)表空間及其臨時(shí)文件信息可以通過dba_temp_files查看:
select tablespace_name, file_name,status, autoextensible from dba_temp_files;
2.2 修改臨時(shí)表空間
可以用alter tablespace語句修改表空間屬性,例如添加,刪除臨時(shí)文件,修改在線/離線狀態(tài),調(diào)整臨時(shí)文件大小等。
示例:為temptbs01添加一個(gè)數(shù)據(jù)文件,大小10M,自動(dòng)擴(kuò)展:
alter tablespace temptbs01 add tempfile '/u01/app/oracle/oradata/PROD/temptbs01_2.dbf' size 10M autoextend on next 10m;
示例:將上面添加的數(shù)據(jù)文件刪除:
alter tablespace temptbs01 drop tempfile '/u01/app/oracle/oradata/PROD/temptbs01_2.dbf';
示例:修改temptbs01臨時(shí)文件的在線/離線狀態(tài)(不能修改臨時(shí)表空間的在線/離線狀態(tài)):
alter database tempfile '/u01/app/oracle/oradata/PROD/temptbs01.dbf' offline; alter database tempfile '/u01/app/oracle/oradata/PROD/temptbs01.dbf' online;
示例:修改臨時(shí)文件的大小,將temptbs01的臨時(shí)文件修改為30m:
alter database tempfile '/u01/app/oracle/oradata/PROD/temptbs01.dbf' resize 30m;
2.3 查看空間使用情況
查詢dba_temp_free_space視圖可以查看當(dāng)前臨時(shí)表空間的使用情況,free_space字段指示了可用空間:
select * from dba_temp_free_space;
2.4 收縮臨時(shí)表空間
對于文件可以自動(dòng)擴(kuò)展的臨時(shí)表空間,當(dāng)空間不夠時(shí),Oracle會自動(dòng)擴(kuò)展文件大小,一個(gè)很大的任務(wù),就可以導(dǎo)致臨時(shí)表空間消耗很多磁盤。如果日常用不到這么大的表空間,可以手動(dòng)收縮以回收磁盤空間。
回收表空間是一個(gè)在線操作,正在使用的會話可以正常分配空間,不受影響。
示例:用alter tablespace … shrink space …; 可以回收可用空間,keep子句指示盡量收縮到25m:
alter tablespace temptbs01 shrink space keep 25m;
或:用alter tablespace … shrink tempfile …; 指定收縮某個(gè)臨時(shí)文件:
alter tablespace temptbs01 shrink tempfile '/u01/app/oracle/oradata/PROD/temptbs01.dbf' keep 20m;
2.5 刪除臨時(shí)表空間
使用alter tablespace … drop…;語句可以刪除臨時(shí)表空間,你可以選擇是否保留臨時(shí)文件,如果保留臨時(shí)文件,下次再次指定同名文件時(shí)需要用reuse關(guān)鍵字重用文件。
示例:刪除臨時(shí)表空間temptbs01及其臨時(shí)文件,省略including contents and datafiles子句則會保留臨時(shí)文件:
drop tablespace temptbs01 including contents and datafiles;
三、使用臨時(shí)表空間組
臨時(shí)表空間組是一個(gè)邏輯概念,它由1或多個(gè)臨時(shí)表空間組成,可以作為一個(gè)整體分配給數(shù)據(jù)庫或用戶使用。在高并發(fā)環(huán)境,多個(gè)臨時(shí)表空間可以更好的減少爭用現(xiàn)象,并且Oracle的并行執(zhí)行特性也可以利用多個(gè)臨時(shí)表空間提升執(zhí)行性能。
臨時(shí)表空間組不需要顯式創(chuàng)建,只需要使用alter tablespace … tablespace group …; 將某個(gè)臨時(shí)表空間加入組即可(創(chuàng)建表空間時(shí)也可加入)。
第一步,將temptbs01加入組group1,這會隱式創(chuàng)建group1:
alter tablespace temptbs01 tablespace group group1;
第二步(可選),可以繼續(xù)將其他臨時(shí)表空間加入組,組成員的數(shù)量沒有限制:
alter tablespace temptbs02 tablespace group group1;
通過dba_tablespace_groups可以看到目前group1中已經(jīng)有2個(gè)表空間:
select * from dba_tablespace_groups;
第三步:將組指定為數(shù)據(jù)庫默認(rèn)臨時(shí)表空間(alter database)或指定給用戶(alter user):
alter database default temporary tablespace group1; alter user hr temporary tablespace group1;
使用alter database指定空的組名可以將臨時(shí)表空間移出組,當(dāng)最后一個(gè)表空間移出組時(shí),組自動(dòng)刪除(先取消引用):
alter tablespace temptbs01 tablespace group '';
以上就是Oracle臨時(shí)表空間管理和優(yōu)化操作的詳細(xì)內(nèi)容,更多關(guān)于Oracle臨時(shí)表空間的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Oracle 左連接(+)加號用法及常用語法之間的關(guān)系
通過分析左連接(+)加號的寫法和一些常用語法之間的聯(lián)系,了解到Oracle 加號(+)的用法。本文重點(diǎn)給大家介紹Oracle 左連接(+)加號用法及常用語法之間的關(guān)系 ,感興趣的朋友跟隨小編一起看看吧2018-10-10Oracle 12c 新特性之多線程數(shù)據(jù)庫操作
這篇文章主要介紹了Oracle 12c 新特性之多線程數(shù)據(jù)庫操作,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08與虛擬機(jī)Oracle連接出現(xiàn)ora-12154問題的解決方法
這篇文章主要介紹了與虛擬機(jī)Oracle連接出現(xiàn)ora-12154問題的解決方法,需要的朋友可以參考下2017-03-03Oracle數(shù)據(jù)表保留一條重復(fù)數(shù)據(jù)簡單方法
最近開發(fā)的時(shí)候遇到一個(gè)任務(wù),需要對重復(fù)的數(shù)據(jù)進(jìn)行篩選,所以下面這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)表保留一條重復(fù)數(shù)據(jù)的簡單方法,需要的朋友可以參考下2023-11-11Oracle鎖表的解決方法及避免鎖表問題的最佳實(shí)踐
在 Oracle 數(shù)據(jù)庫中,鎖表或鎖超時(shí)相信大家都不陌生,是一個(gè)常見的問題,尤其是在執(zhí)行 DML(數(shù)據(jù)操作語言)語句時(shí),本文將詳細(xì)介紹如何解決鎖表問題以及如何查找引起鎖表的 SQL 語句,并提供避免鎖表問題的最佳實(shí)踐,需要的朋友可以參考下2024-11-11mybatis?調(diào)用?Oracle?存儲過程并接受返回值的示例代碼
這篇文章主要介紹了mybatis?調(diào)用?Oracle?存儲過程?并接受返回值,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08