数据库第十第十一章 恢复和并发简答题

news2024/12/23 4:21:50

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

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

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

事务的特性:

  • 原子性A :事务中的操作要么都做,要么都不做;
  • 一致性C :事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态;
  • 隔离性 I :一个事务的执行不能被其他事务干扰;
  • 持续性D :一个事务一旦提交,它对数据库中数据的改变就应该是永久性的;

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

  • 保证原子性:UNDO可以保证将未成功提交的操作取消,REDO可以保证将成功提交的操作都完成,因此可以保证事务的原子性;
  • 保证持续性:REDO可以保证事务只要提交,改变一定被永久实现;

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

  • 如果先写数据库,在写日志之前发生了故障,没有登记这个修改,以后就无法恢复这个修改了;
  • 如果先写日志文件,在恢复时只是多执行了一次UNDO 操作,并不会影响数据库的正确性。

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

对于事务故障

  • 反向扫描文件日志,查找该事务的更新操作;
  • 对该事务的更新操作执行逆操作:即将日志记录中“更新前的值”写人数据库直至读到此事务的开始标记;

对于系统故障

  • 正向扫描日志文件找出在故障发生前已经提交的事务队列(REDO队列)和未完成的事务队列(UNDO队列);
  • 未完成的事务队列中的各个事务进行UNDO处理;
  • 已经提交的事务队列中的各个事务进行REDO处理;

对于介质故障

  • 装人最新的数据库后备副本(离故障发生时刻最近的转储副本),使数据库恢复到最近一次转储时的一致性状态;
  • 装人转储结束时刻的日志文件副本;
  • 启动系统恢复命令由DBMS完成恢复功能即重做已完成的事务;

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

检查点记录:
是一类新的日志记录,增加一个重新开始文件,并让恢复子系统在登录日志文件期间动态维护日志。

检查点的内容:

  • 建立检查点时刻所有正在执行的事务清单;
  • 这些事务的最近一个日志记录的地址;

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

  • 节约时间和成本:利用日志技术进行数据库恢复时,恢复子系统必须搜索整个日志,这将耗费大量的时间;
  • 避免重复工作:需要 REDO处理的事务实际上已经将它们的更新操作结果写到数据库中了,恢复子系统又会重新执行这些操作,浪费大量时间;

例如:
检查点技术只需从 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自动保证镜像数据与主数据的一致性

数据库镜像的用途:

  • 用于数据库恢复:当出现介质故障时,镜像磁盘可继续使用,同时 DBMS自动利用镜像磁盘数据进行数据库的恢复;
  • 提高数据库的可用性:在没有出现故障时,当一个用户对某个数据加排他锁进行修改时,其他用户可以读镜像数据库上的数据而不必等待该用户释放锁;

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

  • 并发控制的重要性:

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

  • 并发控制可以保证事务的一致性隔离性

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

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

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

  • 丢失修改:T1和T2同时读和修改同一数据,T2提交的结果会导致T1的修改丢失;
  • 不可重复读:T1读数据后,T2更新同一数据,使T1无法再现前一次的读取结果;
  • 读脏数据:T1修改某一数据后写回磁盘,T2读取同一数据后,T1由于某种原因被撤销,此时数据恢复原值,T2读到的数据就与数据库中的数据不一致;

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

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.为什么要引入意向锁?意向锁的含义是什么?

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1259163.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务--01--简介、服务拆分原则

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 微服务微服务架构,是服务化思想指导下的一套最佳实践架构方案。服务化,就是把单体架构中的功能模块拆分为多个独立项目。 单体架构微服务架构…

vscode Markdown 预览样式美化多方案推荐

优雅的使用 vscode写 Markdown,预览样式美化 1 介绍 我已经习惯使用 vscode 写 markdown。不是很喜欢他的 markdown 样式,尤其是代码块高亮的样式。当然用 vscode 大家基本上都会选择安装一个Markdown-preview-enhanced的插件,这个插件的确…

数字IC芯片验证流程及验证工具推荐?收藏专用

验证其实是一个“证伪”的过程,从流程到工具,验证工程师的终极目的都只有一个: 发现所有BUG,或者证明没有BUG,以保证芯片功能性能的正确性和可靠性。 验证环节对于一颗芯片的重要性也是不言而喻的: 从项…

甘草书店记:2023年10月10日 星期二 晴 「甘草书店从何而来」

甘草书店记:2023年10月10日 星期二 晴 「甘草书店从何而来」 甘草书店的落地,差不多是“一瞬间”实现的。 麦田医学和公司新址园区沟通办公室租赁细节时,园区负责人谈到了一楼大厅的咖啡馆计划,而我适时地提出了一些建议和我对于…

JAVA 算法面试总结

1、二分查找 二分查找又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置 的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小, 则在后半部分循环…

MySQL(主从复制)

