码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 数据库技术基础--数据库的控制功能


    说在前面:

    本系列文章专注于软考备考复习内容梳理,文章内容是对教材中知识点和考点的提炼,备考过程中可以有针对的进行复习,减少阅读量,有的放矢。


    导航目录:

      • 一、事务管理
      • 二、数据库的备份与恢复
        • 1.故障类型
        • 2. 备份方法
        • 3.恢复
        • 4. 数据库镜像
      • 三、并发控制
        • 1. 并发操作带来的问题
        • 2. 并发控制技术
        • 3. 活锁和死锁
        • 4.并发调度的可串行性
        • 5. 两段封锁协议
        • 6.封锁的粒度

    一、事务管理

    事务是一个操作序列,是数据库环境中不可分割的逻辑工作单位。事务的4个特性是原子性、一致性、隔离性和持久性。

    • 原子性。事务的所有操作在数据库中要么全做,要么全都不做。
    • 一致性。一个事务独立执行的结果,将保持数据的一致性,即数据不会因为事务的执行而被破坏。
    • 隔离性。一个事务的执行不能被其他事务干扰。
    • 持久性。一个事务一旦提交,它对数据库中数据的改变必须是永久的,即便系统
出现故障时也是如此。

    二、数据库的备份与恢复

    1.故障类型

    人为错误、硬盘损坏、计算机病毒、断电或是天灾人祸等都有可能造成数据的丢失,所以应该强调备份的重要性。备份实际上是数据的保护意识,在危机四伏的网络环境中,数据随时有被毁灭的可能。在数据库中的四类故障有事务内部故障、系统故障、介质故障和计算机病毒。

    2. 备份方法

    恢复的基本原理是“建立数据冗余”(重复存储)。建立冗余数据的方法是进行数据转储和登记日志文件。数据的转储分为静态转储和动态转储、海量转储和增量转储。

    
(1)静态转储和动态转储。静态转储是指在转储期间不允许对数据库进行任何存取、修改操作动态转储是指在转储期间允许对数据库进行存取、修改操作。因此,转储和用户事务可并发执行。

    
(2)海量转储和增量转储。海量转储是指每次转储全部数据;增量转储是指每次只转储上次转储后更新过的数据。

    
(3)日志文件。在事务处理的过程中,DBMS 把事务开始、事务结束以及对数据库的插入、删除和修改的每一次操作写入日志文件。一旦发生故障,DBMS的恢复子系统利用日志文件撤销事务对数据库的改变,回退到事务的初始状态。因此,DBMS 利用日志文件来进行事务故障恢复和系统故障恢复,并可协助后备副本进行介质故障恢复。

    3.恢复

    数据恢复有3个步骤。

    

(1)反向扫描文件日志,查找该事务的更新操作。
    

(2)对事务的更新操作执行逆操作。

    

(3)继续反向扫描日志文件,查找该事务的其他更新操作,并做同样的处理,直到事务的开始标志。

    4. 数据库镜像

    为了避免磁盘介质出现故障影响数据库的可用性,许多DBMS提供数据镜像功能用于数据库恢复。数据库镜像是通过复制数据实现的,但频繁地复制数据会降低系统的运行效果,因此实际应用中往往对关键的数据和日志文件镜像。

    三、并发控制

    并发操作是指在多用户共享的系统中,许多用户可能同时对同一数据进行操作。并发操作带来问题的原因是事务的并发操作破坏了事务的隔离性。DBMS的并发控制子系统负责协调并发事务的执行,保证数据库的完整性不被破坏,避免用户得到不正确的数据。

    1. 并发操作带来的问题

    并发操作带来的数据不一致性有3类,即丢失修改、不可重复读和读“脏”数据。

    2. 并发控制技术

    并发控制的主要技术是封锁。

    1) 封锁

    




(1)排他锁(X锁)。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他事务都不能再对A加任何类型的锁,直到T释放A上的锁。

    




(2)共享锁(S锁)。若事务T对数据对象A加上S锁,则只允许T读取A,但不能修改A,其他事务只能再对A加S锁,直到T释放A上的S锁。
    






    





2) 三级封锁协议

    





