oracle 鎖機制

鎖:控制共享資源的併發訪問機制,防止衝突發生
能保證數據的一致性,完整性,共享性
--鎖的分類:
(1)行級鎖(排他鎖)
oracle數據庫中,在使用insert ,update ,delete ,select ...for update的時候,默認已經上鎖
(2)表級鎖

--演示:開啓多個窗口模擬多個用戶
--USERA:update dept set dname='DDDDD' WHERE deptno=50;並且未提交或者回滾之前在另外一個窗口中
--使用 USERB:select * from dept for update wait 5;會在5秒鐘之後告訴我們資源被佔用
USERB:select * from dept for update nowait;--只要得不到資源馬上報錯

--只有其他用戶在進行commit或者rollback的時候才能釋放鎖,同時釋放使用的資源

--表級鎖,限制其他用戶訪問該表
使用命令顯示地鎖定表,應用表級鎖的語法是:
LOCK TABLE <table_name> IN <lock_mode>
MODE [nowait];

--表級鎖的模式
--行共享:row share 允許其他用戶訪問和鎖定該表,但是禁止排他鎖定這個表
lock table dept in row share mode;
--其他用戶能使用行共享鎖,但是不能使用排他鎖
--lock table dept in exclusive mode;
--其他用戶能夠更新表中數據
update dept set dname='DDDDD' WHERE deptno=50;
delete from dept where deptno=50;

--行排他:row exclusive 與行共享模式相同,同時禁止其他用戶在此表上使用共享鎖。
--使用select…for update會在表上自動應用行排他鎖
lock table dept in row exclusive mode;
--其他用戶不能執行:lock table dept in share mode;
--但是能執行:lock table dept in row share mode;
select * from dept for update nowait;--使用這樣的語句,會在表上面應用行排他鎖
--其他用戶能夠更新表中數據
update dept set dname='DDDDD' WHERE deptno=50;
delete from dept where deptno=50;

--共享:share 只允許其他用戶查詢表中的行,但不允許插入、更新、刪除行,
--多個用戶可以同時在同一個表上應用此鎖
lock table dept in share mode;
--其他用戶能執行:lock table dept in share mode;
--其他用戶不能去執行:update dept set dname='DDDDD' WHERE deptno=50;
--delete from dept where deptno=50;

--共享行排他:share row exclusive執行比共享鎖更多的限制
lock table dept in share row exclusive mode;

--排他:exclusive 對錶執行最大限制,
--僅允許其他用戶查詢該表的行。禁止修改和鎖定表
lock table dept in exclusive mode;

--死鎖
USERA:lock table scott.emp in share mode;
USERB:lock table scott.emp in share mode;
USERA:update scott.emp set job='CLERK' where empno=7521;
USERB:update scott.emp set ename='Smith' where empno=7369;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章