Oracle事務和鎖

來源:互聯網
上載者:User

標籤:資料庫資料   oracle   

事務:

定義:事務就是一組包含一條或多條語句的邏輯單元,每個事務都是一個原子單位,在事務中的語句作為一個整體,要麼一起被提交,作用在資料庫上,是資料庫資料永久被修改,要麼一起被撤銷,對資料不做任何修改。主要用於保證資料一致性。

例子

          賬戶A提取1000元,放入賬戶B,並將該操作記錄日誌。

 事務基本控制語句:

SET TRANSACTION:設定事務屬性

COMMIT:提交事務

SAVEPOINT:設定儲存點

ROLLBACK:復原事務

ROLLBACK TO SAVEPOINT:復原至儲存點

事務的類型:

     明確交易:就是利用命令完成,自行設定commit/rollback,來設定提交或復原,oracle不像java,不用設定開始標識,事務會開啟;(登陸資料庫後第一次執行dml語句便是事務的開始;當上一個事務結束,第一次執行dml則開始下一個事務 )

     隱含交易:不需要自行設定commit/rollback。如

               a.當一個程式正常結束,如使用sql plus退出時,之前的sql都會commit;

               b.ddl語句自動認可

               c.set autocommit on/off(預設是off,則所有dml都是顯示事務,需要自行設定commin/rollback),on則每次執行dml系統都自動認可或復原。

事務的儲存點:

     類似將一個長的事務劃分為多個短事務,短事務結束後,標記一個SAVEPOINT name,下一個事務提交出問題時,可指定rollback to name來復原到name結束處。儲存點的好處是當出現問題時不需要全部復原。

          a.事務只復原到儲存點之後的操作

          b.復原到某儲存點時,它以後的儲存點將被刪除,但之前的儲存點將被保留

          c.儲存點之後的鎖將被釋放,但之前的會被保留。

不要過分依賴儲存點,應盡量把長的事務改成較短的事務操作。

事務的ACID:原子性、一致性、分離性、持久性。

    注意點:

          ***在oracle中事務的使用,事務的結束情況1.當autocommit為off(預設)時,記得自己設定commit/rollback,2.執行ddl時,自動認可,3.sql*plus正常退出時,commit,異常退出時,rollback.

          ***當前會話執行事務未提交時,其他會話看不到當前會話的修改,但當前會話可見,例如當前會話修改了一條資料,當前會話再查詢則查詢到修改後的資料

鎖:

oracle利用很低的約束提供了最大程度的並發性,當一個會話在修改某行記錄時,僅僅該行會被鎖定,其他會話可以隨時讀取,且讀取的資料還是修改之前的資料,鎖可以保證事務的分離性,防止事務互動造成資料不一致。資料庫中的鎖很多都是相同自動添加和釋放的,如提交事務,oracle也允許我們手動設定。

鎖從操作許可權上分可分為寫鎖和讀鎖:

獨佔鎖定(寫鎖/X鎖/讀寫鎖):修改資料時用,排他,即當事務T對資料A添加獨佔鎖定,則其他事務不可再對該資料添加任何鎖,此時只允許事務T對資料A進行讀寫,其他事務應該可以讀取。

共用鎖定(讀鎖/S鎖/唯讀鎖):共用鎖定下資料只能被讀取,不能修改。資料已經被加了共用鎖定情況下,不可再加獨佔鎖定,但可被加共用鎖定。

從鎖的作用對象分:

DML鎖:資料鎖,用於保護資料。是指執行dml時使用的鎖,分為行級鎖(TX,又稱事務鎖)和表級鎖(TM)。

     行級鎖是在修改某行記錄時對該行資料鎖定,不允許其他事務修改,屬於獨佔鎖定;

     表級鎖用於防止修改資料時表的結構發生變化。事務在修改資料時會先擷取表級鎖,再擷取行級鎖。所以當事務A在修改資料時,不允許任何事務修改表結構。

     當Oracle執行DML語句時,系統自動在所要操作的表上申請TM類型鎖。當TM鎖獲得後,系統再自動申請TX類型鎖,並將實際鎖定的資料行的鎖標誌位進行置位。這樣在事務加鎖前檢查TX鎖相容性時就不用再逐行檢查鎖標誌,而只需檢查TM鎖模式的相容性即可,大大提高了系統的效率。TM鎖包括了RS、RX、S、SRX、X等多種模式,在資料庫中用0-6來表示。不同的SQL操作產生不同類型的TM鎖

