数据库第一章 概论简答题
数据库第二章 关系数据库简答题
数据库第三章 SQL简答题
数据库第四第五章 安全性和完整性简答题
数据库第七章 数据库设计简答题
数据库第九章 查询处理和优化简答题
事务:
是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是个不可分割的工作单位。
原子性
A :事务中的操作要么都做,要么都不做;一致性
C :事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态;隔离性
I :一个事务的执行不能被其他事务干扰;持续性
D :一个事务一旦提交,它对数据库中数据的改变就应该是永久性的;
对于事务故障:
对于系统故障:
正向扫描
日志文件找出在故障发生前已经提交的事务队列(REDO队列)和未完成的事务队列(UNDO队列);- 对
未完成
的事务队列中的各个事务进行UNDO
处理; - 对
已经提交
的事务队列中的各个事务进行REDO
处理;
对于介质故障:
检查点记录:
是一类新的日志记录
。
可以改善恢复效率,让恢复子系统在登录日志文件期间动态维护日志(周期性建立检查点、保存数据库状态)。
- 节约时间和成本:利用日志技术进行数据库恢复时,恢复子系统必须搜索整个日志,这将耗费大量的时间;
- 避免重复工作:需要 REDO处理的事务实际上已经将它们的更新操作结果写到数据库中了,恢复子系统又会重新执行这些操作,浪费大量时间;
例如:
检查点技术只需从
T
3
{T_3}
T3的更新实际上已经写到数据库中了,检查点技术在恢复时没有再对其进行REDO处理;
-
从检查点开始正向扫描日志文件;
- 如有新开始的事务 T,把 T 暂时放人 UNDO-LIST 队列;
- 如有提交的事务 T,把 T 从 UNDO-LIST 队列移到 REDO-LIST 队列直到日志文件
结束;
数据库镜像:
数据库镜像即根据 DBA 的要求,自动把整个数据库
或者其中的部分关键数据
复制到另一个磁盘
上。
每当主数据库更新时,DBMS 自动把更新后的数据复制过去,即DBMS自动保证
镜像数据与主数据的一致性
。
用于数据库恢复
:当出现介质故障时,镜像磁盘可继续使用,同时 DBMS自动利用镜像磁盘数据进行数据库的恢复;提高数据库的可用性
:在没有出现故障时,当一个用户对某个数据加排他锁进行修改时,其他用户可以读镜像数据库上的数据而不必等待该用户释放锁;
数据库中通常会有多个事务在同时进行,可能会产生同时读取或修改同一数据的情况,如果不对并发操作加以控制就可能会导致存取和存储不正确的数据,破坏数据库的一致性,因此需要提供并发控制;
(第一题中:恢复技术可以保证事务的原子性
和持续性
)
并发可能会产生的不一致性:
丢失修改
:T1和T2同时读和修改同一数据,T2提交的结果会导致T1的修改丢失;不可重复读
:T1读数据后,T2更新同一数据,使T1无法再现前一次的读取结果;读脏数据
:T1修改某一数据后写回磁盘,T2读取同一数据后,T1由于某种原因被撤销,此时数据恢复原值,T2读到的数据就与数据库中的数据不一致;
封锁:
封锁就是事务T在对某个数据对象例如表、记录等操作之前
,先向系统发出请求,对其加锁
。
加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新或读取此数据对象
-
排他锁(X锁)
:若事务T对数据对象A加上锁,则只允许T读取和修改A其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A -
共享锁(S锁)
:若事务T对数据对象A 加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁直到T释放A上的S 锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改
活锁:
活锁的含义是该等待事务等待时间太长,似乎被锁住了,实际上可能被激活
。如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。然后T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求······T2有可能永远等待。
活锁的产生原因:
当一系列封锁不能按照其先后顺序执行
时,就可能导致一些事务无限期等待某个封锁
,从而导致活锁。
活锁的解决方法:
避免活锁的简单方法是采用先来先服务的策略
。当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁。
死锁:
如果事务T1封锁了数据R1,T2封锁了数据R2,然后T1又请求封锁R2,因T2已封锁了R2,于是T1等待T2释放R2上的锁。接着T2又申请封锁R1,因,1已封锁了R1,T2也只能等待T1释放R1上的锁。这样就出现了T1在等待T2,而T2又在等待T1的局面,T1和T2两个事务永远不能结束,形成死锁。
预防死锁:
解除死锁:
通常采用的方法是选择一个处理死锁代价最小的事务,将其撤销
,释放此事务持有的所有锁,使其他事务得以继续运行下去。
13.在并发控制中,封锁协议是指什么?
封锁协议通常指何时申请X锁或S锁、持锁时间、何时释放等规则,如三级封锁协议:
一级封锁协议
:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放;二级封锁协议
:在一级封锁协议基础上增加事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁;三级封锁协议
:在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放;
两段锁协议:
是指所有事务必须分两个阶段对数据项加锁和解锁。
- 在对任何数据进行读、写操作之前,首先要申请并
获得对该数据的封锁
; - 在
释放一个封锁
之后,事务不再申请和获得任何其他封锁;
遵守两段锁协议的事务可能发生死锁
,因为两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁。
意向锁:
对任一结点加锁时,必须先对它的上层结点加意向锁。引进意向锁后系统对某一数据对象加锁时不必逐个检查与下一级结点的封锁冲突了。
引进意向锁是为了提高封锁子系统的效率
:
在多粒度封锁方法中,一个数据对象可能以两种方式加锁一一显式封锁和隐式封锁,因此系统在对某一数据对象加锁时,不仅要检查该数据对象上有无(显式和隐式)封锁与之冲突,还要检查其所有上级结点和所有下级结点,看申请的封锁是否与这些结点上的(显式和隐式)封锁冲突。显然,这样的检查方法效率很低。
原文地址:https://blog.csdn.net/m0_69782322/article/details/134617072
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_46334.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!