2010年上半年数据库系统工程师考试真题及答案解析下午卷(五)

数据库系统工程师 责任编辑:茶泡了饭 2015-12-29

添加老师微信

备考咨询

加我微信

摘要:2010年上半年数据库系统工程师考试真题及答案解析下午卷 试题五 阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。

  >>>>>>>>>>点击进入数据库系统工程师考试网络课堂

  >>>>>>>>>>点击进入数据库系统工程师历年真题题库

  >>>>>>>>>>点击进入数据库工程师考试大纲教材


2010年上半年数据库系统工程师考试真题

下午卷


试题五
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
[说明]
  某航空售票系统负责所有本地起飞航班的机票销售,并设有多个机票销售网点。各售票网点使用相同的售票程序。假设售票程序中用到的伪指令如表5-1所示。

50.png

假设某售票网点一次售出a张航班A的机票,则售票程序的伪指令序列为:R(A,x);W(A,X-a)。根据上述业务及规则,完成下列问题:
[问题1]
  若两个售票网点同时销售航班A的机票,在数据库服务器端可能出现如下的调度:
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个销售网点的读写操作,其余类同。
      假设当前航班A剩余10张机票,分析上述三个调度各自执行完后的剩余票数,并指出错误的调度及产生错误的原因。
[问题2]
      (1)判定事务并发执行正确性的准则是什么?如何保证并发事务正确地执行?
(2)引入相应的加解锁指令,重写售票程序的伪指令序列,以保证正确的并发调度。

  [问题3]
下面是用E-SQL实现的机票销售程序的一部分,请补全空缺处的代码。
EXEC SQL SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
      EXEC SQL SELECT balance INTO :x FROM tickets WHERE flight='A';
      printf("航班A当前剩余机票数为:%d\n请输入购票数:",x);
      scanf("%d",&a);
      x=x-a;
      if(x<0)
      EXEC SQL ROLLBACK WORK;
      printf("票数不够,购票失败!");
      else{
EXEC SQL UPDATE tickets SET (a)
      if(SQLCA.sqlcode<>SUCCESS)
      EXEC SQL ROLLBACK WORK;
      else (b)  }



  试题五分析
本题考查的是并发控制的概念和应用,属于比较传统的题目,考查点也与往年类似。
[问题1]
  本问题考查并发情况下不同的调度可能产生不同结果的情况。针对两个并发执行的售票程序,会相互影响从而得到错误的结果。
  [问题2]
  本问题考查对事务并发控制的相关知识的理解掌握。事务并发调度是否正确,可通过对非冲突语句进行交换,若最终将并发调度通过交换非冲突语句转换成串行调度,则该并发调度为可串行化调度,可串行化调度被作为事务并发执行正确性的准则。
为保证可串行化调度,在事物执行过程中引入相应指令进行控制,即两段锁协议(2PL),即对数据读之前先加读锁,写前加写锁,事务只有获得相应的锁才能操作数据,加解锁过程分为两个阶段,前一阶段只能加锁,后一阶段只能解锁,不允许有交叉。两段锁协议是保证并发事务可串行化调度的充分条件。
针对给出的伪指令操作序列,在事务读取数据之前加Slock()指令,写数据之前加Xlock()指令,并保证读/写锁不交叉,即满足两段锁协议。
  [问题3]
  本问题考查对2PL协议理论与SQL中的隔离级别,以及嵌入式SQL的编程实践。 本地给出的空缺(a)要补充的是嵌入式SQL的更新语句;空缺(b)要补充的是嵌入式SQL中的事务提交语句。



  参考答案
[问题1]
调度A结果:8
调度B结果:9
调度C结果:7
      调度A、B结果错误,因为破坏了事务的隔离性。一个事务的执行结果被另一个所覆盖。

  [问题2]
(1)判定事务并发执行正确性的准则是满足可串行化调度。要保证并发事务正确地执行,采用两段锁协议(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



>>>>>>>>>>点击继续答题

>>>>>>>>>>点击返回目录


      相关链接:

数据库系统工程师考试知识点分析与真题详解(第4版)
数据库系统工程师考试历年试题分析与解答(第4版)
数据库系统工程师考试下午知识点精讲与考前必练
数据库系统工程师考试考前串讲


更多资料
更多课程
更多真题
温馨提示:因考试政策、内容不断变化与调整,本网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!

软考备考资料免费领取

去领取

!
咨询在线老师!