当前位置: 首页 > news >正文

8.6.数据库基础技术-数据库的控制

并非控制

  • 事务:由一系列DML操作组成,这些操作,要么全做,要么全不做,它从第一个DML操作开始,rollback、commit或者DDL结束,拥有以下四种特性,详解如下:

    • (操作)原子性Atomicity:要么全做,要么全不做,例如银行转账,在没到最后一步完成转账之前前面的所有操作都是无效的。
    • (数据)一致性Consistency:事务发生后数据是一致的,例如银行转账,不会存在A账户转出,但是B账户没收到的情况。
    • (执行)隔离性Isolatio:任一事务的更新操作直到其成功提交的整个过程对其他事务都是不可见的不同事务之间是隔离的,互不干涉。
    • (改变)持续性Durability:事务操作的结果是持续性的。
  • 事务是并发控制的前提条件,并发控制就是控制不同的事务并发执行,提高系统效率,但是并发控制中存在下面三个问题:

    • 丢失更新:事务1对数据A进行了修改并写回,事务2也对A进行了修改并写回,此时事务2写回的数据会覆盖事务1写回的数据,就丢失了事务1对A的更新。即对数据A的更新会被覆盖。
    • 不可重复读:事务2读A,而后事务1对数据A进行了修改并写回,此时若事务2再读A,发现数据不对。即一个事务重复读A两次,会发现数据A有误。
    • 读脏数据:事务1对数据A进行了修改后,事务2读数据A,而后事务1回滚,数据A恢复了原来的值,那么事务2对数据A做的事是无效的,读到了脏数据。
      在这里插入图片描述

封锁协议

X锁是排它锁(写锁)。若事务T对数据对象A加上x锁,则只允许T读取和修改A,其他事务都不能再对A加任何类型的锁,直到T释放A上的锁。
S锁是共享锁(读锁)。若事务T对数据对象A加上S锁,则只允许T读取A,但不能修改A,其他事务只能再对A加S锁(也即能读不能修改),直到T释放A上的S锁。
共分为三级封锁协议,如下:

  • 一级封锁协议:事务在修改致据之前必须先对其加X锁,直到事务结束才释放,可解决丢失更斯问题
    在这里插入图片描述
  • 二级封锁协议:一级封锁协议的基础上加上事务T在读数据R之前必须先对其加S锁,读完后即可释放S锁。可解决失更新、读脏数据问题
    在这里插入图片描述
  • 三级封锁协议:一级封锁协议加上事务T在读取数据R之前先对其加S锁,直到事务结束才释放。可解决丢失更新、读脏致据、数据重复读问题
    在这里插入图片描述

练习题

当多个事务并发执行时,任一事务的更新操作直到其成功提交的整个过程对其他事务都是不可见的,这一性质通常被称为事务的()。
A.原子性
B.一致性
C隔离性
D持久性

答案C

若事务T1对数据D1加了共享锁,事务T2、T3分别对数据D2、D3加了排它锁,则事务T1对数据();事务T2对数据()
A.D2、D3加排它锁都成功
B.D2、D3加共享锁都成功
C.D2加共享锁成功,D3加排它锁失败
D.D2、D3加排它锁和共享锁都失败

A.D1、D3加共享锁都失败
B.D1、D3加共享锁都成功
C.D1加共享锁成功,D3如排它锁失败
D.D1加排它锁成功,D3加共享锁失败

答案D C

数据库故障和备份

数据库系统产生的故障如下所示:

  • 事务内部故障:本身逻辑(可预期)、运算溢出(不可预期)
  • 系统故障:系统停止运行任何事件,如操作系统故障、停电
  • 介质故障:物理介质损坏,几率小破坏性最大
  • 计算机病毒:人为的故障和破坏,在计算机程序中插入的破坏

静态转储:即冷备份,指在转储期间不允许对数据库进行任何存取、修改操作:

  • 优点:非常快速的备份方法、容易归档(直接物理复制操作);
  • 缺点:只能提供到某一时间点上的恢复不能做其他工作,不能按表或按用户恢复。

动态转储:即热备份,在转储期间允许对数据库进行存取、修改操作,因此,转储和用户事务可并发执行;

  • 优点:可在表空间或数据库文件级备份,数据库扔可使用,可达到秒级恢复;
  • 缺点:不能出错,否则后果严重,若热备份不成功,所得结果几乎全部无效。

数据库备份

  • 完全备份:备份所有数据。
  • 差量备份:仅备份上一次完全备份之后变化的数据。
  • 增量备份:备份上一次备份之后变化的数据。
  • 日志文件:在事务处理过程中,DBMS把事务开始、事务结束以及对数据库的插入、删除和修改的每一次操作写入日志文件。一旦发生故障,DBMS的恢复子系统利用日志文件撤销事务对数据库的改变,回退到事务的初始状态。
http://www.lryc.cn/news/423214.html

相关文章:

  • php语言基础入门
  • 告别杂音,从 AI 音频降噪开始
  • Postman中params传参与Body传参区别以及Body中不同类型的区别
  • 数据结构入门——05队列
  • 使用python MySQL 实现一个 key-value(string:json) 读写库
  • 实现:uniapp项目分享视频页面到微信,可以自定义分享的页面样式及内容
  • 【C++】—— 类与对象(五)
  • scp命令的使用
  • 定位和解决线上接口性能优化或者数据库性能优化的思路是什么?
  • 修改docker的/var/lib/docker/overlay2储存路径
  • 解决中国式报表难题,这款工具真的免费且好用
  • 图解Kafka | 彻底弄明白 Kafka 两个最重要的配置
  • 创建线程的三种方式
  • 官宣|Apache Flink 1.20 发布公告
  • HarmonyOS应用一之登录页面案例
  • KubeSphere 部署 Kafka 集群实战指南
  • 手把手教你安装音乐制作软件FL Studio 24.1.1.4285中文破解版
  • SDL 与 OpenGL 的关系
  • 考研数学 线性代数----行列式与矩阵
  • Golang实现简单的HTTP服务,响应RESTful请求判断形状大小
  • 使用C语言构建Lua库
  • 愤怒的江小白,这几年怎么了?
  • Unity教程(十)Tile Palette搭建平台关卡
  • 如何防止员工私自拷贝公司内部文件?安企神帮你解决泄密之忧
  • Linux应急响应检查工具
  • CP AUTOSAR标准之EEPROMAbstraction(AUTOSAR_SWS_EEPROMAbstraction)(更新中……)
  • 重启redis服务时报错:Failed to start redis.service: Unit not found
  • Hive3:识别内部表、外部表及相互转换
  • Android笔试面试题AI答之Kotlin(7)
  • 高辐照整车太阳辐照模拟系统试验舱