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

数据库第一章 概论简答题
数据库第二章 关系数据库简答题
数据库第三章 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.mzph.cn/news/174261.shtml

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

相关文章

Vue的八个基础命令及作用

1.v-text 作用:获取data数据, 设置标签的内容,以纯文本进行显示v-text 会覆盖 标签中的内容,如果想要拼接数据,可以直接在v-text中拼接如果拼接的是数字:直接使用 “”如果拼接的是字符串,需要使用与外部不同的引号进…

函数指针数组指针数组传参的本质字符指针

🚀 作者:阿辉不一般 🚀 你说呢:不服输的你,他们拿什么赢 🚀 专栏:爱上C语言 🚀作图工具:draw.io(免费开源的作图网站) 如果觉得文章对你有帮助的话,还请点赞…

XSTRING与STRING之间的互转,base64,长文本,科学计数法

XSTRING的介绍 SAP ABAP 理解RAWSTRING(XSTRING) 类型-腾讯云开发者社区-腾讯云 XString,String以及SString 类型区别 | 摆渡SAP SAP ABAP 理解RAWSTRING(XSTRING) 类型 RAWSTRING 和 STRING 类型具有可变长度。可以指定这些类型的最大长度,但没有上限。 SSTRI…

代码浅析DLIO(二)---预积分与单点去畸变

0. 简介 我们刚刚了解过DLIO的整个流程,我们发现相比于Point-LIO而言,这个方法更适合我们去学习理解,同时官方给出的结果来看DLIO的结果明显好于现在的主流方法,当然指的一提的是,这个DLIO是必须需要六轴IMU的&#x…

【ZYNQ】SD 卡读写及文件扫描实验

SD 卡控制器(SD/SDIO Controller) ZYNQ 中的 SD 卡控制器符合 SD2.0 协议规范,接口兼容 eMMC、MMC3.31、SDIO2.0、SD2.0、SPI,支持 SDHC、SDHS 器件。SD 卡控制器支持 SDMA(单操作 DMA)、ADMA1&#xff08…

数据结构-顺序表

文章目录 线性表概念顺序表静态顺序表动态顺序表 总结 线性表概念 线性表是最基本、最简单、也是最常用的一种数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表(linear> list)是数据结构的一种,一个线性表是n个具…

2024年福建省职业院校技能大赛高职组“软件测试”赛项样题

2024年福建省职业院校技能大赛 高职组“软件测试”赛项样题 任务一:功能测试(45分) 1、测试计划(5分) (1)任务描述 针对功能测试任务,划分和界定测试范围,分解测试任…

蚂蚁庄园小课堂答题今日答案最新

蚂蚁庄园小课堂答题今日答案最新 温馨提醒:由于本文章会停留在一个固定的更新时间上,包含当前日期最新的支付宝蚂蚁庄园小课堂答题今日答案。如果您看到这篇文章已成为过去时,请按下面的方法进入查看天天保持更新的最新今日答案; …

Linux 网络通信

(一)套接字Socket概念 Socket 中文意思是“插座”,在 Linux 环境下,用于表示进程 x 间网络通信的特殊文件 类型。本质为内核借助缓冲区形成的伪文件。 既然是文件,那么理所当然的,我们可以使用文件描述符引用套接字。Linux 系统…

Windows11安装后跳过联网登录

Windows11安装后跳过联网登录 实验设备: VMware17Pro虚拟机中使用Windows11镜像安装Windows11操作系统,并且在虚拟机中测试跳过联网登录。 步骤 说明:物理卸载网卡(在虚拟机上禁用网卡)没用 思路: sh…

8.统一异常处理 + 统一记录日志

目录 1.统一异常处理 2.统一记录日志 1.统一异常处理 在 HomeController 类中添加请求方法(服务器发生异常之后需要统一处理异常,记录日志,然后转到 500 页面,需要人工处理重定向到 500 页面,提前把 500 页面请求访问…

经典神经网络——AlexNet模型论文详解及代码复现

一、背景 AlexNet是在2012年由Alex Krizhevsky等人提出的,该网络在2012年的ImageNet大赛上夺得了冠军,并且错误率比第二名高了很多。Alexnet共有8层结构,前5层为卷积层,后三层为全连接层。 论文地址:ImageNet Classif…

ModuleNotFoundError: No module named ‘mdtex2html‘ module已经安装还是报错,怎么办?

用streamlit运行ChatGLM/basic_model/web_demo.py的时候,出现了module not found: ModuleNotFoundError: No module named mdtex2html Traceback: File "/home/haiyue/.local/lib/python3.10/site-packages/streamlit/runtime/scriptrunner/script…

【阿里云】图像识别 智能分类识别 增加网络控制功能点(三)

一、增加网络控制功能 实现需求TCP 心跳机制解决Soket异常断开问题 二、Linux内核提供了通过sysctl命令查看和配置TCP KeepAlive参数的方法。 查看当前系统的TCP KeepAlive参数修改TCP KeepAlive参数 三、C语言实现TCP KeepAlive功能 四、setsockopt用于设置套接字选项的系…

leetcode做题笔记907. 子数组的最小值之和

给定一个整数数组 arr,找到 min(b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组。 由于答案可能很大,因此 返回答案模 10^9 7 。 示例 1: 输入:arr [3,1,2,4] 输出:17 解释&…

Qt4利用MVC开发曲线数据编辑器

目录 1 需求 2 开发流程 1 搭建框架 2 构造函数 3 打开工程 4 实现应用程序参数加载 5 QCustomPlot和TableView的联动 6 数据的可视化修改 7 列表点击事件事先键盘控制 8 表格实现复制,粘贴,删除等一系列功能 9 曲线实现自适应范围和统一范围…

【JMeter】运行方式

第一种: 使用GUI 操作: 在JMeter界面菜单导航上点击运行按钮 一般用作创建TestPlan和调试脚本增加java堆空间来满足测试环境 第二种:使用CLI(Command Line) 性能测试一般请求量比较大,为了节省资源 CLI参数用法: 字段…

零代码,无限可能:打造无服务器应用程序的成功秘诀!

在应用程序构建时,代码作为一组打包成应用程序的计算机指令,仅在有计算机(服务器)与之交互时才会发挥作用。对于无服务器化的应用程序,它并不是看似无需任何硬件即可运行的应用程序。无服务器是一种基于功能的架构&…

C语言-方阵循环右移

本题要求编写程序,将给定nn方阵中的每个元素循环向右移m个位置,即将第0、1、⋯、n−1列变换为第n−m、n−m1、⋯、n−1、0、1、⋯、n−m−1列。 输入格式: 输入第一行给出两个正整数m和n(1≤n≤6)。接下来一共n行&am…

Flask Echarts 实现历史图形查询

Flask前后端数据动态交互涉及用户界面与服务器之间的灵活数据传递。用户界面使用ECharts图形库实时渲染数据。它提供了丰富多彩、交互性强的图表和地图,能够在网页上直观、生动地展示数据。ECharts支持各种常见的图表类型,包括折线图、柱状图、饼图、散点…