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