【数据库系统概论】第十章、十一章:数据库恢复技术、并发控制

第十章:数据库恢复技术

事务

事务的四大特性:ACID。

A-原子性:
要么全做,要么全不做。

C-一致性
一致性与原子性密切相关,要么全做,要么全不做,否则就会导致数据的不一致。比如:银行汇钱,两边都有操作才行。

I-隔离性
一个事务的执行不能被其他事务所干扰。

D-持久性
数据库的改变是永久的,比如要落入磁盘。

故障

故障的种类:

  1. 事务内部的故障:采取REDO重做和UNDO撤销技术
  2. 系统故障:系统突然停转,系统要重启
  3. 介质故障:硬件损坏
  4. 计算机病毒

ps:
REDO-重做
UNDO-不做了

恢复技术

数据转储:对失败的事务重新执行
日志文件:记录事务对数据的更新操作的文件

恢复策略

对事务故障的恢复:事务异常终止,那么撤销之前的所有操作
对系统故障的恢复:还没执行完的事务UNDO,丢失的事务REDO
对介质故障的恢复:重装数据库,重做已完成的事务

检查点之前的就是已经保存了的,所以T1不要重做。
Tf时,系统故障,此时T3和T5都没做完,所以要撤销。
T2,T4已经做完(丢失了),所以要重做。
在这里插入图片描述

第十一章:并发控制

并发带来的问题和解决

带来的问题

  1. 丢失修改
  2. 读脏数据
  3. 不可重复读

丢失数据:我修改的东西丢失了。如我把票价改成11元,但结果还是原来的21元。

读脏数据:我读的数据是已经撤回的无效数据。如我把车票改成1元,发现太便宜了,撤回。结果还没来得及撤回,就被别人读到了。

不可重复读:在同一个事务中,连续两次读到的数据不一样。比如我第一次读到的票价为1元,结果一个人把它偷偷改成21元,我第二次读就是21元了。

在这里插入图片描述
解决方法

引入锁的概念:

  1. 排它锁:写锁——X锁
  2. 共享锁:读锁——S锁

封锁协议

一级封锁协议
修改时,必须加X锁,直到结束——解决丢失修改

二级封锁协议
读的时候,加S锁,用完就放——解决读脏数据

三级封锁协议
读的时候,加S锁,直到结束——解决不可重复读

在这里插入图片描述

死锁和活锁

死锁:多个锁相互等待,互相谦让,没人上锁。
如:
T1有A,并把它上锁了,等待B。
T2有B,并把它上锁了,等待A。

活锁:该锁永远等待,得不到机会上锁。
(类似饥饿)

可串行性

并发调度中的某一次的结果与串行调度一致,称为可串行化。

可串行化是事务正确调度的准则。

举个例子:
先执行A,再执行B,再执行C的结果为D1.
A、B、C同时执行的结果为D2.
若D1与D2相同,则可串行化。

两段锁协议
上锁的过程与解锁的过程分别在两边。
若遵循两段锁协议,则上S锁和上X锁都在左边,解锁都在右边。
在这里插入图片描述

封锁的粒度

封锁粒度大,并发度小,开销小。
封锁粒度小,并发度大,开销大。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

karshey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值