锁(学习笔记)
行級鎖定和表級鎖定:
行級鎖定:
當(dāng)用戶執(zhí)行了,INSERT,UPDATE,DELETE及SELECT FOR UPDATE語句時,
ORACLE將隱式的實(shí)現(xiàn)記錄的鎖定,如果事務(wù)沒有提交,回滾,就一直在鎖定狀態(tài),一直到事務(wù)提交后,才會將數(shù)據(jù)鎖釋放
表級鎖定:
表級鎖定需要用戶明確的使用LOCK TABLE語句手工鎖定
語法
LOCK TABLE 表名稱|視圖名稱,表名稱|視圖名.... IN 鎖定模式 MODE[NOWAIT]
NOWAIT這是一個可選項(xiàng),當(dāng)視圖鎖定一張表時,如果發(fā)現(xiàn)已經(jīng)被其他事務(wù)鎖定時,不會等待
鎖:共享鎖和排它鎖.
鎖分以下幾種:
| ROW SHARE 行共享鎖 | 在鎖定期間允許其他事務(wù)并發(fā)對表進(jìn)行各種操作,但不允許任何事務(wù)對同一張表進(jìn)行獨(dú)占操作(禁止排它鎖) |
| ROW EXCLUSIVE 行排它鎖 | 允許用戶進(jìn)行任何操作,與行共享鎖不同的是它不能防止其它事務(wù)對同一張表進(jìn)行手工鎖或者獨(dú)占操作 |
| SHARE 共享鎖 | 其它事務(wù)只能執(zhí)行是查詢操作,不能修改操作 |
| SHARE ROW EXCLUSIVE 共享排它鎖 | 能許任何用戶進(jìn)行查詢操作,但不允許其它用戶使用共享鎖 共享排它鎖的常見應(yīng)用 |
| EXCLUSIVE:排它鎖 | 事務(wù)將以獨(dú)占方式鎖定表,其它用戶允許查度,但不能修改也不能設(shè)置任何的鎖 |
?
死鎖:
?
將事務(wù)自動提交關(guān)閉
?
SET AUTOCOMMIT=OFF 取消自動處理,開啟事務(wù)處理?
?
悲觀鎖:查詢到數(shù)據(jù)后使用FOR UPDATE 將數(shù)據(jù)鎖定
?
第一個會話執(zhí)行
?
SELECT * FROM myemp WHERE deptno=10 FOR UPDATE;第2個會話也執(zhí)行
SELECT * FROM myemp WHERE deptno=10 FOR UPDATE;發(fā)現(xiàn)第2個會話,一直在等待,不執(zhí)行
第一個會話執(zhí)行COMMIT或者ROLLBACK后,會話2才可以執(zhí)行
樂觀鎖:把所有鎖定都延遲到即將執(zhí)行更新之前
使用UPDATE 表名 set 字段? WHERE 字段1=查詢出的狀態(tài),AND字段2=查詢出的狀態(tài)
在第一個SESSION上針對emp表使用共享鎖
LOCK TABLE emp IN SHARE MODE NOWAIT第二個SESSION中刪除emp全部數(shù)據(jù)
DELETE FROM emp;因是共享鎖,第二個SESSION應(yīng)該只能查度不能修改,所以一直在等待
解鎖:
?
管理員登錄
?
查看數(shù)據(jù)庫中的鎖定
?
SELECT session_id,oracle_username,process FROM v$locked_object;可以發(fā)現(xiàn)死鎖的SESSION_ID;
查詢V$session數(shù)據(jù)字典
SELECT sid,serial#,username,lockwait,status FROM v$session where sid IN(SESSION_ID);可以查詢到Serial#
通過
ALTER SYSTEM KILL SESSION'sid,serial#';解除死鎖
?
?
?
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
- 上一篇: SaaS服务在未来云计算中该如何发展
- 下一篇: 个人阅读作业3