2010-07-07 32 views
1

oracle如何處理多個用戶在同一個數據對象上執行的dml語句?假設,oracle中的多個用戶/提交場景的dml

如果有一個名爲EMP(empname varchar2(30))和用戶一個空表「A」讓一個進入它

使用,

insert into emp values('A'); 

但還沒有提交它。

如果登錄到同一數據庫的另一個用戶B「承諾,將他/她看到了由「A‘(即,’A」在EMP表)進行DML操作?

與此主題相關的其他場景/鏈接將不勝感激。 在此先感謝。

回答

5

在您提交之前,您的會話之外沒有看到交易。如果另一個用戶登錄,那麼他們將看到該表以其最後提交狀態存儲在數據庫中的表。這就是撤消空間,重做日誌等的原因。在你的場景中,即使B已經提交了他的事務,用戶B也不會看到A的事務,因爲A沒有提交他們的更改。

1

有關Oracle中數據併發性和事務的完整信息,請參見Oracle Concepts Guide

+0

感謝您的鏈接。 – ssr532 2010-07-08 06:13:26

1

即使未提交,多個插入dml操作也可能發生衝突。如果上面的插入插入到唯一索引的列(例如主鍵)中,則直到提交或回滾用戶B不能插入相同的值 - 它將被阻塞。因此,從某種意義上說,用戶B「看到」未由A提交的插入,儘管用戶B不能選擇由A插入的值。