摘要:2010年上半年數(shù)據(jù)庫(kù)系統(tǒng)工程師考試真題及答案解析下午卷 試題五 閱讀下列說明,回答問題1至問題3,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。
>>>>>>>>>>點(diǎn)擊進(jìn)入數(shù)據(jù)庫(kù)系統(tǒng)工程師考試網(wǎng)絡(luò)課堂
>>>>>>>>>>點(diǎn)擊進(jìn)入數(shù)據(jù)庫(kù)系統(tǒng)工程師歷年真題題庫(kù)
>>>>>>>>>>點(diǎn)擊進(jìn)入數(shù)據(jù)庫(kù)工程師考試大綱教材
2010年上半年數(shù)據(jù)庫(kù)系統(tǒng)工程師考試真題
下午卷
試題五
閱讀下列說明,回答問題1至問題3,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。
[說明]
某航空售票系統(tǒng)負(fù)責(zé)所有本地起飛航班的機(jī)票銷售,并設(shè)有多個(gè)機(jī)票銷售網(wǎng)點(diǎn)。各售票網(wǎng)點(diǎn)使用相同的售票程序。假設(shè)售票程序中用到的偽指令如表5-1所示。
假設(shè)某售票網(wǎng)點(diǎn)一次售出a張航班A的機(jī)票,則售票程序的偽指令序列為:R(A,x);W(A,X-a)。根據(jù)上述業(yè)務(wù)及規(guī)則,完成下列問題:
[問題1]
若兩個(gè)售票網(wǎng)點(diǎn)同時(shí)銷售航班A的機(jī)票,在數(shù)據(jù)庫(kù)服務(wù)器端可能出現(xiàn)如下的調(diào)度:
A:R1(A,x),R2(A,X),W1(A,x-1),W2(A,x-2);
B:R1(A,x),R2(A,x),W2(A,x-2),W1(A,x-1);
C:R1(A,x),W1(A,x-1),R2(A,X),W2(A,x-2);
其中Ri(A,x),Wi(A,x)分別表示第i個(gè)銷售網(wǎng)點(diǎn)的讀寫操作,其余類同。
假設(shè)當(dāng)前航班A剩余10張機(jī)票,分析上述三個(gè)調(diào)度各自執(zhí)行完后的剩余票數(shù),并指出錯(cuò)誤的調(diào)度及產(chǎn)生錯(cuò)誤的原因。
[問題2]
(1)判定事務(wù)并發(fā)執(zhí)行正確性的準(zhǔn)則是什么?如何保證并發(fā)事務(wù)正確地執(zhí)行?
(2)引入相應(yīng)的加解鎖指令,重寫售票程序的偽指令序列,以保證正確的并發(fā)調(diào)度。
[問題3]
下面是用E-SQL實(shí)現(xiàn)的機(jī)票銷售程序的一部分,請(qǐng)補(bǔ)全空缺處的代碼。
EXEC SQL SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
EXEC SQL SELECT balance INTO :x FROM tickets WHERE flight='A';
printf("航班A當(dāng)前剩余機(jī)票數(shù)為:%d\n請(qǐng)輸入購(gòu)票數(shù):",x);
scanf("%d",&a);
x=x-a;
if(x<0)
EXEC SQL ROLLBACK WORK;
printf("票數(shù)不夠,購(gòu)票失敗!");
else{
EXEC SQL UPDATE tickets SET (a)
if(SQLCA.sqlcode<>SUCCESS)
EXEC SQL ROLLBACK WORK;
else (b) }
試題五分析
本題考查的是并發(fā)控制的概念和應(yīng)用,屬于比較傳統(tǒng)的題目,考查點(diǎn)也與往年類似。
[問題1]
本問題考查并發(fā)情況下不同的調(diào)度可能產(chǎn)生不同結(jié)果的情況。針對(duì)兩個(gè)并發(fā)執(zhí)行的售票程序,會(huì)相互影響從而得到錯(cuò)誤的結(jié)果。
[問題2]
本問題考查對(duì)事務(wù)并發(fā)控制的相關(guān)知識(shí)的理解掌握。事務(wù)并發(fā)調(diào)度是否正確,可通過對(duì)非沖突語(yǔ)句進(jìn)行交換,若最終將并發(fā)調(diào)度通過交換非沖突語(yǔ)句轉(zhuǎn)換成串行調(diào)度,則該并發(fā)調(diào)度為可串行化調(diào)度,可串行化調(diào)度被作為事務(wù)并發(fā)執(zhí)行正確性的準(zhǔn)則。
為保證可串行化調(diào)度,在事物執(zhí)行過程中引入相應(yīng)指令進(jìn)行控制,即兩段鎖協(xié)議(2PL),即對(duì)數(shù)據(jù)讀之前先加讀鎖,寫前加寫鎖,事務(wù)只有獲得相應(yīng)的鎖才能操作數(shù)據(jù),加解鎖過程分為兩個(gè)階段,前一階段只能加鎖,后一階段只能解鎖,不允許有交叉。兩段鎖協(xié)議是保證并發(fā)事務(wù)可串行化調(diào)度的充分條件。
針對(duì)給出的偽指令操作序列,在事務(wù)讀取數(shù)據(jù)之前加Slock()指令,寫數(shù)據(jù)之前加Xlock()指令,并保證讀/寫鎖不交叉,即滿足兩段鎖協(xié)議。
[問題3]
本問題考查對(duì)2PL協(xié)議理論與SQL中的隔離級(jí)別,以及嵌入式SQL的編程實(shí)踐。 本地給出的空缺(a)要補(bǔ)充的是嵌入式SQL的更新語(yǔ)句;空缺(b)要補(bǔ)充的是嵌入式SQL中的事務(wù)提交語(yǔ)句。
參考答案
[問題1]
調(diào)度A結(jié)果:8
調(diào)度B結(jié)果:9
調(diào)度C結(jié)果:7
調(diào)度A、B結(jié)果錯(cuò)誤,因?yàn)槠茐牧耸聞?wù)的隔離性。一個(gè)事務(wù)的執(zhí)行結(jié)果被另一個(gè)所覆蓋。
[問題2]
(1)判定事務(wù)并發(fā)執(zhí)行正確性的準(zhǔn)則是滿足可串行化調(diào)度。要保證并發(fā)事務(wù)正確地執(zhí)行,采用兩段鎖協(xié)議(2PL)。
(2)重寫后的售票程序偽指令序列:
XLock(A);
R (A,x);
w (A, x-a);
Unlock(A);
[問題3]
(a)balance= :x WHERE flight='A'
(b)(b)EXEC SQL COMMIT WORK
相關(guān)鏈接:
數(shù)據(jù)庫(kù)系統(tǒng)工程師考試知識(shí)點(diǎn)分析與真題詳解(第4版)
數(shù)據(jù)庫(kù)系統(tǒng)工程師考試歷年試題分析與解答(第4版)
數(shù)據(jù)庫(kù)系統(tǒng)工程師考試下午知識(shí)點(diǎn)精講與考前必練
數(shù)據(jù)庫(kù)系統(tǒng)工程師考試考前串講
軟考備考資料免費(fèi)領(lǐng)取
去領(lǐng)取
共收錄117.93萬(wàn)道題
已有25.02萬(wàn)小伙伴參與做題