数据库系统概论第7,8,9,10,11章课后习题

第7章

7.1试述数据库设计过程

1.需求分析阶段
2.概念结构设计阶段
3.逻辑结构设计阶段
4.物理结构设计阶段
5.数据库实施阶段
6.数据库运行和维护阶段

7.2试述数据库设计过程中形成的数据库模式

1.在概念结构设计阶段形成独立于机器特点、独立于各个
  关系数据库管理系统产品的概念模式
2.在逻辑结构设计阶段将E-R图转换成具体的数据库产品支持
  的数据模型,如关系模型,形成数据库逻辑模式然后根据用户
  处理的要求、安全性的考虑,在基本表的基础上再建立必要的
  视图,形成数据的外模式;
3.在物理结构设计阶段,根据关系数据库管理系统的特点和处理
  的需要进行物理存储的安排,建立索引,形成数据内模式

7.3需求分析阶段设计目标是什么?调查的内容是什么?

目标:
通过对现实世界的调查,了解原系统,明确用户具体需求,然后在此系统的基础上
确定新系统功能。新系统必须充分考虑今后可能的扩充和改变,不能仅仅按当前需
求来设计数据库。

调查内容:
1.信息要求。指用户需要从数据库中获得信息的内容与性质。由信息要求可以
导出数据要求,即在数据库中需要存储哪些数据
2.处理要求。指用户要完成的数据处理功能,对处理性能的要求。
3.安全性与完整性要求。

7.4数据字典的内容和作用是什么?

内容:
数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程及部分。其中
数据项是最校组成单位,若干个数据项可以组成一个数据结构。数据字典通过对数据
项和数据结构的定义来描述数据流、数据存储的逻辑内容。
作用:
数据字典是关于数据库中数据的描述,即元数据,而不是数据本身。数据字典是在需求
分析阶段建立,在数据库设计过程中不断修改、充实、完善的。

7.5什么是数据库的概念结构?试述其特点和设计策略

概念结构式信息世界的结构,即概念结构,其主要特点式:
1.能真实、充分地反映现实世界,包括事物和事物之间的联系,能满足用户
  对数据库的处理要求,是对现实世界的一个真实模型
2.易于理解,从而可以用它和不熟悉计算机的用户交换意见,用户的积极参
  与是数据库成功的关键。
3.易于更改,当应用环境和应用要求改变时,容易对概念模型修改和扩充
4.易于向关系、网状、层次等各种数据模型转换。

概念结构设计策略有四种:
1.自顶向下。即首先定义全局概念结构的框架,然后逐步细化。
2.自底向上。即首先定义各局部应用的概念结构,然后将它们
  集成起来,得到全局概念结构。
3.逐步扩张。首先定义最重要的核心概念结构,然后向外扩充
  以滚雪球的方式生成其他概念结构,直至总体概念结构。
4.混合策略。即将自顶向下和自底向上相结合,用自顶向下策略
  设计一个全局概念结构的框架,以它为骨架集成由自底向上策略
  中设计的各局部概念结构。

7.6定义并解释概念模型中的以下术语

实体、实体型、实体集、属性、码、实体-联系图(E-R图)

实体:客观存在并可以相互区分的事物叫实体
实体型:具有相同属性的实体具有相同的特征和性质,用实体
      名及其属性名集合来抽象和刻画同类实体成为实体型
属性:实体所具有的某一特征,一个实体可由若干个数据来刻画
码:唯一标识实体的属性集称为码。
实体-联系图(E-R图):描述实体型、属性和联系的一种方法,其中:
1.实体型用矩形表示,矩形框内写明实体名
2.属性用椭圆形表示,并用无向边将其与相应的实体型连接起来
3.联系用菱形表示,菱形框内写明联系名,并用无向边分别与有关
实体连接起来,同时在无向边旁标上联系的类型(1:1 , 1:n , m:n)

7.7学校中有若干系,每个系有若干班级和教研室,每个教研室有若干教员,其中有的教授和副教授每人各带若干研究生;每个班有若干学生,每个学生选修若干课程,每门课可由若干学生选修。请用 E-R 图画出此学校的概念模型。

image.png

在画E-R图时,读者可以按照习题中对问题的描述一步一步画出每一句话中涉及的实体,
再根据给出的实际语义画出实体之间的联系。例如,每个教研室有若干教员,每个班有若干学生,
可以画出教研室和教员,班级和学生之间一对多的联系,从“有的教授和副教授每人各带若干研究生”,
一个研究生一般指定一个导师,这是通常的规则,所以可以画出教员和学生之间一对多的联系。
E-R图中各实体的属性假设为:
	系:系编号,系名;
	班级:班级编号,班级名;
	教研室:教研室编号,教研室;
	学生:学号,姓名,学历;
	课程:课程编号,课程名;
	教员:职工号,姓名,职称
各联系的属性为:
	选修:成绩;
