Decode360's Blog

          業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
          Oracle中的鎖
          ?
          ??? Oracle中的鎖可以分為三類:DDL鎖DML鎖內(nèi)部鎖
          ?
          ??? 基本上所有的鎖都可以由Oracle內(nèi)部自動創(chuàng)建和釋放,但是其中的DDL和DML鎖是可以通過命令進(jìn)行直接或者間接的管理的,只有內(nèi)部鎖是必須有Oracle自動管理。
          ?
          ??? 1、內(nèi)部鎖(Latch)--也叫閂
          ?
          ??? 由Oracle自動管理,以保護(hù)內(nèi)部數(shù)據(jù)庫結(jié)構(gòu),例如數(shù)據(jù)文件等。比如Oracle要把用戶更新的數(shù)據(jù)寫入緩沖區(qū),這時候Oracle就會在該緩沖區(qū)上加上latch,用來防止DBWR把他寫出到磁盤,因為如果沒有這個Latch,DBWR會把一半新一半老沒有用的數(shù)據(jù)寫到磁盤上。
          ?
          ??? 2、DDL鎖
          ?
          ??? 在使用Create、Truncate、Alter時自動創(chuàng)建,以確保在執(zhí)行過程中沒有其他事務(wù)對資源進(jìn)行訪問。
          ?
          ??? 3、DML鎖
          ?
          ??? DML鎖在事務(wù)開始時創(chuàng)建,在事務(wù)提交或回滾是釋放。ROLLBACK SAVEPOINT同
          ?
          ?
          鎖的模式
          ?
          ??? Oracle中的鎖可以分為以下幾種模式:共享鎖(S)排他鎖(X)行級共享鎖(RS)行級排他鎖(RX)共享行級排他鎖(SRX)
          ?
          ??? 其中RS鎖是限制最少的鎖,而X鎖是限制最多的鎖。相應(yīng)的操作自動產(chǎn)生鎖的對應(yīng)關(guān)系如下:
          ??? * INSERT、UPDATE、DELETE??--RX鎖
          ??? * CREATE? --S鎖
          ??? * ALTER? --X鎖
          ?
          ??? 1、共享鎖(SHARE)
          ??? LOCK TABLE table_name IN SHARE MODE
          ?
          ??? 某事務(wù)使用S鎖鎖定表時,只允許其他事務(wù)使用S鎖鎖定該表,不能修改數(shù)據(jù)
          ?
          ??? 2、排他鎖(EXCLUSIVE)
          ??? LOCK TABLE table_name IN EXCLUSIVE MODE
          ?
          ??? 某事務(wù)對表加了X鎖之后,不再允許其他事務(wù)鎖定該表
          ?
          ??? 3、行級共享鎖(ROW SHARE)
          ??? LOCK TABLE table_name IN ROW SHARE MODE
          ?
          ??? 對相應(yīng)行加上RS鎖后,仍然允許其他事務(wù)加RS鎖
          ?
          ??? 4、行級排他鎖(ROW EXCLUSIVE)
          ??? LOCK TABLE table_name IN ROW EXCLUSIVE MODE
          ?
          ??? 對相應(yīng)行加上RX鎖后,其他事務(wù)不能再對該表加鎖
          ?
          ??? 5、共享行級排他鎖(SHARE ROW EXCLUSIVE)
          ??? LOCK TABLE table_name IN SHARE ROW EXCLUSIVE MODE
          ?
          ??? 對應(yīng)行加X鎖,但對表加S鎖,所以可以讓別的事務(wù)對其他行加入X鎖
          ?
          ?
          ?
          ??? 具體的相容性如下表:
          ????
          現(xiàn)有模式
          請求鎖定
          S
          RS
          RX
          SRX
          X
          S
          Y
          Y
          N
          N
          N
          RS
          Y
          Y
          Y
          Y
          N
          RX
          N
          Y
          Y
          N
          N
          SRX
          N
          Y
          N
          N
          N
          X
          N
          N
          N
          N
          N
          ?
          ?
          ?
          ?
          鎖粒度
          ?
          ??? 鎖粒度是指被鎖定的數(shù)據(jù)對象大小。鎖粒度越大,能夠使用的資源就越少,并發(fā)度也越小,系統(tǒng)開銷也越小。
          ?
          ??? 數(shù)據(jù)庫中的鎖粒度分為4個級別:數(shù)據(jù)庫級表級行級列級注意Oracle不支持列級鎖!
          ?
          ??? 如果要在事務(wù)中處理大量記錄,則應(yīng)該使用表級鎖,如果要處理多個大型表,則應(yīng)該使用數(shù)據(jù)庫級鎖,如果都是少量數(shù)據(jù),則使用行級。
          ?
          ??? 1、TX鎖
          ?
          ??? TX鎖意即Transaction(事務(wù)鎖、行級鎖),改鎖從事務(wù)開始被創(chuàng)建,事務(wù)提交或回滾后釋放。
          ??? TX鎖可以鎖定事務(wù)所涉及到的所有數(shù)據(jù)行。
          ?
          ??? 事務(wù)鎖只有X鎖一種類型,而且是Oracle支持的最低級別的鎖。
          ?
          ??? 2、TM鎖
          ?
          ??? TM鎖即表級鎖,它包括了所有的5種鎖模式。
          ?
          ??? 注意:因為Oracle在行級只提供X鎖,所以與RS鎖對應(yīng)的行級鎖也是X鎖!
          ?
          ??? 3、數(shù)據(jù)庫級鎖
          ?
          ??? 禁止任何新會話和新事務(wù)。主要是為了在沒有任何干擾情況下來完成對數(shù)據(jù)庫的維護(hù)。
          ?
          ??? 通常DBA將數(shù)據(jù)庫設(shè)置到限制性模式來鎖定它,在限制性模式中只允許RESTRICTED SESSION特權(quán)的的用戶登錄,命令如下:
          ?
          ??? ALTER SYSTEM ENABLE RESTRICTED SESSION;
          ?
          ??? 注:這個操作對于已經(jīng)在數(shù)據(jù)庫中的SESSION將不起作用。
          ?
          ?
          ??? 也可以通過將數(shù)據(jù)庫設(shè)置到READ ONLY模式下來實現(xiàn)鎖定數(shù)據(jù)庫。
          ?
          ?
          ?
          ?
          ?
          ?
          ?
          ??? 列舉了一些基礎(chǔ),具體研究參閱《Oracle9i&10g編程藝術(shù)》第六章。




          -The End-

          posted on 2008-10-26 21:35 decode360-3 閱讀(184) 評論(0)  編輯  收藏 所屬分類: Oracle
          主站蜘蛛池模板: 保定市| 长沙县| 依兰县| 岫岩| 长海县| 陆河县| 崇仁县| 通山县| 介休市| 中宁县| 临潭县| 灵丘县| 波密县| 武邑县| 伽师县| 南昌市| 高陵县| 永年县| 海安县| 巴彦县| 潜山县| 泉州市| 宜城市| 郴州市| 宁国市| 休宁县| 瓦房店市| 农安县| 永定县| 游戏| 梁河县| 邵东县| 无极县| 静宁县| 库伦旗| 宝丰县| 景东| 龙山县| 碌曲县| 宜都市| 永宁县|