(1)行共用 (ROW SHARE) – 屬共用鎖定 ,禁止獨佔鎖定定表,

(2)行排他(ROW EXCLUSIVE) – 禁止使用獨佔鎖定和共用鎖定

(3)共用鎖定(SHARE)-鎖定表,僅允許其他使用者查詢表中的行,禁止其他使用者插入、更新和刪除行,多個使用者可以同時在同一個表上應用此鎖

(5)共用行排他(SHARE ROW EXCLUSIVE) – 比共用鎖定更多的限制,禁止使用共用鎖定及更高的鎖

(6)排他(EXCLUSIVE) – 限制最強的表鎖,僅允許其他使用者查詢該表的行。禁止修改和鎖定表     

     行級鎖: 

(下面這句將給該表的所有行都加上鎖) 

select * from person for update;

如果該行記錄已經被鎖定,就不用等待,系統會直接拋錯 ora-00054 

select * from person  where id = ‘1‘  for update nowait

如果該行記錄已經被鎖定,更新的時候等待5秒,如果這5秒內,該行記錄被解鎖,那麼返回查詢結果,如果5秒內仍未解鎖,那麼系統會直接拋錯 ora-00054 

select * from person for update wait 5;

另外,如果使用 select * from person  where id = ‘1‘  for update ,當該行記錄已經被鎖定時,那麼系統將一直等待該行記錄被釋放後,再加鎖。

     表級鎖:

行共用:允許使用者進行任何操作,禁止獨佔鎖定 

lock table person in row share mode;

行排他:允許使用者進行任何操作,禁止共用鎖定和獨佔鎖定 

lock table person in row exclusive mode;

共用鎖定:其他使用者只能看,不能修改 

lock table person in share mode;

共用行排他:比共用鎖定有更多限制 

lock table person in share row exclusive mode;

獨佔鎖定:其他使用者只能看,不能修改,不能加其他鎖 

lock table person in exclusive mode;

對於通過lock table命令主動添加的鎖定來說,如果要釋放它們,只需要發出rollback命令即可

根據鎖的類型分,共有6種

1、NULL,可以某些情況下,如分散式資料庫的查詢會產生此鎖。

2、RS,表結構共用鎖定

3、RX,表結構共用鎖定+被操作的記錄的排它鎖

4、S, 表結構共用鎖定+所有記錄共用鎖定(表結構唯讀和所有行記錄唯讀)

5、SRX,表結構共用鎖定+所有記錄排它鎖

6、X   表結構排它鎖+所有記錄排它鎖,自己可以修改和查看錶結構及資料,其他事務只能讀

select * from able_name for update是RX,據說老版本文檔說的是RS,以後的是RX

http://blog.chinaunix.net/uid-25909722-id-3387609.html

650) this.width=650;" class="en-media" src="/shard/s5/res/1efca714-a472-4f4b-bed3-0e99bcb1ec58" alt="1efca714-a472-4f4b-bed3-0e99bcb1ec58" />

650) this.width=650;" class="en-media" src="/shard/s5/res/f3713e6f-a123-41e8-a707-7b7f2fd7ca11" alt="f3713e6f-a123-41e8-a707-7b7f2fd7ca11" />

鎖定和解鎖:在oracle中執行dml自動為表添加TM鎖,也可用lock手動添加,使用rollback則解鎖

DDL鎖:用於保護對象的結構,資料字典,表結構等,使用者不能顯示地要求使用ddl鎖

內部閂鎖:保護資料庫的內部結果,完全由系統自行調用。


本文出自 “11950462” 部落格,謝絕轉載!

Oracle事務和鎖

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.