其他联系无属性。

7.8某工厂生产若干产品,每种产品由不同的零件组成,有的零件可用在不同的产品上。这些零件由不同的原材料制成,不同零件所用的材料可以相同。这些零件按所属的不同产品分别放在仓库中,原材料按照类别放在若干仓库中。请用E-R图画出此工厂产品、零件、材料、仓库的概念模型。

image.png

对实体之间联系的语义描述有时不是直截了当的,需要从对现实世界的整体描述中进行分析,
导出实体之间的某种联系。就如本题中,“零件和仓库的联系”就要从以下描述中分析:
“零件按所属的不同产品分别放在仓库中”。因为一个产品由多种零件组成,所以一个仓库中放多种零件。
反过来,一种零件是放在一个仓库还是多个仓库中呢?因为一种零件可以用在多种产品上,
这些零件按所属的不同产品分别放在仓库中,于是可以知道一种零件可以放在多个仓库中。
所以零件和仓库之间是多对多的联系。
“材料和仓库的联系”则根据“原材料按照类别放在若干仓库”这句话就可以得出:
一个仓库中放多种材料,而一种材料只放在一个仓库中,所以仓库和材料之间是一对多的联系。
各实体的属性为:
	产品:产品号,产品名
	零件:零件号,零件名
	原材料:原材料号,原材料名,类别
  仓库:仓库号,仓库名
各联系的属性为:
	产品组成:使用零件量
  零件制造:使用原材料量
  零件存储:存储量
	材料存放:存放量


7.9什么是数据库的逻辑结构设计?试述其设计步骤。

逻辑结构设计的任务就是把概念结构设计阶段设计好的基本E-R图转换为选用
数据管理系统产品所支持的数据模型相符合的逻辑结构

设计步骤:
1.将概念结构转换为关系模型
2.对数据模型进行优化

7.10试把习题7和习题8中的E-R图转换为关系模型。

习题7中的E-R图转换的关系模型如下,其中有下画线的属性是主码属性。
系(系编号,系名,学校名)
班级(班级编号,班级名,系编号)
教研室(教研室编号,教研室,系编号)
学生(学号,姓名,学历,班级编号,导师职工号)
课程(课程编号,课程名)
教员(职工号,姓名,职称,教研室编号)
选课(学号,课程编号,成绩)
习题8中的E-R图转换的关系模型如下,其中有下画线的属性是主码属性。
产品(产品号,产品名,仓库号)
零件(零件号,零件名)
原材料(原材料号,原材料名,类别,仓库号,存放量)
仓库(仓库号,仓库名)
产品组成(产品号,零件号,使用零件量)
零件组成(零件号,原材料号,使用原材料量)
零件储存(零件号,仓库号,存储量)

7.11试用规范化理论中有关范式的概念分析习题7中所设计的关系模型中各个关系模式的候选码,它们属于第几范式?会产生什么更新异常?

习题7中设计的各个关系模式的码都用下画线注明,这些关系模式都只有一个码,且都是唯一决定的因素,所以都属于BCNF。不会产生更新异常现象。

7.12规范化理论对数据库设计有什么指导意义?答:

规范化理论为数据库设计人员判断关系模式优劣提供了理论标准,可用以指导关系数据模型的优化,用来预测模式可能出现的问题,为设计人员提供了自动产生各种模式的算法工具,使数据库设计工作有了严格的理论基础。

7.13试述数据库物理设计的内容和步骤。答:

数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依赖于给定的DBMS。为一个给定的逻辑数据模型选取S个最适合应用要求的物理结构,就是数据库的物理设计的主要内容。
数据库的物理设计步骤通常分为两步:
确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构;
对物理结构进行评价,评价的重点是时间和空间效率。

7.14数据输入在实施阶段的重要性是什么?如何保证输入数据的正确性?答:

数据库是用来对数据进行存储、管理与应用的,因此在实施阶段必须将原有系统中的历史数据输人到数据库。数据量一般都很大,而且数据来源于部门中的各个不同的单位。数据的组织方式、结构和格式都与新设计的数据库系统有相当的差距,组织数据录入就要将各类源数据从各个局部应用中抽取出来,分类转换,最后综合成符合新设计的数据库结构的形式,输入数据库。因此这样的数据转换、组织入库的工作是相当费力费时的。特别是原系统是手工数据处理系统时,各类数据分散在各种不同的原始表格、凭证、单据之中,数据输入工作量更大。
保证输入数据正确性的方法:为提高数据输入工作的效率和质量,应该针对具体的应用环境设计一个数据录入子系统,由计算机来完成数据入库的任务。在源数据入库之前要采用多种方法对它们进行检验,以防止不正确的数据入库。

7.15什么是数据库的再组织和重构造?为什么要进行数据库的再组织和重构造?答:

