数据库恢复习题.docx
- 文档编号:6070506
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:26
- 大小:36.56KB
数据库恢复习题.docx
《数据库恢复习题.docx》由会员分享,可在线阅读,更多相关《数据库恢复习题.docx(26页珍藏版)》请在冰豆网上搜索。
数据库恢复习题
6什么是数据库的恢复?
恢复的基本原则是什么,恢复如何实现?
数据库的恢复是指当数据库系统发生故障时,通过一些技术,使数据库从被破坏、不正确的状态恢复到最近一个正确的状态。
恢复的基本原则就是冗余,即数据的重复存储。
恢复的常用方法有:
(1)定期对整个数据库进行复制或转储;
(2)建立日志文件;(3)恢复。
用REDO或UNDO处理。
7数据库的并发操作会带来哪些问题?
如何解决?
数据库的并发操作会带来三类问题:
(1)丢失更新问题;(具体内容见教材P158)
(2)不一致分析问题
(3)“脏数据”的读出。
解决的办法通常是采用“封锁”技术。
8有哪些“丢失更新”问题?
如何处理?
(1)并发调度引起的“丢失更新”问题。
在并发调度中,如两个事务同时对某数据库进行更新操作,在操作中丢失了其中某个事务对某数据的更新操作。
处理的办法就是对并发操作采用X封锁技术。
(2)由恢复引起的更新丢失现象。
采用X封锁以后,先执行事务T1,再执行事务T2,此时,如果T2做ROLLBACK操作,就把事务T2的更新丢失了。
处理方式是采用PXC协议,不允许事务T1执行解锁操作直到事务执行到终点(COMMIT或ROLLBACK)。
9为什么DML只提供解除S封锁的操作,而不提供解除X封锁的操作?
为了防止由恢复引起的更新丢失现象,PXC协议规定:
X封锁必须保留到事务终点(COMMIT或ROLLBACK)。
因此在DML中,COMMIT或ROLLBACK的语义中包含了X封锁的解除,不用提供解除X封锁的操作。
而对于S封锁而言,它是一种共享型的封锁(读取但不能修改),其数据不可能是未提交的修改,封锁不必等提交后才能解除,因此可以由事务用UNLOCK解除各自对数据的封锁。
10为什么有些封锁需保留到事务终点,而有些封锁可随时解除?
因为有的封锁需要更新数据,保留到终点才能确认是否提交或回退以避免脏数据的读出,所以这些封锁需要保留到事务终点。
而有些事务全部或部分操作只是读取数据,不涉及更新数据操作,因此这一部分操作的封锁可以随时解除。
11死锁的发生是坏事还是好事?
试说明理由。
如何解除死锁状态?
死锁的发生即是坏事又是好事。
(1)使并发事务不能继续执行下去,造成时间开销却不产生结果。
(2)在某些时候我们要利用它来解决更新操作导致的数据库不一致状态。
解除死锁状态:
抽出某个事务作为牺牲品,把它撤消,做回退操作,解除它的所有封锁,并恢复到初始状态。
12试叙述"串行调度"与"可串行化调度"的区别。
串行调度是多个事务按照一定的次序依次执行;在某一时刻只有一个事务在执行。
而可串行化调度是并发调度中的一个概念。
在并发调度中,某一时刻有多个事务同时被处理。
如果某事务集的一个并发调度的结果与某个串行调度等价,则称此并发调度是是可串行化调度。
(以上几题具体可参照书上p20-21)
13什么是数据库的完整性?
DBMS的完整性子系统的功能是什么?
数据库的完整性是指数据的正确性和相容性。
DBMS完整性子系统的功能是:
(1)监督事务的执行,并测试是否违反完整性规则;
(2)如有违反,则采取恰当的操作,如拒绝、报告违反情况,改正错误等方法进行处理。
14完整性规则由哪几个部分组成?
关系数据库的完整性规则有哪几类?
完整性规则由三部分组成:
触发条件:
即什么时候使用规则进行检查;
约束条件:
即要检查什么样的错误;
ELSE子句:
即查出错误后该如何处理。
完整性规则有以下三类:
域完整性规则,用于定义属性的取值范围;
域联系的规则,定义一个或多个关系中,属性值间的联系、影响和约束。
关系完整性规则,定义更新操作对数据库中值的影响和限制。
15试详述SQL中的完整性约束机制?
SQL中的完整性约束规则有主键约束、外键约束、属性值约束和全局约束等多种形式。
△主键约束。
它是数据中最重要的一种约束。
在关系中主键值不允许空,也不允许出现重复,体现了关系要满足实体完整性规则。
主键可用主键子句或主键短语进行定义。
△外键约束。
根据参照完整性规则,依赖关系中外键或者为空值,或者是基本关系(参照关系)中的该键的某个值。
外键用外键关系子句定义,并考虑删除基本关系元组或修改基本关系的主键值的影响,依赖关系可按需要采用RESTRICT、SETNULL、CASCADE方式。
△属性值约束。
当要求某个属性的值不允许空值时,那么可以在属性定义后加上关键字:
NOTNULL,这是非空值约束。
还可以用CHECK子句对一个属性值加以限制以及使用域约束子句CREAT DOMAIN定义新域并加以属性值检查。
△全局约束。
在关系定义时,可以说明一些比较复杂的完整性约束,这些约束涉及到多个属性间的联系或不同关系间的联系,称为全局约束。
主要有基于元组的检查子句和断言。
前者是对单个关系的元组值加以约束,后者则可对多个关系或聚合操作有关的完整性约束进行定义。
6.17参照完整性规则在SQL可以用哪几种方式实现?
删除基本关系的元组时,依赖关系可以采取的做法有哪三种?
修改基本关系的主键值时,依赖关系可以采取的做法有哪三种?
参照完整性规则要求"不引用不存在的实体",参照完整性规则在SQL可用以下几种方式实现:
(1)在SQL中采用外键子句定义外键,并考虑删除基本关系元组或修改基本关系的主键值,对依赖关系产生的影响;
(2)在属性值上进行约束如基于属性的检查;
(3)全局约束中的基于元组的检查子句等。
删除基本关系元组或修改基本关系的主键值时,依赖关系可以采用的做法有:
△RESTRICT方式:
只有当依赖关系中没有一个外键值与基本关系中要删除/修改的主键值相对应时,系统才能执行删除/修改操作,否则拒绝删除或修改。
△SETNULL方式:
删除基本元组时,将依赖关系中所有与基本关系中被删除主键值相对应的外键值置为空值。
修改基本关系的主键值时,将依赖关系中所有与基本关系中被修改主键值相对应的外键值置为空值。
△CASCADE方式:
若删除则将依赖关系中所有外键值与基本关系中要删除的主键值相对应的元组一并删除,若修改则将依赖关系中所有与基本关系中要修改的主键值相对应的外键值一并修改为新值。
6.18试对SQL2中的基于属性的检查约束、基于元组的检查约束和断言三种完整性约束进行比较:
各说明什么对象?
何时激活?
能保证数据库的一致性吗?
约束形式
说明对象
激活条件
是否保证一致性
基于属性的检查
只对一个属性值加以约束
插入或修改属性值时
不一定
基于元组的检查
对单个关系的元组值加以约束
在插入或修改元组时
不一定
断言
多个关系或聚合操作
任何变动
保证
6.19设教学数据库的模式如下:
S(S#,SNAME,AGE,SEX)
SC(S#,C#,GRADE)
C(C#,CNAME,TEACHER)
试用多种方式定义下列完整性约束:
(1)在关系S中插入学生年龄值应在16~25岁之间
(2)在关系SC中插入元组时,其S#值和C#值必须分别在S和C中出现。
(3)在关系SC中修改GRADE值时,必须仍在0~100之间。
(4)在删除关系C中一个元组时,首先要把关系SC中具有同样C#的元组全部删去。
(5)在关系S中把某个S#值修改为新值时,必须同时把关系SC中那些同样的S#值也修改为新值。
(1)定义S时采用检查子句:
CREATTABLES(
S#CHAR(4),
SNAMEchar(10)NOTNULL,
AGESMALLINT,
PRIMARYkey(S#),
CHECK(AGE>=16andAGE<=25))
(2)采用外键子句约束
CREATTABLESC(
S#CHAR(4),
C#CHAR(4),
GRADESMALLINT,
FOREIGNkey(S#)REFERENCES(S#),
FOREIGNkey(C#)REFERENCEC(C#)
)
(3)采用元组检查
CREATTABLESC(
S#CHAR(4),
C#CHAR(4),
GRADESMALLINT,
FOREIGNkey(S#)REFERENCES(S#),
FOREIGNkey(C#)REFERENCEC(C#),
CHECK(GRADE>=0andAGE<=100))
(4)采用外键约束
CREATTABLESC(
S#CHAR(4),
C#CHAR(4),
GRADESMALLINT,
FOREIGNkey(S#)REFERENCES(S#),
FOREIGNkey(C#)REFERENCEC(C#)
)
若改为:
在删除关系C中一个元组时,同时把关系SC中具有同样C#的元组全部删去,则为:
......
FOREIGNkey(C#)REFERENCEC(C#)ONDELETECASCADE
......
(5)采用外键约束
CREATTABLESC(
S#CHAR(4),
C#CHAR(4),
GRADESMALLINT,
FOREIGNkey(S#)REFERENCES(S#)ONUPDATECASCADE,
FOREIGNkey(C#)REFERENCEC(C#)
)
6.20在教学数据库的关系S、SC、C中,试用SQL2的断言机制定义下列两个完整性约束:
(1)学生必须在选修Maths课后,才能选修其他课程。
(2)每个男学生最多选修20门课程
(1)
CREATASSERTIONASSE1CHECK
(NOTEXISTS
(SELECTSFROMSC
WHEREC#IN
(SELECTC#
FROMC
WHERECNAME<>'MATHS')
ANDS#NOTIN
(SELECTS#FROMSC
WHEREC#IN
(SELECTC#
FROMC
WHERECNAME='MATHS')));
(2)
CREATASSERTIONASSE2CHECK
(ALL(SELECTCOUNT(SC.C#)
FROMS,SC
WHERES.S#=SC.SANDSEX='M'
GROUPBYS#)<=20);
6.21什么是数据库的安全性?
有哪些安全措施?
数据库的安全性是指保护数据库防止不合法的使用,以免数据的泄漏、非法更改和破坏。
可以从以下方面设置数据库的安全措施:
环境级、职员级、OS级、网络级和数据库系统级。
(具体可参见教材P173)
6.22 对银行的数据库系统应采取哪些安全措施?
分别属于哪一级?
答案基本同上一题。
6.23什么是"权限"?
用户访问数据库可以有哪些权限?
对数据库模式有哪些修改权限?
用户使用数据库的方式称为权限。
用户访问数库的权限有:
读权限、插入权限、修改权限、删除权限。
用户修改数据库模式的权限有索引权限、资源权限、修改权限、撤销权限。
6.24试解释权限的转授与回收。
在数据库系统中,为了保证数据的安全性,用户对数据的操作必须首先从DBA处获得权限,才能进行对数据的操作。
同时数据库系统也允许用户将获得的权限转授给其他用户,也允许把已授给其他用户的权限再回收上来。
但应保证转授出去的权限能收得回来。
6.25SQL语言中的视图机制有哪些优点?
视图机制使系统具有三个优点:
数据安全性、数据独立性和操作简便性。
6.26SQL2中用户权限有哪几类?
并作必要的解释。
SQL2中定义了六类用户权限,分别是:
(1)SELECT:
允许用户对关系或视图执行SELECT操作。
(2)INSERT:
允许用户对关系或视图执行INSERT操作,如果还说明了一个属性表,那么表示只能插入这些属性的值,关系中其他属性值将置为缺省值或为空值。
(3)DELETE:
允许用户对关系或视图执行DELETE操作。
(4)UPDATE:
允许用户对关系或视图执行UPDATE操作,如果还说明了一个属性表,那么表示只能修改这些属性的值,否则表示可以修改关系中任一属性值。
(5)REFERENCES:
允许用户定义新关系时,引用其他关系的主键作为外键。
(6)USAGE:
允许用户使用定义的域。
6.27数据加密法有些什么优点?
如何实现?
数据加密可以更好地保证数据的完全性。
加密采用一定的加密算法给把源文变为密文来实现。
常用的加密算法有"替换方法"和明键加密法。
创建数据库
创建之前判断该数据库是否存在ifexists(select*fromsysdatabaseswherename='databaseName')dropdatabase'databaseName'goCreateDATABASEdatabase-name
删除数据库
dropdatabasedbname
备份sqlserver
---创建备份数据的deviceUSEmasterEXECsp_addumpdevice'disk','testBack','c:
\mssql7backup\MyNwind_1.dat'---开始备份BACKUPDATABASEpubsTOtestBack
创建新表
createtabletabname(col1type1[notnull][primarykey],col2type2[notnull],..)根据已有的表创建新表:
A:
createtabletab_newliketab_old(使用旧表创建新表)B:
createtabletab_newasselectcol1,col2…fromtab_olddefinitiononly
删除新表
droptabletabname
增加一个列
Altertabletabnameaddcolumncoltype注:
列增加后将不能删除。
DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
添加主键
Altertabletabnameaddprimarykey(col)说明:
删除主键:
Altertabletabnamedropprimarykey(col)
创建索引
create[unique]indexidxnameontabname(col….)删除索引:
dropindexidxnameontabname注:
索引是不可更改的,想更改必须删除重新建。
创建视图
createviewviewnameasselectstatement删除视图:
dropviewviewname
几个简单的基本的sql语句
选择:
select*fromtable1where范围插入:
insertintotable1(field1,field2)values(value1,value2)删除:
deletefromtable1where范围更新:
updatetable1setfield1=value1where范围查找:
select*fromtable1wherefield1like’%value1%’(所有包含‘value1’这个模式的字符串)---like的语法很精妙,查资料!
排序:
select*fromtable1orderbyfield1,field2[desc]总数:
selectcount(*)astotalcountfromtable1求和:
selectsum(field1)assumvaluefromtable1平均:
selectavg(field1)asavgvaluefromtable1最大:
selectmax(field1)asmaxvaluefromtable1最小:
selectmin(field1)asminvaluefromtable1[separator]
几个高级查询运算词
A:
UNION运算符UNION运算符通过组合其他两个结果表(例如TABLE1和TABLE2)并消去表中任何重复行而派生出一个结果表。
当ALL随UNION一起使用时(即UNIONALL),不消除重复行。
两种情况下,派生表的每一行不是来自TABLE1就是来自TABLE2。
B:
EXCEPT运算符EXCEPT运算符通过包括所有在TABLE1中但不在TABLE2中的行并消除所有重复行而派生出一个结果表。
当ALL随EXCEPT一起使用时(EXCEPTALL),不消除重复行。
C:
INTERSECT运算符INTERSECT运算符通过只包括TABLE1和TABLE2中都有的行并消除所有重复行而派生出一个结果表。
当ALL随INTERSECT一起使用时(INTERSECTALL),不消除重复行。
注:
使用运算词的几个查询结果行必须是一致的。
使用外连接
A、leftouterjoin:
左外连接(左连接):
结果集既包括连接表的匹配行,也包括左连接表的所有行。
SQL:
selecta.a,a.b,a.c,b.c,b.d,b.ffromaLEFTOUTJOINbONa.a=b.cB:
rightouterjoin:
右外连接(右连接):
结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:
fullouterjoin:
全外连接:
不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
[编辑本段]提升
复制表
(只复制结构,源表名:
a新表名:
b)(Access可用)法一:
select*intobfromawhere1<>1法二:
selecttop0*intobfroma
拷贝表
(拷贝数据,源表名:
a目标表名:
b)(Access可用)insertintob(a,b,c)selectd,e,ffromb;
跨数据库之间表的拷贝
(具体数据使用绝对路径)(Access可用)insertintob(a,b,c)selectd,e,ffrombin‘具体数据库’where条件例子:
..frombin'"&Server.MapPath("."&"\data.mdb"&"'where..
子查询
(表名1:
a表名2:
b)selecta,b,cfromawhereaIN(selectdfromb或者:
selecta,b,cfromawhereaIN(1,2,3)
显示文章、提交人和最后回复时间
selecta.title,a.username,b.adddatefromtablea,(selectmax(adddate)adddatefromtablewheretable.title=a.title)b
外连接查询
(表名1:
a表名2:
b)selecta.a,a.b,a.c,b.c,b.d,b.ffromaLEFTOUTJOINbONa.a=b.c
在线视图查询
(表名1:
aselect*from(Selecta,b,cFROMa)Twheret.a>1;
between的用法
between限制查询数据范围时包括了边界值,notbetween不包括select*fromtable1wheretimebetweentime1andtime2selecta,b,c,fromtable1whereanotbetween数值1and数值2
in的使用方法
select*fromtable1wherea[not]in(‘值1’,’值2’,’值4’,’值6’)
删除主表中已经在副表中没有的信息
两张关联表deletefromtable1wherenotexists(select*fromtable2wheretable1.field1=table2.field1
四表联查问题
select*fromaleftinnerjoinbona.a=b.brightinnerjoincona.a=c.cinnerjoindona.a=d.dwhere.....
日程安排提前五分钟提醒
SQL:
select*from日程安排wheredatediff('minute',f开始时间,getdate())>5
一条sql语句搞定数据库分页
selecttop10b.*from(selecttop20主键字段,排序字段from表名orderby排序字段desc)a,表名bwhereb.主键字段=a.主键字段orderbya.排序字段
前10条记录
selecttop10*formtable1where范围
选择排名
选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)selecta,b,cfromtablenametawherea=(selectmax(a)fromtablenametbwheretb.b=ta.b)
派生结果表
包括所有在TableA中但不在TableB和TableC中的行并消除所有重复行而派生出一个结果表(selectafromtableAexcept(selectafromtableB)except(selectafromtableC)
随机取出10条数据
selecttop10*fromtablenameorderbynewid()
随机选择记录
selectnewid()
删除重复记录
Deletefromtablenamewhereidn
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 恢复 习题