資源描述:
《ORACLE中的一些問題——臨時(shí)表空間》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、1臨時(shí)表空間1.1什么是臨時(shí)表空間????在Oracle數(shù)據(jù)庫中進(jìn)行排序、分組匯總、索引等到作時(shí),會(huì)產(chǎn)生很多的臨時(shí)數(shù)據(jù)。如有一張員工信息表,數(shù)據(jù)庫中是安裝記錄建立的時(shí)間來保存的。如果用戶查詢時(shí),使用OrderBY排序語句指定按員工編號(hào)來排序,那么排序后產(chǎn)生的所有記錄就是臨時(shí)數(shù)據(jù)。對(duì)于這些臨時(shí)數(shù)據(jù),Oracle數(shù)據(jù)庫是如何處理的呢?通常情況下,Oracle數(shù)據(jù)庫會(huì)先將這些臨時(shí)數(shù)據(jù)存放到內(nèi)存的PGA(程序全局區(qū))內(nèi)。在這個(gè)程序全局區(qū)中有一個(gè)叫做排序區(qū)的地方,專門用來存放這些因?yàn)榕判虿僮鞫a(chǎn)生的臨時(shí)數(shù)據(jù)。但是這個(gè)分區(qū)的容量是有限的。當(dāng)這個(gè)分區(qū)的大小不足以容納排序后所產(chǎn)生
2、的記錄時(shí),數(shù)據(jù)庫系統(tǒng)就會(huì)將臨時(shí)數(shù)據(jù)存放到臨時(shí)表空間中。這就是臨時(shí)表空間的來歷??雌饋砗孟襁@個(gè)臨時(shí)表空間是個(gè)臨時(shí)工,對(duì)于數(shù)據(jù)庫的影響不會(huì)有多大。其實(shí)大家這是誤解這個(gè)臨時(shí)表空間了。在用戶進(jìn)行數(shù)據(jù)庫操作時(shí),排序、分組匯總、索引這些作業(yè)是少不了,其會(huì)產(chǎn)生大量的臨時(shí)數(shù)據(jù)。為此基本上每個(gè)數(shù)據(jù)庫都需要用到臨時(shí)表空間。而如果這個(gè)臨時(shí)表空間設(shè)置不當(dāng)?shù)脑?,則會(huì)給數(shù)據(jù)庫性能帶來很大的負(fù)面影響。?1.2臨時(shí)表空間作用????索引create或rebuild????Orderby或groupby????Distinct操作????Union或intersect或minus????Sort-
3、mergejoins????analyze?1.1臨時(shí)表空間建立???以下命令是創(chuàng)建一個(gè)臨時(shí)表空間.其命令和創(chuàng)建其它表空間不同的地方是增加temporay關(guān)建字.請(qǐng)注意.如果tablespace設(shè)置的是maxsizeunlimited那么,臨時(shí)表空間也會(huì)一直在需要的時(shí)候增長.如果在創(chuàng)建數(shù)據(jù)庫時(shí)沒有指定默認(rèn)臨時(shí)表空間.那么會(huì)用system表空間作為默認(rèn)臨時(shí)表空間當(dāng)system表空間是本地管理時(shí),你必須定義最少一個(gè)默認(rèn)表空間在創(chuàng)建數(shù)據(jù)庫的時(shí)候.本地管理的system表空間不能作為默認(rèn)臨時(shí)表空間.???createtemporarytablespaceTEMP1TEMP
4、FILE'/oradata/TEMP1_01.dbf'size100M;???臨時(shí)表空間與正常的表空間還有以下區(qū)別????1.Tempfiles總是被設(shè)置為NOLOGGING模式????2.不能把一個(gè)tempfile設(shè)置成readonly模式????3.不能重命名一個(gè)tempfile????4.不能通過alterdatabase來創(chuàng)建一個(gè)tempfile????5.當(dāng)你創(chuàng)建或者重寫tempfile大小的時(shí)候,數(shù)據(jù)通常不會(huì)自動(dòng)分配tempfile指定的大小的????6.磁盤空間給它(即不會(huì)初始化),但是會(huì)在塊被訪問之前分配.(這也是為什么創(chuàng)建臨時(shí)表空間會(huì)比平時(shí)表空間
5、要快的多的原因)????7.tempfile的信息存儲(chǔ)在dba_temp_files,動(dòng)態(tài)視圖v$tempfile中.不在dba_data_files或者v$datafile中.?????臨時(shí)表空間的信息不會(huì)記錄在controlfile中,所以當(dāng)啟動(dòng)打開數(shù)據(jù)庫時(shí),不會(huì)做臨時(shí)表空間的校驗(yàn),即,即使臨時(shí)表空間不存在也可以打開數(shù)據(jù)庫(默認(rèn)情況下oracle會(huì)自動(dòng)創(chuàng)建)?1.2臨時(shí)表空間修改大小???ALTERdatabaseTEMPFILE'F:oracleproduct10.2.0oradataobpmTEMP01.dbf'resize100M;?1.1臨
6、時(shí)表空間刪除???droptablespacetemp01includingcontentsanddatafiles;???注意以上語句并不會(huì)真正的刪除dbf文件.所以下次新建的時(shí)候如果是已存在一的file最好在新建表空間語名中加上reuse?1.2將當(dāng)前臨時(shí)表空間指定為新的臨時(shí)表空間??alterdatabasedefaulttemporarytablespaceTEMP1;????查看當(dāng)前數(shù)據(jù)庫默認(rèn)臨時(shí)表空間:???select*fromdatabase_propertieswhereproperty_name='DEFAULT_TEMP_TABLESPACE
7、'?1.3監(jiān)空臨時(shí)表空間使用大小???表空總大小????selecttablespace_name,(blocks*8)/1024fromdba_temp_files;????表空間已使用大小?????select(blocks*8)/1024fromv$sort_usage;????可以通過v$sort_usage查看具體的詳細(xì)信息.比如是什么操作用到temp表空間.哪名sql,用了多少個(gè)段等等.????在dba_segment,dba_extents中沒有查看臨時(shí)表空間段和臨時(shí)表空間的擴(kuò)展.????據(jù)說臨時(shí)表空間用了就不會(huì)回收段.想查證一下.但是沒有找到資料,
8、我看V$s