oracle enqueuse型別鎖 (一)

2021-09-27 02:04:54 字數 2181 閱讀 1744

一、鎖分為

enqueuse --- 佇列型別的鎖,通常和業務相關,

latches --- 系統資源方面的鎖,比如記憶體結構,sql解析等。。。

二、鎖的原則

只有被修改時,行才會鎖定。

當一條語句修改了一條記錄,只有這條記錄上被鎖定,在oracle中不存在鎖上公升,不會由原來的表鎖上公升到表鎖。

當某行被修改時,他將阻塞別人修改他。

當乙個事物修改一行時,他將在這一行上加上乙個行鎖(tx),用於阻止其他事物對相同行的修改。

讀永遠不會阻止寫,除非select ...for update,同樣寫也不會阻止讀,當一行被修改後,但是沒有提交,由會滾段提供資料的一致性讀。

當要修改某張表的一行資料,oracle會在這張表上加兩個鎖,乙個tm表鎖,乙個tx行鎖,新增表tm鎖的原因是不能讓其他的事物去刪除這張表。

注釋:查詢當前session的sid ;

select distinct sid from v$mystat;

update例子:

1.t表裡只有一條資料,並且id欄位是主鍵

2.對id=1進行修改,不提交

3.新開乙個視窗,再次對這個id=1 進行修改

4.查詢鎖檢視v$lock

type:鎖的型別

sid:回話的sid

lomde:3號模式鎖是共享鎖,誰都能給他加這個鎖,6是排它鎖只有我可以用,模式有2、3、4、5、6這幾種。

request:去請求什麼鎖,這裡可以看出sid為38的在請求乙個排他的事物鎖(行鎖tx)

block:有沒有阻塞別人,這裡可以看出sid為1的已經阻塞了別人。

現在我們去看下等待事件v$session_wait;

這裡可以看出sid為38的產生了等待,enq就是上面我們說的enqueuse型別,原因是事物鎖(tx鎖等待)

delete鎖的情況和update一樣。

insert 例子:

insert相對於update和delete是有區別的,update和delete操作的是同樣的一條資料(比如id=1 就是這條資料)

1.現在表裡只有一條資料

2.增加一條

3.另乙個視窗,在增加一條,產生了等待。

4.檢視v$lock

這裡就和update不一樣了,sid為1的阻塞了sid為38的會話,但是sid為38的比之前多了一行,他已經獲取到了模式為6的事物鎖(tx),update和delete操作的是同樣的一條資料(比如id=1 就是這條資料),insert 是往裡面插資料,不是update那種的同一條資料。他去請求模式為4的事物鎖。

在資料庫中模式越大,鎖的等級越高,6是限制性最強的。

鎖的互斥關係

上圖中 鎖定的sql一列可以手工加上去的,t是表名。

類值類與類指標類

類值類 行為像值的 class a a const a a ps new string a.ps i a.i 每個類物件有自己的乙份資源拷貝 a operator const a rhs a private string ps int i 一種優化拷貝賦值運算子的方法 copy and swap c...

巢狀類 匿名類 密封類

巢狀類 在c 中可以將乙個類定義在另乙個類的內部,外部的叫外部類,內部的巢狀類 namespace 27 set public void hello 巢狀類 public class web webname,weburl class program 匿名類 如果某個類的例項物件只會使用到一次,可以使...

點類,圓類,圓柱類

print?copyright c 2012,煙台大學計算機學院 all rights reserved.檔名稱 text.cpp 作 者 胡穎 完成日期 2013年5月20日 版 本 號 v1.0 輸入描述 無 問題描述 1 先建立乙個point 點 類,包含資料成員x,y 座標點 2 以poin...