(1)一级封锁协议。事务在修改数据R之前必须先对其加X锁,直到事务结束才释放。一级封锁协议可以解决丢失更新问题。

    





(2)二级封锁协议。在一级封锁协议的基础上,加上事务T在读取数据R前必须先对其加S锁,读完后即可释放S锁。二级封锁协议可以解决读“脏”数据的问题,但是由于二级封锁协议读完数据后即可释放S锁,所以它不能保证可重复读。

    





(3)三级封锁协议。在一级封锁协议的基础上,加上事务T在读取数据R之前必须先对其加 S 锁,直到事务结束才释放。三级封锁协议可以防止丢失修改、读“脏”数据和不可重复读。

    3. 活锁和死锁

    活锁是指当事务T1封锁了数据R,事务T2请求封锁数据R,于是T2等待。T3也请求封锁R,当T1释放R上的封锁后,系统首先批准T3的请求,于是T2仍等待。然后T4 又请求封锁R,当T3释放R上的封锁之后系统首先批准T4的请求……T2可能永远等待。
死锁是指两个以上的事务分别请求封锁对方已经封锁的数据,导致长期等待而无法继续运行下去的现象。

    4.并发调度的可串行性

    【定义9-11】多个事务的并行执行是正确的,当且仅当其结果与某一次序串行地执行它们时的结果相同时,这种调度策略称为可串行化的调度。
可串行性是并行事务正确性的准则,按照这个准则规定,一个给定的并发调度,当且仅当它是可串行化的才认为是正确调度。

    5. 两段封锁协议

    两段封锁协议是指所有事务必须分两个阶段对数据加锁和解锁∶第一阶段是获得封锁;第二阶段是释放封锁。

    6.封锁的粒度

    封锁对象的大小称为封锁的粒度。封锁的对象可以是逻辑单元也可以是物理单元。

    未完待续。。。

    更多知识传送:

    • 计算机操作系统–基础知识
    • 计算机操作系统–进程管理
    • 计算机操作系统–存储管理
    • 计算机操作系统–设备管理
    • 计算机操作系统–文件管理
    • 计算机操作系统–作业管理
    • 计算机操作系统–网络操作系统和嵌入式操作系统
    • 计算机操作系统–UNIX操作系统
    • 软件工程基础知识–认识软件工程
    • 软件工程基础知识–软件过程模型
    • 软件工程基础知识–需求分析
    • 软件工程基础知识–系统设计
    • 软件工程基础知识–运行和维护
    • 软件工程基础知识–软件项目管理
    • 软件工程基础知识-软件质量
    • 结构化开发方法–系统分析及设计概述
    • 结构化开发方法–结构化分析方法
    • 结构化开发方法–用户界面设计
    • 面向对象技术–概念及程序设计
    • 面向对象技术–面向对象开发技术
    • 面向对象技术–面向对象的分析与设计方法
    • 面向对象技术–设计模式
    • 数据库技术基础–基本概念
    • 数据库技术基础–数据模型
    • 数据库技术基础–关系数据库

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    以上内容整理参考《软件设计师教程(第5版)》和《软件设计师考试同步辅导(第四版)》(忘记是哪个老师的了,侵删)。本文章内容旨在帮助更多想要进军软考,给自己镀金的小伙伴。有兴趣的小伙伴可以共勉。

  • 相关阅读:
    Python爬虫(二十四)_selenium案例:执行javascript脚本
    Shiro 权限绕过漏洞(CVE-2020-1957)
    Linux下分布式端口扫描工具DNmap下载安装及使用、流量抓取(更新ing)
    腾讯实习测试开发岗位面试总结
    tsconfig.json 设置exclude 路径后,编译依然会产生排除后的文件
    Benchmarking Chinese Text Recognition: Datasets, Baselines| OCR 中文数据集【论文翻译】
    .NET周报 【5月第1期 2023-05-06】
    36.树与二叉树练习(2)(王道第5章综合练习)
    电脑中vcruntime140.dll丢失的四种修复方法,一键修复dll修复方法
    springboot大学生青年志愿者管理系统的设计与实现毕业设计源码101605
  • 原文地址:https://blog.csdn.net/qq_37502042/article/details/126709433
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号