2010-04-21 62 views
3

我有一個全局臨時表,它在提交時被設置爲刪除。它在併發問題上的表現如何?我的意思是如果另一個會話想要使用該全局臨時表會發生什麼?答案可能不會是「他們共享相同的數據」。全局臨時表併發性

現在,如果我的猜測是正確的:),表是否鎖定,直到第一個連接提交,或dbms是否爲每個連接創建一個全局臨時表? (類似表的一個實例?)

回答

7

documentation

的數據在臨時表是僅可見的數據插入到表中的會話。

每個會話將有其邏輯獨立臨時表的副本。

由於您無法看到其他會話的數據,並且由於Oracle在行級別處理鎖定,所以您不能被其他會話的DML阻止。併發DML(插入,刪除,更新)不會影響其他會話。

只有DDL需要在表上的鎖(即:ALTER TABLE ...)

+0

我感興趣的是這個問題 - 你說,全局臨時表是不是鎖定一組的好方法行?如果我有兩個線程需要在給定時間的條目列表上進行操作,那麼全局臨時表可以幫助每個線程抓取這個條目列表的一部分而不重疊? – Dirk 2011-05-06 04:57:14

+1

@ michael:每個線程都有自己的會話(或者他們不能並行運行),所以他們不會看到彼此的臨時數據。臨時表不允許你鎖定不重疊的行,你將需要其他功能。請參閱[您的問題](http://stackoverflow.com/q/5907003/119634)。 – 2011-05-06 08:47:02