数据库的再组织是指按原设计要求重新安排存储位置、回收垃圾、减少指针链等,以提高系统性能。
数据库的重构造则是指部分修改数据库的模式和内模式,即修改原设计的逻辑和物理结构。数据库的再组织是不修改数据库的模式和内模式的。
进行数据库的再组织和重构造的原因:
数据库运行一段时间后,由于记录不断增、删、改,会使数据库的物理存储情况变坏,降低了数据的存取效率,数据库性能下降,这时DBA就要对数据库进行重组织。DBMS一般都提供数据重组织用的实用程序。
数据库应用环境常常发生变化,如增加新的应用或新的实体,取消了某些应用,有的实体与实体间的联系也发生了变化等,使原有的数据库设计不能满足新的需求,需要调整数据库的模式和内模式。这就要进行数据库重构造。

第8章

8.1使用嵌入式SQL对学生-课程数据库中的表,完成下面功能:

①查询某一门课程的信息。要查询的课程由用户在程序运行过程中指定,放在主变量中。
②查询选修某一门课程的选课信息,要查询的课程号由用户在程序运行过程中指定,放在主变量中,然后根据用户的要求修改其中某些记录的成绩字段。
①解析:
这里给出了完成查询的嵌入式SQL语句,再根据实际使用的RDBMS的用户手册完成。

/*定义主变量:HCno,:HCname, :HCpno , : HCcredit , : givencno */
/*读入用户输入的课程号,放入主变量:givencno */
EXEC SQL SELECT Cno , Cname ,Cpno , Ccredit
	INTO: HCno,: HCname,: HCpno, : HCcredit/*把SQL查询结果放入主变量中*/
	FROM Course
	WHERE Cno= :givencno;

②解析:
这里给出了完成查询要使用的游标以及嵌入式SQL语句,再根据实际使用的RDBMS的用户手册完成。

/*定义主变量:HSno, :HCno, : HGrade , : givencno , : NEWGrade */
/*在程序中输人要查询的课程号,放入主变量:givencno */
/*定义游标SCX,对应的SQL语句*/
EXEC SQL DECLARE SCX CURSOR FORSELECT Sno,Cno ,Gradet
FROM sc
WHERE Cno= : givencno;
/*要查询的课程号放在主变量givencno 中*/
EXEC SQL OPEN SCX;
/*打开游标SCX,指向查询结果的第一行*/
for( ; ; )
/*用循环结构逐条处理结果集中的记录*/
| EXEC SQL FETCH sCX INTO : HSno, : HCno, : HGrade;
/*推进游标,将当前数据放入主变量*/
/*显示查询结果,询问用户是否要更新该条记录的选修成绩*/*如果选择更新操作*/
/*用户输人新的成绩到:NEWgrade中 ,然后对当前游标指向的选修课成绩进行更新*/
EXEC SQL UPDATE Sc
/*嵌入式SQL更新语句*/
	SET grade= :NEWgrade
	WHERE CURRENT OF SCX;/*对当前游标指向的选修课成绩进行更新*/
  /*全部处理完SC表后终止循环*/
| ;
EXEC SQL CLOSE SCX;
/*关闭游标SCX 不再和查询结果对应*/
/*提交更新*/

8.2对学生-课程数据库,编写存储过程,完成下面功能:

(1)统计离散数学的成绩分布情况,即按照各分数段统计人数;
(2)统计任意一门课的平均成绩;
(3)将学生选课成绩从百分制改为等级制(即A、B、C、D、E)。

(1)
CREATE PROCEDURE discrete_math_grade( )
AS
DECLARE CURSOR dist FOR
/*定义游标*/
SELECT grade FROM sc WHERE cno=
				( SELECT Cno FROM Course WHERE Cname='离散数学');
	p_100 NUMBER :=0;
	p_90 NUMBER ∶= 0;
  p_80 NUMBER ∶= 0;
  p_70 NUMBER ∶=0;
  p_60 NUMBER ∶=0;
  p_othersNUMBER := 0;
  p_gradeNUMBER;
BEGIN
OPEN dist;
/*打开游标*/
LOOP
	FETCH dist INTO p_grade;/*使用游标*/
  EXIT WHEN(dist%NOTFOUND);
	IF( p_grade== 100) THEN
		p_100 : =p_100+1;
  ELSIF( p_grade >=90) THEN
		p_90:=p_90+1;
	ELSIF( p_grade >= 80) THEN
		p_80∶ =p_80+ 1;
	ELSIF( p_grade >=70) THEN
		p_70∶=p_70+1;
	ELSIF( p_grade >= 60) THEN
		p_60: =p_60+1 ;
	ELSE
		p_others ∶ = p_others+1;
  END F;
	END LOOP;
  CLOSE dist;
/*关闭游标*/
END;

(2)
--解析:扫描SC表,把学生选课成绩grade 的值由百分制更新为等级制。
CREATE PROCEDURE gradetype( )
AS
DECLARE CURSOR gradecursor FOR SELECT grade FROM sc;
	scgrade NUMBER;
	score CHAR( 1);
