摘要:希賽網軟考頻道小編為大家整理了2019年數據庫系統工程師下午真題第五部分,供大家參考。
5、閱讀下列說明,回答問題1至問題3,將解答填入答題紙的對應欄內。
【說明】
某商業銀行賬務系統的部分關系模式如下:
賬戶表:Account (ano, aname, balance),其中屬性含義分別為:賬戶號碼,賬戶名稱和賬戶余額。
交易明細表:TranDetails (too, ano, ttime, toptr, amount, ttype),其中屬性分別為:交易編號,賬戶號碼,交易時間,交易操作員,交易金額,交易類型(1-存款,2-取款,
3-轉賬)。
余額匯總表:AcctSums (adate, atime, allamt),其中屬性分別為:匯總日期,匯總時間,總余額。
常見的交易規則如下:
存/取款交易:操作員核對用戶相關信息,在系統上執行存/取款交易。賬務系統増加/ 減少該賬戶余額/并在交易明細表中增加一條存/取款交易明細。
轉賬交易:操作員核對用戶相關信息,核對轉賬交易賬戶信息,在系統上執行轉賬交易。賬務系統對轉出賬戶減少其賬戶余額,對轉入賬戶增加其賬戶余額,并在交易明細表中增加一條轉賬交易明細。
余額匯總交易:將賬戶表中所有賬戶余額累計匯總。
假定當前賬戶表中的數據記錄如表5-1所示。

問題內容:
請根據上述描述,回答以下問題。
【問題1】(3分)
假設在正常交易時間,賬戶上在進行相應存取款或轉賬操作時,要執行余額匯總交易。下面是用SQL實現的余額匯總程序,請補全空缺處的代碼。要求(不考慮并發性能)在 保證余額匯總交易正確性的前提下,不能影響其他存取款或轉賬交易的正確性。
CREATE PROCEDURE AcctSum(OUT: Amts DOUBLE)
BEGIN
SET TRANSACTION ISOLATION LEVEL( );
BEGIN TRANSACTION;
SELECT sum(balance) INTO : Amts FROM Accounts;
if error// error是由DBMS提供的上一句SQL的執行狀態
BEGIN
ROLLBACK;
return -2;
END
INSERT INTO AcctSums
VALUES (getDATE(), getTIME(), ( ));
if error // error是由DBMS提供的上一句SQL的執行狀態
BEGIN
ROLLBACK;
return-3;
END
( );
END
【問題2】(8分)
引入排它鎖指令LX()和解鎖指令UX(),要求滿足兩段鎖協議和提交讀隔離級別。假設在進行余額匯總交易的同時,發生了一筆轉賬交易。從101賬戶轉給104賬戶400元。 這兩筆事務的調度如表5-2所示。

(1)請補全表中的空缺處(a)、(b);
(2)上述調度結束后,匯總得到的總余額是多少?
(3)該數據是否正確?請說明原因。
【問題3】(4分)
在【問題2】的基礎上,引入共享鎖指令LS0和解鎖指令US()。對【問題2】中的調度進行重寫,要求滿足兩段鎖協議。兩個事務執行的某種調度順序如表'5-3所示,.該調度順序使得匯總事務和轉賬事務形成死鎖。請補全表中的空缺處(a)、(b)。

相關推薦:2019年數據庫系統工程師下午真題及答案
在線題庫:數據庫系統工程師歷年真題自測估分
軟考備考資料免費領取
去領取
專注在線職業教育25年