隨筆-109  評論-187  文章-25  trackbacks-0
          ??????事務(wù)是用來保證數(shù)據(jù)的一致性( integrity )而鎖是保證數(shù)據(jù)的并發(fā)(控制多個事務(wù)的并發(fā))( concurrency )。 ? 鎖的級別越高,可能會影響數(shù)據(jù)庫的并發(fā)。鎖的級別越低一般來說數(shù)據(jù)庫的并發(fā)越好。 ? 鎖在 JDBC,JTA 以及容器管理的事務(wù)中的用法基本一樣,也有寫不同,主要在 JTA 分布式事務(wù)上個別又差異。 事務(wù)只是用來保證,數(shù)據(jù)一致性,一致性包括 : 能否保證與其他事務(wù)的隔離,以及能否在同一事務(wù)中保證重復(fù)讀,臟讀,臟寫等等方面。 ? Oracle 在不是手工加鎖的情況下, ORACLE 會自動調(diào)度鎖。 ORACLE 自動調(diào)度鎖得執(zhí)行順序,一般不會發(fā)生死鎖現(xiàn)象。有些數(shù)據(jù)庫會自動調(diào)度數(shù)據(jù)庫鎖得級別,這就增加了死鎖的可能, ORACLE 永遠(yuǎn)不會自動調(diào)度鎖的級別,死鎖發(fā)生時, oracle 也會去自動調(diào)度,這要延時一段時間, ORACLE 自己的策略,會 ROLLBACK 一個事務(wù),以保證發(fā)生死鎖的 2 個事務(wù)都執(zhí)行下去。 ? 鎖的種類很多,有 DML,DDL 鎖以及其他,平時我們開發(fā)過程中主要是 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 鎖定,不允許再對表進(jìn)行 LOCK TABLE table IN EXCLUSIVE MODE

          ( 2 ) RX 可以通過一下聲明方式來鎖定表的行
          INSERT INTO table ... ;

          UPDATE table ... ;

          DELETE FROM table ... ;?

          LOCK TABLE table IN ROW EXCLUSIVE MODE;
          一旦通過 RX 鎖定了表中的行,不允許對表進(jìn)行下列操作

          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 鎖定一個表) ;
          允許進(jìn)行的操作,所有的查詢以及 SELECT ... FOR UPDATE, 和 LOCK TABLE ... IN SHARE MODE ,只允許本事務(wù)內(nèi)更新數(shù)據(jù)( update ,這種情況也是只允許當(dāng)前表上就一個 S 鎖)
          不允許的操作
          LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;

          LOCK TABLE table IN EXCLUSIVE MODE;

          LOCK TABLE table IN ROW EXCLUSIVE MODE;
          ( 4 ) SRX 通過以下方式鎖定表
          LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;
          比 S 少了一點(diǎn),這里只是允許一個 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;
          只允許其他事務(wù) QUERY 不允許其他操作。

          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)  編輯  收藏 所屬分類: javaoracle

          評論:
          # re: 事務(wù)與鎖的一些總結(jié) 2006-12-08 14:03 | BeanSoft
          學(xué)習(xí)一下!謝了!  回復(fù)  更多評論
            
          # re: 事務(wù)與鎖的一些總結(jié) 2006-12-08 15:23 | loocky
          大家一起學(xué)習(xí),這是從oracle的官方網(wǎng)站上看到的東西,就隨手總結(jié)了一下,國內(nèi)目前還沒有相關(guān)的文章的翻譯,我也希望大家能夠翻譯一些東西,整理出來。  回復(fù)  更多評論
            
          主站蜘蛛池模板: 常宁市| 海林市| 宁陕县| 天水市| 宁陵县| 康乐县| 昌图县| 浑源县| 琼海市| 柞水县| 德清县| 元氏县| 通化市| 泉州市| 海宁市| 慈溪市| 承德县| 靖州| 龙里县| 米脂县| 太康县| 合川市| 虞城县| 大城县| 无极县| 水富县| 广丰县| 台东市| 武胜县| 洞口县| 长治市| 柳江县| 双城市| 华阴市| 敖汉旗| 邹平县| 疏勒县| 黄骅市| 罗平县| 南江县| 泸水县|