日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle事务和锁

發布時間:2025/7/14 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

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

DDL鎖:用于保護對象的結構,數據字典,表結構等,用戶不能顯示地要求使用ddl鎖

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


轉載于:https://blog.51cto.com/11960462/1868925

總結

以上是生活随笔為你收集整理的Oracle事务和锁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。