oracle如何處理多個用戶在同一個數據對象上執行的dml語句?假設,oracle中的多個用戶/提交場景的dml
如果有一個名爲EMP(empname varchar2(30))
和用戶一個空表「A
」讓一個進入它
使用,
insert into emp values('A');
但還沒有提交它。
如果登錄到同一數據庫的另一個用戶B
「承諾,將他/她看到了由「A
‘(即,’A
」在EMP
表)進行DML操作?
與此主題相關的其他場景/鏈接將不勝感激。 在此先感謝。
oracle如何處理多個用戶在同一個數據對象上執行的dml語句?假設,oracle中的多個用戶/提交場景的dml
如果有一個名爲EMP(empname varchar2(30))
和用戶一個空表「A
」讓一個進入它
使用,
insert into emp values('A');
但還沒有提交它。
如果登錄到同一數據庫的另一個用戶B
「承諾,將他/她看到了由「A
‘(即,’A
」在EMP
表)進行DML操作?
與此主題相關的其他場景/鏈接將不勝感激。 在此先感謝。
在您提交之前,您的會話之外沒有看到交易。如果另一個用戶登錄,那麼他們將看到該表以其最後提交狀態存儲在數據庫中的表。這就是撤消空間,重做日誌等的原因。在你的場景中,即使B已經提交了他的事務,用戶B也不會看到A的事務,因爲A沒有提交他們的更改。
有關Oracle中數據併發性和事務的完整信息,請參見Oracle Concepts Guide。
即使未提交,多個插入dml操作也可能發生衝突。如果上面的插入插入到唯一索引的列(例如主鍵)中,則直到提交或回滾用戶B不能插入相同的值 - 它將被阻塞。因此,從某種意義上說,用戶B「看到」未由A提交的插入,儘管用戶B不能選擇由A插入的值。
感謝您的鏈接。 – ssr532 2010-07-08 06:13:26