BECIN
	OPEN gradecursor;
/*打开游标*/
LOOP
FETCH gradecursor INTO scgrade ;
/*使用游标*/
EXIT WHEN( gradecursor %NOTFOUND);
IF ( scgrade >= 90 AND scgrade <= 100)THEN
score : ='A ';
ELSIF( scgrade>=80)THEN
score : ='B ';
ELSIF ( scgrade >=70)THEN
score : ='C';
ELSIF( scgrade >=60) THEN
score : ='D ';
ELSE
score : ='E ';END IF;
END LOOP;
END;

第9章

1.试述查询优化在关系数据库系统中的重要性和可能性。

重要性:关系系统的查询优化既是RDBMS实现的关键技术,又是关系系统的优点所在,它减轻了用户选择存取路径的负担,用户只要提出“干什么”,不必指出“怎么干”。
查询优化的优点不仅在于用户不必考虑如何最好地表达查询以获得较好的效率,而且在于系统可以比用户程序的“优化”做得更好。
可能性:
①优化器可以从数据字典中获取许多统计信息,例如各个关系中的元组数,关系中每个属性值的分布情况,这些属性上是否有索引,是什么索引(B+树索引、Hash索引、唯一索引,还是组合索引),等等。优化器可以根据这些信息选择有效的执行计划,而用户程序则难以获得这些信息。
如果数据库的物理统计信息改变了,系统可以自动对查询进行重新优化以选择相适应的执行计划。在非关系系统中必须重写程序,而重写程序在实际应用中往往是不太可能的。
③优化器可以考虑数十甚至数百种不同的执行计划,从中选出较优的一个,而程序员般只能考虑有限的几种可能性。
④优化器中包括了很多复杂的优化技术,这些优化技术往往只有最好的程序员才能掌握。系统的自动优化相当于使得所有人都拥有这些优化技术。

2.假设关系R(A,B)和S(B,C,D)情况如下:R有20 000个元组,S有1 200个元组,一个块能装40个R的元组,能装30个S的元组,估算下列操作需要多少次磁盘块读。

R上没有索引, select * from R;
②R中A为主码,其上有3层B+树索引,select * from R where A= 10;
③嵌套循环连接image.png;
④排序合并连接image.png,区分R与S在B属性上有序和无序两种情况。
答:
①需要对R进行全表扫描,块数=20 000/40=500。
②对R进行索引扫描,块数=3+1=4;其中3块B+树索引块,1块数据块。
③R本身 20 000/40=500个块,S本身1 200/30=40个块,以S为外表,假设内存分配的块
40
数为k,嵌套循环连接需要的块数为:40+[40/(k-1)]500。
④如果R和S都在B属性上排好序,块数500+40=540;如果都没有排序,则还要加上排序代价,结果为540+2 * 500 * ( log500+1)+2
40 * ( log40+ 1 )。

3.对学生-课程数据库,查询信息系学生选修了的所有课程名称。

SELECT Cname
FROM Student , Course , sc
WHERE Student.Sno=SC.Sno AND Sc.Cno=Course.Cno A ND Student.Sdept =’ IS ';此查询要求信息系学生选修了所有课程名称。
试画出用关系代数表示的语法树,并用关系代数表达式优化算法对原始的语法树进行优化处理,画出优化后的标准语法树。
image.png

4.对于下面的数据库模式

Teacher(Tno, Tname,Tage , Tsex ) ;
Department( Dno,Dname,Tno ) ;
Work( Tno,Dno, Year ,Salary )
假设Teacher 的Tno属性、Department 的 Dno属性以及 Work 的 Year属性上有B+树索引,说明通常情况下列操作的处理方法。
select * from teacher where tsex =‘女’
select * from department where dno < 3013
select * from work where year <> 2000
select * from work where year > 2000 and salary < 5000
select * from work where year < 2000 or salary < 5000
①对teacher进行全表扫描,查看元组是否满足性别为女。
②如果满足dno <301的元组数目较少,可以通过索引找到dno= 301的索引项,然后顺着B+树的顺序集得到dno <301的索引项,通过这些指针找到department中的元组;如果dno < 301的元组数目较多,可以采用对department的全表扫描方式处理。
③对work进行全表扫描,查看元组是否满足year <>2000。
④通过year的索引找到满足year > 2000的元组,检查元组是否满足salary < 5000。
⑤对work进行全表扫描,查看元组是否满足year <2000或salary < 5000。

5.对于题4中的数据库模式,存在如下的查询:

SELECT tname
FROM teacher , department , work
WHERE teacher.tno = work.tno AND department.dno= work.dno ANDdepartment.dname='计算机系’AND salary > 5000
画出语法树以及用关系代数表示的语法树,并对关系代数语法树进行优化,画出优化后的语法树。
语法树:
image.png
image.png
image.png

