本文介绍: 如果事务T1封锁数据R1,T2封锁数据R2,然后T1又请求封锁R2,因T2已封锁了R2,于是T1等待T2释放R2上的锁。在多粒度封锁方法中,一个数据对象可能以两种方式加锁一一显式封锁和隐式封锁,因此系统在对某一数据对象加锁时,不仅要检查该数对象上有无(显式和隐式)封锁与之冲突,还要检查其所有上级结点和所有下级结点,看申请的封锁是否与这些结点上的(显式和隐式)封锁冲突。:若事务T对数据对象A 加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁直到T释放A上的S 锁。

数据库第一章 概论简答题
数据库第二章 关系数据库简答题
数据库第三章 SQL简答题
数据库第四第五章 安全性和完整性简答题
数据库第七章 数据库设计简答题
数据库第九章 查询处理和优化简答题

1.什么数据库中的事务?它有哪些特性?这些特性的含义是什么恢复技术能保证事务哪些特性

事务
用户定义一个数据库操作序列,这些操作要么全做,要么全不做,是个不可分割工作单位

事务特性

恢复技术可以保证事务的原子持续

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

3.针对不同故障,给出恢复策略方法

对于事务故障

对于系统故障

对于介质故障

4.什么检查记录检查点的内容应该包括哪些

检查记录
是一类新的日志记录
可以改善恢复效率,让恢复子系统登录日志文件期间动态维护日志(周期性建立检查点、保存数据状态)。

检查点的内容

5.在数据库恢复中使用检查点有什么好处(优点)?试举一个具体例子加以说明

例如
检查点技术只需从

t

c

{t_c}

tc开始扫描日志,不需要从头开始;
事务

T

3

{T_3}

T3更新实际上已经写到数据库中了,检查点技术在恢复时没有再对其进行REDO处理
在这里插入图片描述

6.试述使用检查点方法进行恢复的步骤

  • 在重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录;

  • 由该检查点记录得到检查点建立时刻所有正在执行的事务清单 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 操作;

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

数据库镜像
数据库镜像即根据 DBA 的要求,自动个数据库或者其中的部分关键数据复制到另一个磁盘上。
每当主数据库更新时,DBMS 自动更新后的数据复制过去,即DBMS自动保证镜像数据与主数据的一致性

数据库镜像用途

8.在数据库中为什么需要并发控制并发控制技术能保证事务的哪些特性

数据库中通常会有多个事务在同时进行,可能会产生同时读取或修改同一数据的情况,如果不对并发操作加以控制就可能会导致存取和存储正确的数据,破坏数据库的一致性,因此需要提供并发控制;

(第一题中:恢复技术可以保证事务的原子持续性

9.并发操作可能会产生哪几类数据不一致?用什么方法可以避免各种不一致的情况?

并发可能会产生的不一致性

常用方法
封锁时间戳、乐观控制法和多版本并发控制

10.什么是封锁?基本的封锁类型几种?试述它们的含义。

封锁:
封锁就是事务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做任何修改

11.什么是活锁?试述活锁产生原因和解方法

活锁:
活锁的含义是该等待事务等待时间太长,似乎被锁住了,实际上可能被激活。如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。然后T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求······T2有可能永远等待。

活锁的产生原因
当一系列封锁不能按照其先后顺序执行时,就可能导致一些事务无限期等待某个封锁,从而导致活锁。

活锁的解决方法
避免活锁的简单方法采用先来先服务策略。当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请列中第一个事务获得锁。

12.什么死锁如何预防、检测并解除死锁

死锁
如果事务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锁,直到事务结束才释放;

14.什么是两段锁协议?遵守两段锁协议的事务可能会发生死锁吗?试举例说明

两段锁协议:
是指所有事务必须分两个阶段对数据项加锁和解锁。

  • 在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁
  • 释放一个封锁之后,事务不再申请和获得任何其他封锁;

遵守两段锁协议的事务可能发生死锁,因为两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁

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

意向锁:
对任一结点加锁时,必须先对它的上层结点加意向锁。引进意向锁后系统对某一数据对象加锁时不必逐个检查与下一级结点的封锁冲突了。

引进意向锁是为了提高封锁子系统效率
在多粒度封锁方法中,一个数据对象可能以两种方式加锁一一显式封锁和隐式封锁,因此系统在对某一数据对象加锁时,不仅要检查该数据对象上有无(显式和隐式)封锁与之冲突,还要检查其所有上级结点和所有下级结点,看申请的封锁是否与这些结点上的(显式和隐式)封锁冲突。显然,这样的检查方法效率很低。

原文地址:https://blog.csdn.net/m0_69782322/article/details/134617072

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_46334.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注