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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Oracle原理: 行级锁和表级锁

發布時間:2024/10/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle原理: 行级锁和表级锁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

行級鎖就是施放在行上的排他鎖,表級鎖就是會施放在表上的排他鎖。鎖分為兩大類:共享鎖和排它鎖。共享鎖的意思就是可以其他用戶來鎖定表,而排它鎖不準其他用戶來鎖定表。

鎖具有:一致性(只允許一個用戶修改數據)、完整性(為所有用戶提供完整的數據,即要么取的都是修改前的數據,要么都是修改后的數據),并行性(允許多個用戶訪問同一數據)

1.行級鎖

在使用insert,update,delete,select...for update 這4種語法時,Oracle會自動的應用行級鎖,直到用戶commit;或者Rollback才會施放鎖。為了保證一致性,在增刪改操作時自然要先鎖定要修改的數據,不讓其他用戶再操作,直到施放鎖。在commit之前用戶查詢到的數據都是還沒修改的,commit以后查詢出來的數據才是修改后的。

drop table salary_tbl; create table salary_tbl(employer_nm varchar(20),department varchar(20) not null,salary number not null,leader_nm varchar(20) ); truncate table salary_tbl; beginfor i in 1..100loopinsert into salary_tbl values('雇傭者'||i,'部門'||Mod(i,6),100*POWER(10000,i*0.01),'雇傭者'||Mod(i,6)); end loop; end; / commit;

用上述語法在普通用戶voapd上創建薪資表和添加數據,用兩個sqlplus窗口進行測試:

可以發現右邊的命令窗口在正在等待,因為左邊窗口的select...for update 把數據行給鎖上了。此時可以用sql查詢鎖的信息:select * from v$lock where TYPE in('TM','TX')

其中 TM 指的是表級鎖,TX指的是行級鎖,查詢結果如下圖(SID指用戶ID)。

此時左邊的命令窗commit,或者rollback 施放了鎖之后,右邊的才能夠執行update語句,此時才輪到右邊的給行數據加鎖.。此時的鎖是行級鎖。其他用戶可以對表的其他數據進行增刪改操作。

?

2,表級鎖

??LOCK TABLE?[tablename] IN [row share/SHARE/EXCLUSIVE...]?MODE;

(1)行共享 (ROW SHARE) – 禁止排他鎖定表。禁止EXCLUSIVE再鎖上同一張表,不禁止用戶增刪改表記錄

(2)行排他(ROW EXCLUSIVE) – 禁止使用排他鎖和共享鎖,禁止同時使用EXCLUSIVE,SHARE ROW EXCLUSIVE鎖。不禁止用戶增刪改表記錄

(3)共享鎖(SHARE)?

? ? ? ? 鎖定表,僅允許其他用戶查詢表中的行

? ? ? ? 禁止其他用戶插入、更新和刪除行

? ? ? ? 多個用戶可以同時在同一個表上應用此鎖

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

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

解鎖表:用如下sql查詢出sid,serial

select b.owner,b.object_name,a.session_id,a.locked_mode,c.serial#,c.sid||','||c.serial# from v$locked_object a,dba_objects b ,v$session c where b.object_id = a.object_id And a.session_id = c.sid

然后 ALTER?SYSTEM KILL SESSION?'69,32'?IMMEDIATE; 解除表鎖定。

?

當出現死鎖時,Oracle會通過結束其中一個事物來解除死鎖。

總結

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

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