ORACLE temp表的簡介

君落塵發表於2015-03-18

【前言】今天開發人員遇到一個temp表找不到資料的問題,稍微瞭解了一下,感覺還有很多知識點的,所以整理下來供大家參考;

 

【簡介】業務的實現過程中並不是所有的資料都是永久的存放在資料庫中的,有些業務在實現的過程中會通過一些臨時表或中間表去存放資料,當業務實現完成後臨時表或中間表的資料就可以刪除掉。基於這個業務特性,ORACLE的GLOBAL TEMPORARY TABLE就滿足了這個業務的功能;

【注】有些開發人員會建立一個實體表,就臨時存放資料,當這個業務過程完成之後再把這個實體表drop掉,實現這個temp表的功能;

 

【詳細介紹】

概念描述:臨時表中的資料只對當前Session有效,每個Session都有自己的臨時資料,並且不能訪問其它Session的臨時表中的資料。因此,臨時表不需要DML鎖。

當一個會話結束(使用者正常退出 使用者不正常退出ORACLE例項崩潰)或者一個事務結束的時候,Oracle對這個會話的表執行TRUNCATE 語句清空臨時表資料。

但不會清空其它會話臨時表中的資料,你可以索引臨時表和在臨時表基礎上建立檢視。同樣,建立在臨時表上的索引也是臨時的,也是隻對當前會話或者事務有效。

 

類別:Oracle臨時表分為會話級臨時表事務級臨時表

會話級臨時表:指臨時表中的資料只在會話生命週期之中存在,當使用者退出會話結束的時候,Oracle自動清除臨時表中資料。

事務級臨時表:指臨時表中的資料只在事務生命週期中存在。當一個事務結束(commit or rollback),Oracle自動清除臨時表中資料。

 

【建立指令碼】

ON COMMIT DELETE ROWS :建立事務級臨時表的方法

指令碼:

create global temporary  table TEST1
( id     number)
on commit delete rows ;

 

ON COMMIT PRESERVE ROWS :建立會話級臨時表的方法

指令碼:

create global temporary table TEST3
(id     number)
on commit preserve rows ;

 

【實驗操作】

一、建立global temporary  table TEST1,插入資料1,在session1中檢視資料;

image

image

對於global temporary  table ,session之間是隔離的狀態;

 

二、ON COMMIT DELETE ROWS的測試
image

資料只在事務生命週期中存在。當一個事務結束(commit or rollback),Oracle自動清除臨時表中資料。

 

三、ON COMMIT PRESERVE ROWS 會話級臨時表的測試

image

進行COMMIT之後還能查詢到插入的資料,雖然事務結束了,但是會話還是繼續存在的;

 

image

退出之後重新登入,表中的資料已經被truncate,因為會話已經結束了,這是基於會話級別的臨時表;

 

【總結】oracle的temp表的這兩種模式已經能夠滿足實際的開發過程中的關於資料臨時存放的問題了。理解技術就是為了更好的利用技術,理解了臨時表的這兩種設定,對於實際工作的進行有很大的幫助的;

 

.....................................................................................................................................................................…………………………………...

本文作者:JOHN,某上市公司DBA,業餘時間專注於資料庫的技術管理,從管理的角度去運用技術。

ORACLE技術部落格:ORACLE 獵人筆記               資料庫技術群:367875324 (請備註ORACLE管理 ) 

......................................................................................................................................................................…………………………………..

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29819001/viewspace-1464126/,如需轉載,請註明出處,否則將追究法律責任。

相關文章