2016-09-07 79 views
0

我有兩個查詢刪除行和刪除表鎖甲骨文

1. delete from x;

2. delete from x where y='a'

Oracle是否11克提供上述查詢鎖的類型?

並假設我們反覆下面的查詢程序中的

delete from x where y='$a'

讓一個擁有數1,2,3,4的名單.. 現在,如果同樣的程序從2服務器調用會1服務器刪除1,3 ...和其他服務器將刪除2,4 ...?

+0

http://docs.oracle.com/cd/E25178_01/server.1111/e25789/consist.htm – OldProgrammer

+0

這兩個查詢在不同的交易? – saphsys

+0

都查詢不同的交易 – srinathshil

回答

1

1)由於沒有where子句,所有行將被鎖定在該用戶會話的表中。 2)只有那些匹配where子句的行纔會被鎖定。 Oracle通過在該行的數據塊中設置一個鎖定位來使用行級鎖定。

除非和直到發出提交 - 沒有其他會話會看到這些刪除。 Oracle將使用回滾信息 - 爲每個單獨的刪除(或任何DML操作)語句創建,爲任何其他會話提供一致的讀取視圖。含義:其他會話將看到表沒有的刪除。一旦行被鎖定 - 其他會話將被阻止對這些行發出刪除,並且用戶將被阻止,等待這些行被提交或回滾。你可以用兩個sqlplus會話來測試這個。

如果您想了解更多關於鎖的信息,請參閱Tom Kyte的優秀書籍Expert Oracle DB Architecture。

是的,兩個不同的會話可以刪除不同的集合的行。 Oracle默認不進行全表鎖定(它在DML期間鎖定表以防止在更改未決時對該表進行結構更改),因此一個會話不會阻塞另一個會話。

-1

沒問題。您可以刪除不存在的記錄。但是你不能忘記提交事務。