摘要:2013上半年數(shù)據(jù)庫系統(tǒng)工程師考試真題及答案解析下午卷 試題五 閱讀以下說明,根據(jù)要求回答下列問題。 [說明] 某連鎖酒店提供網(wǎng)上預(yù)訂房間業(yè)務(wù),流程如下:
>>>>>>>>>>點(diǎn)擊進(jìn)入數(shù)據(jù)庫系統(tǒng)工程師考試網(wǎng)絡(luò)課堂
>>>>>>>>>>點(diǎn)擊進(jìn)入數(shù)據(jù)庫系統(tǒng)工程師歷年真題題庫
>>>>>>>>>>點(diǎn)擊進(jìn)入數(shù)據(jù)庫工程師考試大綱教材
2013上半年數(shù)據(jù)庫系統(tǒng)工程師考試真題及答案解析
下午卷
試題五
閱讀以下說明,根據(jù)要求回答下列問題。
[說明]
某連鎖酒店提供網(wǎng)上預(yù)訂房間業(yè)務(wù),流程如下:
13、客戶查詢指定日期內(nèi)所有類別的空余房間數(shù),系統(tǒng)顯示空房表(日期,房間類別,數(shù)量)中的信息。
14、客戶輸入預(yù)訂的起始日期、結(jié)束日期、房間類別和數(shù)量,并提交。
15、系統(tǒng)將用戶提交的信息寫入預(yù)訂表(身份證號(hào),起始日期,結(jié)束日期,房間類別,數(shù)量),并修改空房表的相關(guān)數(shù)據(jù)。
針對(duì)上述業(yè)務(wù)流程,回答下列問題。
13、如果兩個(gè)用戶同時(shí)查詢相同日期和房間類別的空房數(shù)量,得到的空房數(shù)量為1,并且這兩個(gè)用戶又同時(shí)要求預(yù)訂,可能會(huì)產(chǎn)生什么結(jié)果,請(qǐng)用100字以內(nèi)的文字簡(jiǎn)要敘述。
14、引入如下偽指令:將預(yù)訂過程作為一個(gè)事務(wù),將查詢和修改空房表的操作分別記為RA.和W(A,x),插入預(yù)訂表的操作記為W(B,a),其中x代表空余房間數(shù),a代表預(yù)訂房間數(shù),則事務(wù)的偽指令序列為:x=RA.,W(A,x-a),W(B,a)。
在并發(fā)操作的情況下,若客戶1、客戶2同時(shí)預(yù)訂相同類別的房間時(shí),可能出現(xiàn)的執(zhí)行序列為:x1=RA.,x2=RA.,W(A,x1-a1),W(B1,a1),W(A,x2-a2),W(B2,a2)。
(1)此時(shí)會(huì)出現(xiàn)什么問題,請(qǐng)用100字以內(nèi)的文字簡(jiǎn)要敘述。
(2)為了解決上述問題,引入共享鎖指令SLock(X)和獨(dú)占鎖指令XLock(X)對(duì)數(shù)據(jù)X進(jìn)行加鎖,解鎖指令Unlock(X)對(duì)數(shù)據(jù)X進(jìn)行解鎖,請(qǐng)補(bǔ)充上述執(zhí)行序列,使其滿足2PL協(xié)議,不產(chǎn)生死鎖且持有鎖的時(shí)間最短。 15、下面是實(shí)現(xiàn)預(yù)訂業(yè)務(wù)的程序,請(qǐng)補(bǔ)全空缺處的代碼。其中主變量“:Cid”、“:Bdate”、“:Edate”、“:Rtype”、“:Num”分別代表身份證號(hào)、起始日期、結(jié)束日期、房間類別和訂房數(shù)量。
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
UPDATE 空房表
SET 數(shù)量=數(shù)量-:Num
WHERE ______;
if error then {ROLLBACK; return -1; }
INSERT INTO 預(yù)訂表
VALUES (:cid, :Bdate, :Edate, :Rtype, :Num);
if error then {ROLLBACK; return -2; }
______;
參考答案及解析
13、同時(shí)預(yù)訂時(shí),可能會(huì)產(chǎn)生一個(gè)客戶訂不到或者把同一房訂給兩個(gè)客戶
依題意,如果兩個(gè)用戶同時(shí)要求預(yù)訂相同日期和相同類別的同一個(gè)房間,則可能會(huì)產(chǎn)生一個(gè)客戶訂不到房間或者把同一房間預(yù)訂給兩個(gè)客戶的沖突現(xiàn)象。
14、(1)出現(xiàn)問題:丟失修改,客戶1預(yù)訂a1數(shù)量房間后,對(duì)空房數(shù)量的修改被T2的修改覆蓋,造成數(shù)據(jù)不一致。
(2)XLOCK(A),x1=R(A),W(A,x1-a1),XLOCK(B),UNLOCK(A),W(B1,a1),
UNLOCK(B),XLOCK(A),x2=R(A),W(A,x2-a2),XLOCK(B),UNLOCK(A),
W(B2,a2),UNLOCK(B)
若對(duì)并發(fā)事務(wù)的指令交叉執(zhí)行不加以控制,則會(huì)使每個(gè)事務(wù)的執(zhí)行結(jié)果相互干擾,破壞事務(wù)的隔離性,從而造成數(shù)據(jù)庫的不一致。本試題中,客戶1預(yù)訂a1數(shù)量房間后,對(duì)空房數(shù)量的修改可能被客戶2的修改所覆蓋,造成不能體現(xiàn)出客戶1已預(yù)訂的房間數(shù)量。該現(xiàn)象屬于丟失修改造成的數(shù)據(jù)庫不一致性。
在并發(fā)狀態(tài)下,可能會(huì)相互干擾破壞事務(wù)的ACID屬性,加鎖機(jī)制是保障事務(wù)正確執(zhí)行的一種機(jī)制。2PL協(xié)議能夠保證事務(wù)在并發(fā)狀態(tài)下調(diào)度的正確性,即可串行化的調(diào)度。針對(duì)題干所給出的客戶f的房間預(yù)訂偽指令序列:x=R(A),W(A,x-a),W(B,a),需要在修改房間數(shù)量之前加XLock()指令,并保證讀/寫鎖不交叉,即確保客戶1釋放A上的鎖之后客戶2才能執(zhí)行加鎖操作。重寫后的房間預(yù)訂偽指令序列如下。
XLOCK(A),x1=R(A),W(A,x1-a1),XLOCK(B),UNLOCK(A),W(B1,a1),UNLOCK(B),XLOCK(A),
x2=R(A),W(A,x2-a2),XLOCK(B),UNLOCK(A),W(B2,a2),UNLOCK(B)
15、房間類別=:Rtype AND 日期 BETWEEN :Bdate AND :Edate
COMMIT :retum 0;
SQL語句“SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;”是SQL提供的事務(wù)隔離級(jí)別之一。它表示只允許事務(wù)讀已提交的數(shù)據(jù),并且在兩次讀同一數(shù)據(jù)時(shí)不允許其他事務(wù)修改此數(shù)據(jù)。依題意,結(jié)合題干給出的關(guān)鍵信息“(1)客戶查詢指定日期內(nèi)所有類別的空余房間數(shù),系統(tǒng)顯示空房表(日期,房間類別,數(shù)量)中的信息”可得,空缺處應(yīng)填入“房間類別=:Rtype AND 日期 BETWEEN :Bdate AND :Edate”。
在程序中,事務(wù)是以COMMIT語句或ROLLBACK語句結(jié)束。結(jié)合該程序中已給出的代碼“if error then {ROLLBACK; return -1;)”和“if error then {ROLLBACK; return -2;}”可得,空缺處應(yīng)填入“COMMIT; return 0;”。
相關(guān)鏈接:
數(shù)據(jù)庫系統(tǒng)工程師考試知識(shí)點(diǎn)分析與真題詳解(第4版)
數(shù)據(jù)庫系統(tǒng)工程師考試歷年試題分析與解答(第4版)
數(shù)據(jù)庫系統(tǒng)工程師考試下午知識(shí)點(diǎn)精講與考前必練
數(shù)據(jù)庫系統(tǒng)工程師考試考前串講
軟考備考資料免費(fèi)領(lǐng)取
去領(lǐng)取
共收錄117.93萬道題
已有25.02萬小伙伴參與做題