6.试述关系数据库管理系统查询优化的一般准则。

下面的优化策略一般能提高查询效率:选择运算应尽可能先做。
②把投影运算和选择运算同时进行。
③把投影同其前或其后的双目运算结合起来执行。
④把某些选择同在它前面要执行的笛卡儿积结合起来成为一个连接运算。⑤我出公共子表达式。
⑥选取合适的连接算法。
①~⑤是指代数优化策略。⑥涉及物理优化。
①选择运算应尽可能先做。因为满足选择条件的元组一般是原来关系的子集,从而使计算的中间结果变小。
②把投影运算和选择运算同时进行。如果在同一个关系上有若干投影运算和选择运算,则可以把投影运算和选择运算结合起来,即选出符合条件的兀组石就对这些儿丑似投影。
③把投影同其前或其后的双目运算结合起来。双目运算月JUIN 运昇、田下儿返,一上.面的理由类似,在进行JOIN 运算、笛卡儿积时要选出关系的元组,没有必要为了投影操作(通常是去掉某些字段)而单独扫描一遍关系。
④把某些选择同在它前面要执行的笛卡儿积结合起来成为一个连接运算。连接特别是等连接运算要比在同样关系上的笛卡儿积产生的结果小得多,执行代价也小得多。
⑤找出公共子表达式。先计算一次公共子表达式并把结果保存起来共享,以避免重复计算公共子表达式。当查询的是视图时,定义视图的表达式就是公共子表达式的情况
⑥选取合适的连接算法。连接操作是关系操作中最费时的操作,人们研究了许多连接优化算法。例如索引连接算法﹑排序合并算法、Hash连接算法等。
选取合适的连接算法属于选择“存取路径”,是物理优化的范畴。

7.试述关系数据库管理系统查询优化的一般步骤。

各个关系系统的优化方法不尽相同,大致的步骤可以归纳如下:
①把查询转换成某种内部表示,通常用的内部表示是语法树。
②把语法树转换成标准(优化)形式,即利用优化算法把原始的语法树转换成优化的形式。
③选择低层的存取路径。
④生成查询计划,选择所需代价最小的计划加以执行。

第10章

1.试述事务的概念及事务的4个特性。恢复技术能保证事务的哪些特性?答:

