锁(学习笔记)
行級(jí)鎖定和表級(jí)鎖定:
行級(jí)鎖定:
當(dāng)用戶執(zhí)行了,INSERT,UPDATE,DELETE及SELECT FOR UPDATE語句時(shí),
ORACLE將隱式的實(shí)現(xiàn)記錄的鎖定,如果事務(wù)沒有提交,回滾,就一直在鎖定狀態(tài),一直到事務(wù)提交后,才會(huì)將數(shù)據(jù)鎖釋放
表級(jí)鎖定:
表級(jí)鎖定需要用戶明確的使用LOCK TABLE語句手工鎖定
語法
LOCK TABLE 表名稱|視圖名稱,表名稱|視圖名.... IN 鎖定模式 MODE[NOWAIT]
NOWAIT這是一個(gè)可選項(xiàng),當(dāng)視圖鎖定一張表時(shí),如果發(fā)現(xiàn)已經(jīng)被其他事務(wù)鎖定時(shí),不會(huì)等待
鎖:共享鎖和排它鎖.
鎖分以下幾種:
| ROW SHARE 行共享鎖 | 在鎖定期間允許其他事務(wù)并發(fā)對(duì)表進(jìn)行各種操作,但不允許任何事務(wù)對(duì)同一張表進(jìn)行獨(dú)占操作(禁止排它鎖) |
| ROW EXCLUSIVE 行排它鎖 | 允許用戶進(jìn)行任何操作,與行共享鎖不同的是它不能防止其它事務(wù)對(duì)同一張表進(jìn)行手工鎖或者獨(dú)占操作 |
| SHARE 共享鎖 | 其它事務(wù)只能執(zhí)行是查詢操作,不能修改操作 |
| SHARE ROW EXCLUSIVE 共享排它鎖 | 能許任何用戶進(jìn)行查詢操作,但不允許其它用戶使用共享鎖 共享排它鎖的常見應(yīng)用 |
| EXCLUSIVE:排它鎖 | 事務(wù)將以獨(dú)占方式鎖定表,其它用戶允許查度,但不能修改也不能設(shè)置任何的鎖 |
?
死鎖:
?
將事務(wù)自動(dòng)提交關(guān)閉
?
SET AUTOCOMMIT=OFF 取消自動(dòng)處理,開啟事務(wù)處理?
?
悲觀鎖:查詢到數(shù)據(jù)后使用FOR UPDATE 將數(shù)據(jù)鎖定
?
第一個(gè)會(huì)話執(zhí)行
?
SELECT * FROM myemp WHERE deptno=10 FOR UPDATE;第2個(gè)會(huì)話也執(zhí)行
SELECT * FROM myemp WHERE deptno=10 FOR UPDATE;發(fā)現(xiàn)第2個(gè)會(huì)話,一直在等待,不執(zhí)行
第一個(gè)會(huì)話執(zhí)行COMMIT或者ROLLBACK后,會(huì)話2才可以執(zhí)行
樂觀鎖:把所有鎖定都延遲到即將執(zhí)行更新之前
使用UPDATE 表名 set 字段? WHERE 字段1=查詢出的狀態(tài),AND字段2=查詢出的狀態(tài)
在第一個(gè)SESSION上針對(duì)emp表使用共享鎖
LOCK TABLE emp IN SHARE MODE NOWAIT第二個(gè)SESSION中刪除emp全部數(shù)據(jù)
DELETE FROM emp;因是共享鎖,第二個(gè)SESSION應(yīng)該只能查度不能修改,所以一直在等待
解鎖:
?
管理員登錄
?
查看數(shù)據(jù)庫(kù)中的鎖定
?
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