简述:主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的 业务数据库、事务处理库,从库做查询库。 复制过程简单的说就是 master 将数据库的改变写入二进制日志&#xff0c…

JOSEF电流继电器 DL-33 整定范围0.5-2A 柜内安装板前接线

系列型号: DL-31电流继电器; DL-32电流继电器; DL-33电流继电器; DL-34电流继电器; 一、用途 DL-30系列电流继电器用于电机保护、变压器保护和输电线的过负荷和短路保护线路中,作为起动元件。 二、结构和原理 继电器系电磁式,瞬时动作…

电脑缺失vcruntime140_1.dll有什么办法解决,修复vcruntime140_1.dll丢失

电脑缺失vcruntime140_1.dll有什么办法解决,vcruntime140_1.dll文件的作用又是什么,这个文件有什么作用?是一个什么样的文件?如果要修复vcruntime140_1.dll文件都有什么办法能够解决呢?今天这篇文章就和大家聊一聊关于…

ProFTPD-1.3.3c Backdoor Command Execution漏洞复现+poc

https://www.whereisk0shl.top/post/proftpd-1.3.3chou-men-fen-xi https://github.com/proftpd/proftpd 在官网和官方github上找了一圈1.3.3c版本的proftpd,应该是漏洞太多,官方把下了 https://blog.csdn.net/morrino/article/details/115836400 这个文…

MySQL--InnoDB引擎

InnoDB引擎 逻辑存储引擎 表空间→段→区→页→行 Tablespace 表空间(ibd文件):一个mysql实例可以对应多个表空间,用于存储记录、索引等数据Segment 段:段分为数据段、索引段、回滚段,InnoDB是索引组织表…

山西电力市场日前价格预测【2023-11-28】

日前价格预测 预测说明: 如上图所示,预测明日(2023-11-28)山西电力市场全天平均日前电价为283.92元/MWh。其中,最高日前电价为437.70元/MWh,预计出现在17:45。最低日前电价为0.00元/MWh,预计出…

2023年最新Dev-C++下载安装以及C语言环境搭建教程(C语言入门)

文章目录 写在前面C语言简介Dev-C简介Dev-C下载安装Dev-C使用教程 写在后面 写在前面 2023年最新Dev-C下载安装以及C语言环境搭建教程,快来看看吧! C语言简介 C语言是一种通用的高级程序设计语言,由美国计算机科学家Dennis Ritchie于20世纪…

Java抽象类和接口(2)

🐵本篇文章继续对接口相关知识进行讲解 一、排序 1.1 给一个对象数组排序: class Student {public String name;public int age;public Student(String name, int age) {this.name name;this.age age;}public String toString() {return "name:…

【Axure高保真原型】3D金字塔图_移入显示数据标签

今天和大家分享3D金字塔图_移入显示数据标签的原型模板,鼠标金字塔区域时,对应区域会变绿,可以查看该区域对应的项目和数据,这个原型模板是用Axure原生元件制作的,所以无需联网,而且可以自由修改样式、交互…

Allegro层叠中的介电常数如何填写指导说明

Allegro层叠中的介电常数如何填写指导说明 在用Allegro进行PCB设计的时候,需要在cross-section中设置好每个层的信息,包括层命名,每层的厚度等等信息。如下图 一般来说,这些信息就足够了 但是对于有仿真需求或者等长设计需要使用ps作为延时单位的设计的时候,需要额外在层…

postman自动化接口测试

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

Java基础小结

Java 基础小结 Java 基础概念与常识 什么是 Java ? Java 是 1995 年由 sun 公司推出的一门高级语言。 Java 的四个基本特性是面向对象、平台无关性、安全性和简单性。 具体特点如下: 简单易学。 平台无关性。 面向对象 面向对象是一种程序设计技术,以木匠工…

Docker配置Halo搭建个人博客-快速入门

Docker配置Halo搭建个人博客-快速入门 1 官方文档2 安装Halo2.1 创建Halo主目录2.2 远程下载配置文件2.3 编辑配置文件2.4 拉取最新镜像2.6 查看容器2.7 开放服务器的防火墙 3 运行3.1 运行项目3.2 停止项目 4 常见问题4.1 没有权限4.2 ommand netstart not found, did you mea…

体育网站的技术 SEO:完整指南

您熟悉体育网站管理行业的快节奏、不断变化的性质。您的网站提供最新的体育新闻和信息,包括实时比分更新。但是,如果人们不容易找到它,那么你所有的精彩内容都是徒劳的。这就是体育网站技术 SEO 综合指南的用武之地! 本指南将教您…

【axios】拦截器:axios.interceptors.request.use|axios.interceptors.response.use

文章目录 概述设置拦截器Axios 拦截器的实现任务注册任务编排任务调度 来源 概述 axios有请求拦截器(request)、响应拦截器(response)、axios自定义回调处理(这里就是我们常用的地方,会将成功和失败的回调…