摘要:2011上半年數(shù)據(jù)庫系統(tǒng)工程師考試真題及答案解析下午卷 試題五 閱讀下列說明,回答問題1至問題3,將解答填入對(duì)應(yīng)欄內(nèi)。
>>>>>>>>>>點(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ù)庫工程師考試大綱教材
2011上半年數(shù)據(jù)庫系統(tǒng)工程師考試真題及答案解析
下午卷
試題五
閱讀下列說明,回答問題1至問題3,將解答填入對(duì)應(yīng)欄內(nèi)。
[說明]
某網(wǎng)上商品銷售系統(tǒng)的業(yè)務(wù)流程如下:
26、將客戶的訂單記錄(訂單號(hào),客戶ID,商品ID,購買數(shù)量)寫入訂單表;
27、將庫存表(商品ID,庫存量)中訂購商品的庫存量減去該商品的購買數(shù)量。
針對(duì)上述業(yè)務(wù)流程,完成下列問題:
26、假設(shè)庫存量有大于等于0的約束,可能出現(xiàn)如下情況:當(dāng)訂單記錄寫入訂單表后,修改庫存表時(shí)因違法約束而無法執(zhí)行,應(yīng)如何處理?(100字以內(nèi))
27、引入如下偽指令:將商品A的訂單記錄插入訂單表記為IA.;讀取商品A的庫存量到變量x,記為x=RA.;變量x值寫入商品A中的庫存量,記為W(A,x)。則客戶i的銷售業(yè)務(wù)偽指令序列為:IiA.,xi=RiA.,xi=xi-ai,Wi(A,xi)。其中ai為商品的購買數(shù)量。
假設(shè)當(dāng)前庫存量足夠,不考慮發(fā)生修改后庫存量小于0的情況。若客戶1、客戶2同時(shí)購買同一種商品時(shí),可能山現(xiàn)的執(zhí)行序列為:I1A.,I2A.,x1=R1A.,x2=R2A.,x1=x1-a1,W1(A,x1),x2=x2-a2,W2(A,x2)。
(1)此時(shí)會(huì)出現(xiàn)什么問題?(100字以內(nèi))
(2)為了解決上述問題,引入共享鎖指令SLockA.和獨(dú)占鎖指令XLockA.對(duì)數(shù)據(jù)A進(jìn)行加鎖,解鎖指令UnlockA.對(duì)數(shù)據(jù)A進(jìn)行解鎖,客戶i的加鎖指令用SLockiA.表示,其他類同。插入訂單表的操作不需要引入鎖指令。請(qǐng)補(bǔ)充上述執(zhí)行序列,使其滿足2PL協(xié)議,并使持有鎖的時(shí)間最短。
下面是用E-SQL實(shí)現(xiàn)的銷售業(yè)務(wù)程序的一部分,請(qǐng)補(bǔ)全空缺處的代碼。
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
INSERT INTO 訂單表 VALUES (:OID,:CID,:MID,:qty);
if error then { ROLLBACK; (a) ; }
UPDATE 庫存表
SET 庫存量=庫存量-:qty
WHERE (b) ;
if error then { ROLLBACK; return; }
(c) ;
參考答案及解析
26、將寫訂單記錄和修改庫存表作為一個(gè)完整的事務(wù)來處理,當(dāng)修改庫存表無法執(zhí)行時(shí),回滾事務(wù),則會(huì)撤銷寫入的訂單記錄,數(shù)據(jù)庫保持一致。
本題考查事務(wù)及并發(fā)控制的概念和應(yīng)用,屬于比較傳統(tǒng)的題目,考查點(diǎn)也與往年類似。
本問題考查事務(wù)的基本概念。對(duì)于現(xiàn)實(shí)中的一項(xiàng)業(yè)務(wù),相對(duì)應(yīng)的數(shù)據(jù)庫更新操作應(yīng)作為一個(gè)完整的事務(wù),要么全做要么全不做。銷售業(yè)務(wù)對(duì)應(yīng)的寫入訂單記錄和更新庫存表應(yīng)作為一個(gè)事務(wù),當(dāng)出現(xiàn)故障(違反約束)而無法完成時(shí),應(yīng)回滾事務(wù)。
27、(1)出現(xiàn)問題:客戶1購買后寫入的庫存量值被覆蓋,庫存量不能體現(xiàn)客戶1已購買,屬于丟失修改造成的數(shù)據(jù)庫不一致性。
(2)重寫后的序列:
I1(A),I2(A),XLock1(A),x1=R1(A),x1=x1-a1,W1(A,x1),Unlock1(A),XLock2(A),x2=R2(A),x2=x2-a2,W2(A,x2),Unlock2(A)。
本問題考查對(duì)事務(wù)并發(fā)控制的相關(guān)知識(shí)的理解掌握。若對(duì)并發(fā)事務(wù)的指令交叉執(zhí)行不加以干涉,就會(huì)相互干擾,破壞事務(wù)的隔離性,造成數(shù)據(jù)庫的不一致。并發(fā)事務(wù)產(chǎn)生的三種不一致性為丟失修改、不可重復(fù)讀和讀臟數(shù)據(jù)。本例中客戶1對(duì)庫存量的修改被客戶2的修改覆蓋,出現(xiàn)丟失修改不一致性。 為保證可串行化調(diào)度,在事務(wù)執(zhí)行過程中引入相應(yīng)指令進(jìn)行控制,即兩段鎖協(xié)議(2PL),對(duì)數(shù)據(jù)讀之前先加讀鎖,寫前加寫鎖,事務(wù)只有獲得相應(yīng)的鎖才能操作數(shù)據(jù),加解鎖過程分為兩個(gè)階段,前一階段只能加鎖,后一階段只能解鎖,不允許有交叉。兩段鎖協(xié)議是保證并發(fā)事務(wù)可串行化調(diào)度的充分條件。
針對(duì)給出的偽指令操作序列,需要在修改庫存量之前加Xlock()指令,并保證客戶1釋放A上的鎖后客戶2才能加鎖。題目設(shè)定插入訂單表的操作不需要引入鎖指令,每個(gè)事務(wù)只需對(duì)庫存量加解鎖,滿足2PL協(xié)議。
28、return
29、商品ID=:MID
30、COMMTT
本問題考查對(duì)2PL協(xié)議理論與SQL中的隔離級(jí)別,以及嵌入式SQL的編程實(shí)踐。
本題給出的空缺(a)是在事務(wù)回滾之后,需要補(bǔ)充的是控制程序邏輯的return語句;空缺(b)要補(bǔ)充的是WHERE條件,即指定的商品ID;空缺(c)要補(bǔ)充的是事務(wù)提交語句COMMIT。
相關(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萬小伙伴參與做題