事务是用户定义的一个数据库操作序列,这些操作要么全做、要么全不做,是一个不可分割的工作单位。
事务具有4个特性:原子性(Atomicity )、一致性(Consistency )、隔离性( Isolation )和持续性( Durability)。这4个特性也简称为ACID特性。

  1. 原子性:事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。
  2. 一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
  3. 隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
  4. 持续性:持续性也称永久性( permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。

故障恢复可以保证事务的原子性与持续性。

2.为什么事务非正常结束时会影响数据库数据的正确性,请举例说明之

事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就可能处于不正确的状态,或者说是不一致的状态。
例如某工厂的库存管理系统中,要把数量为Q的某种零件从仓库1移到仓库2存放,则可以定义一个事务T,T包括两个操作:Q1=Q1-Q,Q2=Q2+Q。如果T非正常终止时只做了第一个操作,则数据库就处于不一致性状态,库存量无缘无故少了Q。

3.登记日志文件时为什么必须先写日志文件,后写数据库?

把对数据的修改写到数据库中和把表示这个修改的日志记录写到日志文件中是两个不同的操作。有可能在这两个操作之间发生故障,即这两个写操作只完成了一个
如果先写了数据库修改,而在运行记录中没有登记这个修改,则以后就无法恢复这个修改了。如果先写日志,但没有修改数据库,在恢复时只不过是多执行一次UNDO操作,并不会影响数据库的正确性。所以一定要先写日志文件,即首先把日志记录写到日志文件中,然后写数据库的修改。

4.考虑下图所示的日志记录:

image.png
1.如果系统故障发生在14之后,说明哪些事务需要重做,哪些事务需要回滚;
②如果系统故障发生在10之后,说明哪些事务需要重做,哪些事务需要回滚;
③如果系统故障发生在9之后,说明哪些事务需要重做,哪些事务需要回滚;
④如果系统故障发生在7之后,说明哪些事务需要重做,哪些事务需要回滚。
答:
1.重做:T1、T3;回滚:T2、T4。
②重做:T1;回滚:T2、T3。
③重做:T1;回滚:T2、T3。
④重做:T1 ;回滚:T2。

5.考虑题4所示的日志记录,假设开始时A、B、C的值都是0:

如果系统故障发生在14之后,写出系统恢复后A、B、C的值。
如果系统故障发生在12之后,写出系统恢复后A、B、C的值。
③如果系统故障发生在10之后,写出系统恢复后A、B、C的值。
④如果系统故障发生在9之后,写出系统恢复后A、B、C的值。
⑤如果系统故障发生在7之后,写出系统恢复后A、B、C的值。
如果系统故障发生在5之后,写出系统恢复后A、B、C的值。
答:
1 A=8,B=7,C= 11。
2 A= 10,B=0,C= 11。
3 A= 10,B=0,C= 11。
4 A= 10,B=0,C= 11。
⑤A=10,B=0,C= 11。
⑥A=0,B=0,C=0。

6.针对不同的故障,试给出恢复的策略和方法。(即如何进行事务故障的恢复、系统故障的恢复,以及如何进行介质故障恢复。)

事务故障的恢复步骤是:
①反向扫描文件日志,查找该事务的更新操作。
②对该事务的更新操作执行逆操作。即将日志记录中“更新前的值”写人数据库。直至读到此事务的开始标记,该事务故障的恢复就完成了。
系统故障的恢复步骤是:
①正向扫描日志文件,找出在故障发生前已经提交的事务队列( REDO 队列》和大元成的事务队列(UNDO 队列)。·
②对未完成的事务队列中的各个事务进行UNDO处理。
③对已经提交的事务队列中的各个事务进行 REDO处理。
介质故障的恢复步骤是:
①装人最新的数据库后备副本(离故障发生时刻最近的转储副本),使数据库恢复到最近一次转储时的一致性状态。
②装入转储结束时刻的日志文件副本。
③启动系统恢复命令,由DBMS 完成恢复功能,即重做已完成的事务。

7.什么是检查点记录,检查点记录包括哪些内容?

检查点记录是一类新的日志纪录。它的内容包括:
①建立检查点时刻所有正在执行的事务清单,如下图中的T1、T2。
2.这些事务的最近一个日志记录的地址,如下图中的D1、D2。
image.png
image.png

8.具有检查点的恢复技术有什么优点?试举一个具体的例子加以说明。

利用日志技术进行数据库恢复时,恢复子系统必须搜索整个日志,这将耗费大量的时间。此外,需要REDO处理的事务实际上已经将它们的更新操作结果写到数据库中了,恢复子系统又重新执行了这些操作,浪费了大量时间。
检查点技术就是为了解决这些问题。例如:
image.png
在采用检查点技术之前,恢复时需要从头扫描日志文件,而利用检查点技术只需要从 tC开始扫描日志,这就缩短了扫描日志的时间。
事务T3的更新操作实际上已经写到数据库中了,进行恢复时没有必要再REDO处理,采用检查点技术做到了这一点。

9.试述使用检查点无法进行绘复的步骤。

1.在重新开始文件(见第7题的图)中,找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录。
2.由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LIST。这里建立两个事务队列:

  • UNDO-LIST:需要执行undo操作的事务集合;
  • REDO-LIST:需要执行redo 操作的事务集合。

把ACTIVE-LIST 暂时放人 UNDO-LIST队列,REDO队列暂为空。
③从检查点开始正向扫描日志文件

  • 如有新开始的事务T,把T暂时放入UNDO-LIST队列;
  • 如有提交的事务T,把T,从 UNDO-LIST 队列移到REDO-LIST队列,直到日志文件结束。④对 UNDO-LIST中的每个事务执行UNDO操作,对 REDO-LIST中的每个事务执行REDO操作。

10.什么是数据库镜像?它有什么用途?

数据库镜像即根据DBA的要求,自动把整个数据库或者其中的部分关键数据复制到另一个磁盘上。每当主数据库更新时, DBMS自动把更新后的数据复制过去,即 DBMS自动保证镜像数据与主数据的一致性。
数据库镜像的用途:
①用于数据库恢复。当出现介质故障时,镜像磁盘可继续使用,同时 DBMS自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副本
2.提高数据库的可用性。在没有出现故障时,当一个用户对某个数据加排他锁进行修改时,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁。

第11章

1. 数据库中为什么要并发控制?并发控制技术能保证事务那些特性?

答:如果事务是串行执行,会让大部分资源得不到利用,数据库采用并发采用,使多个事务可以同时进行,充分利用系统资源,但这会使事务ACID特性遭到破坏,因此需要采用并发控制;隔离性、一致性。

2.并发操作可能产生哪几类数据不一致?用什么方法能避免不一致情况。

答:丢失修改(两事务同时修改)、不可重复读(一个事务读之后,另一个事务 进行了修改、插入、删除)、读脏数据(一个改,一读,但改的被撤销了)。可以采用封锁、时间戳和乐观控制法。

3.什么是封锁?基本类型有?试述他们的含义

答:封锁就是事务T对数据进行操作之前向系统请求加锁,加锁后T对数据有一定控制能力,锁为释放,其他事务对该数据不能更新。
基本类型有排他锁(X锁),共享锁(S锁)。排它锁指只有T可以对其进行读写操作,锁未释放之前,其他事务不可加锁,不可读写该数据;共享锁指T可以进行读,锁未释放之前,其他事务只能加S锁,进行读操作。

4.如何用封锁机制保证数据的一致性?

答: DBMS 在对数据进行读、写操作之前首先对该数据执行封锁操作,例如下图中事务 Tl 在对 A 进行修改之前先对 A 执行 xLock ( A ) ,即对 A 加 x 锁。这样,当B请求对 A 加 x 锁时就被拒绝,B只能等待 Tl 释放 A 上的锁后才能获得对 A 的 x 锁,这时它读到的 A 是 Tl 更新后的值,再按此新的 A 值进行运算。这样就不会丢失 Tl 的更新。
image.png
DBMS 按照一定的封锁协议,对并发操作进行控制,使得多个并发操作有序地执行,就可以避免丢失修改、不可重复读和读“脏’数据等数据不一致性。

5 .什么是活锁?试述活锁的产生原因和解决方法。

活锁与死锁类似,但是线程并不是被阻塞住了,而是一直在忙碌却没有达到预期结果,导致程序无法正常执行。
活锁的产生原因通常是由于某些线程或进程在处理任务时,过于优先考虑自己的资源使用情况,忽略了其他线程的需求。当多个线程同时互相协作,互相等待对方完成操作时,就有可能导致活锁的出现。
例如,线程 A 和线程 B 同时需要访问资源 X 和 Y。线程 A 获取了 X 资源,线程 B 获取了 Y 资源,然后它们都试图获取对方所持有的资源。由于两个线程都无法获得它们需要的资源,它们会不断地进行交互,试图解决资源竞争问题,但最终导致资源都无法被释放,产生了活锁。
解决活锁的方法通常是通过增加随机性来打破死循环,让线程之间更好地协调。例如,可以引入随机的等待时间、随机的重试次数或者引入一个第三方控制器来协调线程之间的操作,以达到避免活锁的目的。也可以通过设计更加合理的算法或者数据结构来避免活锁。例如,在资源竞争问题较为复杂的情况下,可以采用基于时间戳或者优先级的算法来协调线程之间的操作,以防止活锁的出现。

6.什么是死锁?请给出防御死锁的若干方法。

死锁指的是两个或多个进程或线程相互等待对方所持有的资源,导致它们都无法继续执行下去的情况。
为了避免死锁的发生,可以采取以下若干方法:
资源预先分配:在设计程序时,可以通过资源预分配的方式来尽量避免资源竞争。这样可以在程序运行时尽量减少资源的竞争情况,从而减少死锁的可能性。
资源有序分配:要求系统中所有的资源都按照一定的顺序去申请,释放资源也按照相反的顺序进行,这样可以减少死锁的概率。
资源抢占:当系统检测到可能发生死锁时,可以强制性地抢占某些进程所持有的资源,以打破潜在的死锁状态。
超时机制:引入超时机制,即当某个进程或线程在等待资源的过程中超过一定时间仍未获得资源,就放弃当前尝试,释放已经获得的资源,然后重新开始尝试获取资源。
死锁检测与恢复:采用死锁检测算法,当检测到死锁时,通过回滚事务、释放资源或者杀死部分进程来解除死锁。

7.请给出一种检测死锁发生的一种方法,当发生死锁后如何解除死锁?

答:数据库系统一般采用允许死锁发生, DBMS 检测到死锁后加以解除的方法。 DBMS 中诊断死锁的方法与操作系统类似,一般使用超时法或事务等待图法。超时法是:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。超时法实现简单,但有可能误判死锁,事务因其他原因长时间等待超过时限时,系统会误认为发生了死锁。若时限设置得太长,又不能及时发现死锁发生。 DBMS 并发控制子系统检测到死锁后,就要设法解除。通常采用的方法是选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有锁,使其他事务得以继续运行下去。当然,对撤销的事务所执行的数据修改操作必须加以恢复

8.什么样的并发调度是正确的调度?

答:可串行化调度,其结果与事务某一次序串行执行这些事务的结果相同。注意思考怎么得到不可串行调度:把所有串行执行列出来,找一个结果不等于他们的调度。

9.设T1,T2,T3是如下的三个事务,设A的初值为0。

T1: A:=A+2;
T2:   A:=A*2;
T3:A:=A**2; (即 A←A^2)
(1)若这三个事务允许并发执行,则有多少种可能的正确结果?请一一列举出来。
答:A的最终结果可能有2、4、8、16。因为串行执行次序有T1T2T3;T1T3T2;T2T1T3;T2T3T1;T3T1T2;T3T2T1。对应的执行结果是16;8:4;2;4;2。

(2)请给出一个可串行化的调度,并给出执行结果。
image.png
最后结果A为16,是可串行化的调度。

(3)请给出一个非串行化的调度,并给出执行结果。
image.png
最后结果A为0,是非可串行化的调度。

(4)若这三个事务都遵守两段锁协议,请给出一一个不产生死锁的可串行化调度。
image.png
(5)若这三个事务都遵守两段锁协议。请给出一个产生死锁的调度.
image.png

10.今有三个事务的一个调度r3(B)r1(A)w3(B)r2(B)r2(A)w2(B)r1(B)w1(A),该调度是冲突可串行化的调度吗?为什么?

答:是冲突可串行化的调度。Scl=r3(B) r1(A) w3(B) r2(B) r2(A) w2(B) r1(B) w1(A),交换r1(A)和w3(B),得到r3(B) w3(B) r1(A) r2(B) r2(A) w2(B) r1(B) w1(A),再交换r1(A)和r2(B) r2(A) w2(B),得到Sc2=r3(B) w3(B) r2(B) r2(A) w2(B) r1(A) r1(B) w1(A),由于Sc2是串行的,而且两次交换都是基于不冲突操作的,所以Sc1=r3(B) r1(A) w3(B) r2(B) r2(A) w2(B) r1(B) w1(A)是冲突可串行化的调度。

11.试证明若并发事务遵守两段锁协议,则对这些事务的并发调度是可串行化的

答:①事务T,写某个数据对象A,T,读或写A;②事务T,读设T1和T2访问的潜在冲突的公共对象为{A,A2, …,An}。不失一般性,假设这组潜在冲突对象中X={A1,A2, …,A}均符合情况1。Y={Ai+1, … ,A n}符合情况2。或写某个数据对象A,T,写A。①如果操作②先执行,则T,获得锁,T2等待。②操作⑥先执行的情况与①对称。因此,若并发事务遵守两段锁协议,在不发生死锁的情况下,对这些事务的并发调度一定是可串行化的。

12.举例说明对并发事务的一个调度是可串行化的,而这些并发事务不一定遵守两段锁协议。

答:
image.png

13.考虑如下调度说明这些调度集合之间的包含关系。

(1)正确的调度
(2)可串行化的调度
(3)遵循两阶段封锁(2PL)的调度
(4)串行调度

答:遵循两阶段封锁(2PL)的调度可串行化得调度串行调度正确的调度。

14.考虑T1和T2两个事务。

T1: R(A); R(B);B=A+B; W(B) T2:R(B); R(A);A=A+B; W(A)

(1) 改写T1和T2,增加加锁操作和解锁操作, 并要求遵循两阶段封锁协议。
image.png
(2)说明T1和T2的执行是否会引起死锁,给出T1和T2的一个调度并说明之。
image.png

15.为什么要引进意向锁?意向锁的含义是什么?

答:引进意向锁是为了提高封锁子系统的效率。该封锁子系统支持多种封锁粒度。原因是:在多粒度封锁方法中一个数据对象可能以两种方式加锁 ― 显式封锁和隐式封锁。因此系统在对某一数据对象加锁时不仅要检查该数据对象上有无(显式和隐式)封锁与之冲突,还要检查其所有上级结点和所有下级结点,看申请的封锁是否与这些结点上的(显式和隐式)封锁冲突,显然,这样的检查方法效率很低。为此引进了意向锁。意向锁的含义是:对任一结点加锁时,必须先对它的上层结点加意向锁。例如事务 T 要对某个元组加 X 锁,则首先要对关系和数据库加 ix 锁。换言之,对关系和数据库加 ix 锁,表示它的后裔结点 ― 某个元组拟(意向)加 X 锁。引进意向锁后,系统对某一数据对象加锁时不必逐个检查与下一级结点的封锁冲突了。例如,事务 T 要对关系 R 加 X 锁时,系统只要检查根结点数据库和 R 本身是否已加了不相容的锁(如发现已经加了 ix ,则与 X 冲突),而不再需要搜索和检查 R 中的每一个元组是否加了 X 锁或 S 锁。

16.试述常用的意向锁: IS锁,IX锁,SIX锁,给出这些锁的相容矩阵。

image.png
IS锁:表示事务有意向以共享模式访问某个资源。多个事务可以同时持有IS锁,并且IS锁与IS锁是兼容的,因为它们都是共享模式的锁,不会造成互斥。IS锁与IX锁和SIX锁是兼容的,因为IS锁表示事务只有意向以共享模式访问资源,并不会进行修改操作。
IX锁:表示事务有意向以独占模式访问某个资源。IX锁与IX锁和SIX锁都是不兼容的,因为IX锁表示事务有意向进行修改操作,不兼容于其他的修改操作。IX锁与IS锁是兼容的,因为IS锁只是共享访问资源,不会进行修改操作。
SIX锁:表示事务有意向以共享模式访问某个资源,并且可能会升级为独占模式。SIX锁与IX锁和SIX锁都是不兼容的,因为SIX锁表示事务有意向进行修改操作,不兼容于其他的修改操作。SIX锁与IS锁是兼容的,因为IS锁只是共享访问资源,不会进行修改操作。

  • 37
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值