??????事務是用來保證數據的一致性( integrity )而鎖是保證數據的并發(控制多個事務的并發)( concurrency )。 ? 鎖的級別越高,可能會影響數據庫的并發。鎖的級別越低一般來說數據庫的并發越好。 ? 鎖在 JDBC,JTA 以及容器管理的事務中的用法基本一樣,也有寫不同,主要在 JTA 分布式事務上個別又差異。 事務只是用來保證,數據一致性,一致性包括 : 能否保證與其他事務的隔離,以及能否在同一事務中保證重復讀,臟讀,臟寫等等方面。 ? Oracle 在不是手工加鎖的情況下, ORACLE 會自動調度鎖。 ORACLE 自動調度鎖得執行順序,一般不會發生死鎖現象。有些數據庫會自動調度數據庫鎖得級別,這就增加了死鎖的可能, ORACLE 永遠不會自動調度鎖的級別,死鎖發生時, oracle 也會去自動調度,這要延時一段時間, ORACLE 自己的策略,會 ROLLBACK 一個事務,以保證發生死鎖的 2 個事務都執行下去。 ? 鎖的種類很多,有 DML,DDL 鎖以及其他,平時我們開發過程中主要是 DML,DDL 鎖。 DML 鎖又分很多方面:
RS: row share RX: row exclusive S: share SRX: share row exclusive X: exclusive??
( 1 ) RS 可以通過一下聲明方式來鎖定表的行
SELECT ... FROM table ... FOR UPDATE OF ... ;?
LOCK TABLE table IN ROW SHARE MODE;
一旦被 RS 鎖定,不允許再對表進行 LOCK TABLE table IN EXCLUSIVE MODE
( 2 ) RX 可以通過一下聲明方式來鎖定表的行
LOCK TABLE table IN ROW EXCLUSIVE MODE;
一旦通過 RX 鎖定了表中的行,不允許對表進行下列操作
LOCK TABLE table IN SHARE MODE;?
LOCK TABLE table IN SHARE EXCLUSIVE MODE;
LOCK TABLE table IN EXCLUSIVE MODE;
( 3 ) s ( share table lock )可以通過以下方式鎖定表
LOCK TABLE table IN SHARE MODE (可以說有多個 S 鎖定一個表) ;
允許進行的操作,所有的查詢以及 SELECT ... FOR UPDATE, 和 LOCK TABLE ... IN SHARE MODE ,只允許本事務內更新數據( update ,這種情況也是只允許當前表上就一個 S 鎖)
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;
LOCK TABLE table IN EXCLUSIVE MODE;
LOCK TABLE table IN ROW EXCLUSIVE MODE;
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;
比 S 少了一點,這里只是允許一個 SRX 鎖定一個表
LOCK TABLE table IN SHARE MODE;
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;
LOCK TABLE table IN ROW EXCLUSIVE MODE;
LOCK TABLE table IN EXCLUSIVE MODE;
( 5 ) X 級別最高的鎖定形式: LOCK TABLE table IN EXCLUSIVE MODE;
Table 13-4 Locks Obtained By DML Statements
DML Statement | Row Locks? | Mode of Table Lock |
SELECT ... FROM table | ? | ? |
INSERT INTO table ... | X | RX |
UPDATE table ... | X | RX |
DELETE FROM table ... | X | RX |
SELECT ... FROM table ... ???FOR?UPDATE OF ... | X | RS- |
LOCK TABLE table IN ... | ? | ? |
ROW SHARE MODE | ? | RS |
ROW EXCLUSIVE MODE | ? | RX |
SHARE MODE | ? | S |
SHARE EXCLUSIVE MODE | ? | SRX |
EXCLUSIVE MODE | ? | X |
?
???????
這個表上很清楚
posted on 2006-11-30 10:36
小小程序程序員混口飯吃 閱讀(4532)
評論(2) 編輯 收藏 所屬分類:
java 、
oracle