還原sql數(shù)據(jù)庫(kù)無(wú)法獲得獨(dú)占訪問(wèn)權(quán) 數(shù)據(jù)庫(kù)鎖有哪幾種?
數(shù)據(jù)庫(kù)鎖有哪幾種?1. Shared lock (shared lock)T1: select * from table(請(qǐng)想象一下需要執(zhí)行1個(gè)小時(shí),下面的sql語(yǔ)句應(yīng)該是這么想象的)。T2: Upd
數(shù)據(jù)庫(kù)鎖有哪幾種?
1. Shared lock (shared lock)
T1: select * from table(請(qǐng)想象一下需要執(zhí)行1個(gè)小時(shí),下面的sql語(yǔ)句應(yīng)該是這么想象的)。
T2: Update table set column1#39hello#39
流程:
T1操作(帶共享鎖)
T2行動(dòng)
如果T1沒有完成執(zhí)行。
T2等人......
other
鎖被打開了。
T2處決
endif
T2不得不等待,因?yàn)樗噲D在執(zhí)行更新之前給表添加一個(gè)排他鎖。
但是,數(shù)據(jù)庫(kù)規(guī)定共享鎖和獨(dú)占鎖不能同時(shí)在同一個(gè)資源上共存。所以T2必須等待T1。
2. Update Lock (Update Lock)
t1:select * from table(上鎖)(加更新鎖)
Update table set column1#39hello#39.
T2: Select * from the table
Update table set column 1 #39 World # 39
更新鎖定 "我現(xiàn)在只想看,你們其他人也可以看,但是以后可能會(huì)做一個(gè)更新操作。我獲得了獨(dú)占鎖的共享鎖(用于讀取)。 "
(用于更新)資格。 "一個(gè)事物只有一個(gè)更新鎖才有這個(gè)資格。
T1執(zhí)行select并添加更新鎖。
T2運(yùn)行,準(zhǔn)備添加一個(gè)更新鎖,但發(fā)現(xiàn)已經(jīng)有一個(gè)更新鎖在那里,所以我們必須等待。
當(dāng)用戶3、用戶4...以后需要查詢表中的數(shù)據(jù),不會(huì)因?yàn)門1 的select正在執(zhí)行,但仍可查詢。
3.獨(dú)占鎖(獨(dú)占鎖)
T1:更新表集合列1 # 39 hello # 39 where idlt 1000
T2:更新表集列1 # 39世界# 39,其中idgt 1000
假設(shè)T1先到達(dá),T2后到達(dá),在這個(gè)過(guò)程中,T1會(huì)對(duì)idlt1000的記錄應(yīng)用排他鎖,但不會(huì)阻塞T2的更新。
4, directional lock (directional lock)
T1 : select * from table (xlock)其中id10-表示對(duì)id10施加排他鎖。
T2:select * from table(ta block)-表示添加表級(jí)鎖。
假設(shè)先執(zhí)行T1,后執(zhí)行T2,在執(zhí)行T2時(shí),要添加表鎖,為了判斷表鎖是否可以添加,數(shù)據(jù)庫(kù)系統(tǒng)要逐個(gè)判斷表記錄的每一行是否有排他鎖。
如果發(fā)現(xiàn)其中一行已經(jīng)有了排他鎖,則不允許添加表鎖。It 這只是它 逐個(gè)判斷效率太低。
事實(shí)上,數(shù)據(jù)庫(kù)系統(tǒng)并不。;不要這樣工作。當(dāng)執(zhí)行T1的select時(shí),系統(tǒng)向表的id10的這一行添加排他鎖,同時(shí),它靜默地向整個(gè)表添加。
有了有意排他鎖(IX),T2在執(zhí)行表鎖定時(shí),只需要看到這個(gè)表已經(jīng)有意存在于排他鎖中,就可以直接等待,不需要逐個(gè)檢查資源。
5. Plan lock (mode lock)
Change table ... (add schema lock, which is called schema modification (Sch-M) lock.
DDL語(yǔ)句總是用sch-m鎖定。
該鎖不允許任何其他會(huì)話連接到該表。你可以 甚至不能連接這個(gè)表,更不用說(shuō)要對(duì)它執(zhí)行什么sql語(yǔ)句了。
server鎖原理?
1、鎖的用途
為了避免同時(shí)爭(zhēng)奪數(shù)據(jù)庫(kù)資源,數(shù)據(jù)庫(kù)被鎖定,只有擁有密鑰的用戶才能使用;
2、鎖的粒度
行鎖-頁(yè)鎖-區(qū)域鎖(分區(qū)8頁(yè))-表鎖。
3.鎖的類型
共享鎖:用于所有只讀數(shù)據(jù)操作(select);
修改鎖:用于在修改操作(更新)的初始化階段鎖定可能被修改的資源;
排他鎖x (exclusive lock) :保留用于修改數(shù)據(jù);(獨(dú)占鎖不能與其他鎖兼容)
架構(gòu)鎖:分為結(jié)構(gòu)修改鎖(Sch-M)和結(jié)構(gòu)穩(wěn)定鎖(Sch-S);
意向鎖:表示SQL Server在資源底層有共享鎖或獨(dú)占鎖的意向;(有三種類型:有意排他鎖(IX)、有意共享鎖(IS)和有意排他共享鎖(SIX))
批量復(fù)制鎖:批量修改鎖在批量復(fù)制數(shù)據(jù)時(shí)使用。