数据库系统理论

数据库系统理论(基础篇)

第一章(绪论)

数据库的产生和发展

数据库的四个基本概念

  • 数据(data)
  • 数据库(DataBase.DB)
  • 数据库管理系统(DataBase Management System,DBMS)
  • 数据库系统(DataBase System,DBS )

数据管理技术产生和发展的几个阶段

  • 人工管理阶段
  • 文件系统阶段
  • 数据库系统阶段
    • 从文件系统到数据库系统标志着数据管理技术的飞跃

数据库的特点

  • 数据结构化

    • 数据库系统实现整体数据的结构化,这是数据库的主要特征之一,也是数据库系统与文件系统的本质区别
  • 数据的共享性高,冗余度低且易扩充

  • 数据的独立性高

    • 物理独立性是指用户的应用程序与数据库中数据的物理存储是相互独立的
    • 逻辑独立性是指用户的应用程序与数据库的逻辑结构是相互独立的
  • 数据由数据库管理系统统一管理和控制

    数据库管理系统提供以下几个方面的数据控制功能:

    • 数据的安全性保护
    • 数据的完整性检查
    • 并发控制
    • 数据库恢复

数据模型

数据模型是数据库系统的核心和基础

概念模型

也称信息模型,是按用户的观点来对数据和信息建模,主要用于数据库设计

  • 信息世界的基本概念
    • 实体
    • 属性
    • 码:唯一标识实体的属性集称为码
    • 实体型:例如:学生(学号,姓名,性别,出生年月,所在院系,入学时间)
    • 实体集:同一类型的实体的集合称为实体集。例如:全体学生就是一个实体集
    • 联系:分为实体(型)内部的联系和实体(型)之间的联系 | 实体(型)之间的联系分为 一对一、一对多、多对多
  • 概念模型的一种表示方法:实体-联系方法(E-R模型

逻辑模型

  • 层次模型
  • 网状模型
  • 关系模型
  • 面向对象数据模型
  • 对象关系数据模型
  • 半结构化数据模型

物理模型

......

数据模型通常由数据结构、数据操作和完整性约束条件三部分组成

3级模式架构

  • 模式
    • 模式也称为逻辑模式,是数据库中全体数据的逻辑结构和特征描述,是所有用户的公共数据视图
  • 外模式
    • 外模式也称子模式或用户模式,他是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
  • 内模式
    • 内模式也称为存储模式,一个数据库只有一个内模式,他是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。

数据库的二级映像功能和数据的独立性

外模式/模式映像:模式描述的是数据的全局逻辑结构,外模式描述的是数据的局部逻辑结构。当模式改变时(增加新的关系,新的属性,改变属性的数据类型等),由数据库管理员对各个外模式/模式映像作相应的改变,可以使外模式保持不变。应用程序是以据数据的外模式编写的,从而应用程序不必修改,保证了输一局与程序的逻辑独立性。

模式/内模式映像:当数据库的存储结构改变时(选用了另一种存储结构),由数据库管理员对模式/内模式映像作相应的改变,可以使模式保持不变,从而应用程序也不必改变。保证了数据云程序的物理独立性,剪成数据的物理独立性。

数据与程序之间的独立性使得数据的定义和描述可以从应用程序中分离出去。由于数据的存取由数据库管理系统管理,从而简化了应用程序的编制,大大减少了应用程序的维护和修改。

第二章(关系数据库)

关系模型的数据结构只包含单一的数据结构——关系

关系

    • 域是一组具有相同数据类型的值的集合
  • 笛卡尔积
    • 定义
    • 例题
  • 关系定义

  • 候选码
  • 主码
  • 主属性
  • 非主属性
  • 全码

关系模式

关系的描述称为 关系模式,可以表示为 R(U,D,DOM,F)


  • 基本的关系操作|关系代数的运算

    • 查询操作
      • 专门的关系运算
        • 选择
        • 投影
        • 连接
      • 传统的集合运算
        • 笛卡尔积
    • 插入
    • 删除
    • 修改

关系的每一个分量必须是一个不可分的数据项


关系的完整性

  • 实体完整性
  • 参照完整性
  • 用户定义的完整性

第三章(关系数据库标准语言SQL)

  • 如何用SQL存取数据库中的数据

第四章(数据库安全性)

  • 如何保护数据库以防止不合法使用造成的数据泄露、更改和破坏

第五章(数据库完整性)

  • 如何保证数据库中的数据的准确性和有效性
    • 数据的正确性
    • 数据的相容性
  • 为维护数据库完整性,数据库管理系统必须:
    • 提供定义完整性约束条件机制
    • 提供完整性检查机制
    • 违约处理
      • 拒绝执行(NO ACTION)
      • 级联操作(CACADE)

  • 实体完整性

    • 实体完整性定义
      • CREAT TABLE中用PRIMARY KEY定义
      • 单属性构成的码有两种说明方法(PRIMARY KEY的位置和语法不同):
        • 定义为列级约束条件
        • 定义为表记约束条件
      • 对多个属性构成的码只有一种说明方法
        • 定义为表级约束条件 (PRIMARY KEY(Sno,Cno))
    • 实体完整性检查和违约处理
      • 插入和更新时DBMS按照实体完整性规则进行自动检查
        • 由于全表扫描效率太低,便使用索引(B+树)
  • 参照完整性

    • 参照完整性定义

      • 一个关系的外码或者取空值或者等于它所参照的关系的主码值


      • 在CREAT TABLE中用FOREIGN KEY短语定义哪些列为外码

      • 用REFERENCES短语指明这些外码参照哪些表的主码

      • 表级定义、列级定义参照完整性,具体代码实例看资料

    • 在参照完整性检查和违约处理

      • 对参照表和被参照表进行增删改操作时进行完整性检查和违约处理

      • 被参照表 参照表 违约处理
        插入元组 拒绝
        修改外码值 拒绝
        删除元组 拒绝/级联删除/设置为空值
        修改主码值 拒绝/级联修改/设置为空值
      • 拒绝执行(NO ACTION)

      • 级联操作(CASCADE)

      • 设置空值(SET-NULL)

      • 示例代码
        CREAT TABLE SC
        (Sno CHAR(9) NOT NULL,
         Cno CHAR(4) NOT NULL,
         Grade SMALLINT,
         PRIMARY KEY(Sno,Cno),
         FOEREIGN KEY(Sno)REFERENCES Student(Sno)
         ON DELETE CASCADE  /*级联删除SC表中的相应的元组*/
         ON UPDATE CACADE,  /*级联更新相应的元组*/
         FOREIGN KEY (Cno)REFERENCES Course(Cno)
         ON DELETE NO ACTION/*当删除course表中的元组造成了与SC表不一致时拒绝删除*/
         ON UPDATE CASCADE
         /*当更新coourse表中的Cno时,级联更新SC表中相应的元组*/
         );
        
  • 用户定义完整性

    • 针对某一具体应用的数据必须满足的语义要求

    • CREAT TABLE 时定义属性上的约束条件

      • 列值非空(NOT NULL)

      • 列值唯一(UNIQUE)

      • 检查列值是否满足一个条件表达式(CHECK)

        CREAT TABLE DEPT
        (
        Deptno NUMERIC(2),
        Dname CHAR(9) UNIQUE NOT NULL,
        /*要求Dname列值唯一,并且不能取空值*/
        PRIMARY KEY(Deptno)
        );
        

        CHECK (条件)

    • 属性上的约束条件检查和违约处理(只涉及单个属性)

    • 元组上的约束条件定义(涉及多个属性)

      • CHECK位置不同

    实体完整性 参照完整性 用户定义完整性
    定义方法 CREAT TABLE CREAT TABLE CREAT TABLE
    检查时机 执行插入、修改操作 参照表、插入/修改被参照表:删除/修改 执行插入、修改操作
    违约处理 拒绝执行 拒绝执行/级联操作/设置为空值 拒绝执行
  • 完整性约束名子句

    • CONSTRAINT语句的用法,详见课本资料
  • 断言

    • 定义:1、可以定义涉及多个表的或者聚集操作的比较复杂的完整性约束。
    • 断言创建后,任何对断言中涉及的关系的操作都会触发关系数据库对断言的检查,任何使断言不为真值的操作都会被拒绝执行

    创建断言的语句格式

    CREAT ASSERTION<断言名><CHECK子句>
    

    每个断言都被赋予一个名字

    <CHECK子句>中的约束条件与WHERE子句的条件表达式类似。

    • 例题
      • 限制数据库课程最多60名学生选修
        CREAT ASSERTION ASSE_SE_DB_NUM
        CHECK (60>=(SELECT COUNT(*)
        			From Course,SC
        			Where SC.Cno=Course.Cno and
        			Course.Cname='数据库')
        		);
        触发时机:向SC表中插入元组
        违约反应:拒绝执行
        
      • 限制每一门课程最多60名学生选修
        CREAT ASSERTION ASS_SC_CNUM1
           CHECK(60>=ALL (SELECT count(*)
           					FROM SC
           					GROUP by Cno)
           		);
        
      • 限制每个学期每一门课程最多60名学生选修,首先需要修改SC表模式,增加一个“学期(TERM)”属性   ALTER TABLE SC ADD TERM DATE;
        然后,定义断言:
        CREAT ASSERTION ASSE_SC_CNUM2
        CHECK(60>=ALL (SELECT Count(*)
        				FROM SC
        				GROUP bycno,TERM)
        		);
        
      • DROP ASSERTION<断言名>删除断言

  • 触发器


数据库系统理论(高级篇)

第六章(关系数据理论)

  • 前言:为什么要学习关系数据理论

    • 不好的设计中关系模式存在的问题(数据依赖引起):

      • 数据冗余度太大,浪费存储空间
      • 更新异常
      • 插入异常,该插入的数据插不进去
      • 删除异常,不该删除的数据也删除了
    • 好的关系模式

    • 不会发生插入异常、删除异常、更新异常、数据冗余应尽可能少

    • 什么是数据依赖

      • 完整性约束的一种表现形式
      • 限定属性取值范围
      • 定义属性间的相互关联(主要体现在值得相等与否)
      • 数据库模式设计的关键
      • 数据内在得性质
      • 是语义的体现
    • 数据依赖的主要类型

      • 函数依赖(FD)
      • 多值依赖(MVD)
      • 连接依赖
    • 数据依赖对关系模式得影响

      • 不合适得数据依赖,造成插入异常、删除异常、更新异常和数据冗余
    • 关系模式的形式化定义

      • R(U,D,DOM,F)

        • R(U,D,DOM,F)
          	R:关系名,是符号化的元组定义
          	U:该关系的属性集合
          	D:属性组U中属性所来自的域
          	DOM:属性向域的映像集合
          	F:属性间数据的依赖关系集合
          
      • 简化表示:R<U,F>

        • 当且仅当U上的一个关系r满足F时,r称为关系模式R(U,F)的一个关系
          
        • U={Sno,Sdept,Mname,Cno,Grade}
          
          F={Sno->Sdept,Sdept->Mname,(Sno,Cno)->Grade}
          
          STUDENT(Sno,Sdept,Mname,Cno,Grade,Sno->Sdept,Sdept->Mname,(Sno,Cno)->Grade)
          
  • 规范化

    • 函数依赖

      • 定义:设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等则称为“X函数确定Y"或”Y函数依赖于X“,记作X—>Y。

        X称为这个函数依赖的决定属性组,也称为决定因素

      • 函数依赖是指关系模式R在任何时刻的盥洗室里均要满足的约束条件。不是指某个或某些关系实例r满足的约束条件,而是指R的所有关系实例r均要满足的约束条件(学号—>姓名,但姓名不能确定学号)

      • 平凡函数依赖与非平凡函数依赖

      • 完全函数依赖

      • 部分函数依赖

      • 传递函数依赖

      • 定义

      • 主属性与非主属性

      • 外部码-外码

    • 范式

      • 低级范式包含高级范式,1NF>2NF>3NF>BCNF>4NF>5NF
      • 1NF定义
      • 定义:如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF
        • 不能表中有表
    • 各级范式之间的关系

  • 第二范式(2NF)

    • 定义:弱关系模式R∈1NF,并且每一个非主属性都完全函数依赖与R的码,则R∈2NF.

      1NF进行模式分解使变成完全函数依赖,变成2NF.

    • 第三范式(3NF)

      在分解后的关系模式中既没有非主属性对码的部分函数依赖,也没有非主属性对码的传递函数依赖

    • BC范式(BCNF|修正的的第三范式|扩展的第三范式)

      • 所有非主属性对每一个码都是完全函数依赖

      • 所有主属性对每一个不包含它的码也是完全函数依赖

      • 没有任何属性完全函数依赖与非码的任一组属性

      1NF——>消除非主属性对码的部分函数依赖——>

      2NF——>消除非主属性对码的传递函数依赖——>

      3NF——>消除主属性对码的部分和传递函数依赖——>

      BCNF——>消除非平凡且非函数依赖的多值依赖——>

      4NF

    • *多值依赖

    • *第四范式(4NF)

  • 数据依赖的公理系统 (了解,不在考试范围)

    • 逻辑蕴含

    • Armstrong公理系统

      • 自反律
      • 赠广律
      • 传递率

      合并规则

      伪传递规则

      分解规则

      函数依赖闭包

      求属性集X关于F的闭包

  • 模式的分解(了解,不在考试范围)

第七章(数据库设计)

  • 了解数据库设计的定义
  • 数据库设计的特点

数据库建设的基本规律

三分技术,七分管理,十二分基础数据

管理:1、数据库建设项目管理 2、企业(即应用部门)的业务管理

基础数据:数据的收集、整理、组织和不断更新

结构(数据)设计和行为(处理)设计相结合

将数据库结构设计和数据处理设计相结合

数据库设计的方法

手工设计法

规范设计方法

典型方法——新奥尔良方法

按设计规程用goon工程化方法设计数据库

基于E-R模型的设计方法

3NF的设计方法

ODL方法

UML方法

数据库设计工具

SYBASE PowerDesigner

Rational rose

CA ERWin


数据库设计的基本步骤

  1. 需求分析
    • 综合各个用户的应用需求
  2. 概念结构设计
    • 形成独立于机器特点,独立于各个DBMS产品的概念模式(E-R图)
  3. 逻辑结构设计
    • 首先将E-R图转换成具体的数据库产品支持的数据模型,如关系模式,形成数据库逻辑模式
    • 然后根据用户处理的要求,安全性的考虑,在基本表的基础上在建立必要的视图(View),形成数据的外模式。
  4. 物理结构设计
    • 根据数据库管理系统的特点和处理的需要,进行物理存储阿耨爱,建立索引,形成数据库内模式。
  5. 数据库实施
  6. 数据库运行和维护

数据库设计过程中的各级模式

需求分析(分析用户需求)

数据字典

数据字典是关于数据库中数据的描述,成为元数据

他不是数据本身,而是数据的数据

数据字典是进行详细的数据收集和分析所获得的主要成果。

  • 数据项

数据项是不可再分的数据单位

  • 数据结构

    数据结构反映了数据之间的组合关系

    一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构混合组成。

  • 数据流

    是数据结构在系统内部的传输路径

  • 数据存储

    是数据结构停留或保存的地方,也是数据流的来源和去向之一。

  • 处理过程

    具体处理逻辑一般用判定表或判定树来描述。

概念结构设计|E-R模型

  1. 实体
  2. 属性
  3. 码(唯一标识实体属性集称为码)
  4. 实体型(用实体名及其属性集合来抽象和刻画同类实体称为实体型)
  5. 实体集(同一类型实体的集合)
  6. 联系
    1. 实体内部的联系:组成实体的各属性之间的联系
    2. 实体之间的联系:通常是指不同实体集之间的联系
      • 实体之间的联系通常有一对一、一对多和多对多等多种类型。

E-R模型

  • 实体之间的联系

    • 一对一联系(两个实体集之间一个对应一个)
  • 一对多联系(一个实体集中的一个实体与另一个实体集多个实体相联系,反之不成立。例如班级和学生)

    • 多对多联系(例如课程和学生)

    多个实体型存在以上三种关系,单个实体型内的联系也存在一对一、一对多和多对多的联系

把参与联系的实体型的数目称为联系的度

两个实体型之间联系度为2,也称为二元关系

三个实体型之间的联系度为3,也成为三元关系

N个实体型之间的联系度为N,也称为N元联系

  • E-R图

    • 实体型:用矩形表示,框内写实体名
    • 属性:用椭圆表示,用无向边将属性与相关的实体型连接起来
    • 联系:用菱形表示,菱形框内写明联系名,并用无向边分别与相关实体型连接起来,同时在无向边旁标上联系的类型(1:1|1:n|m:n) |联系可以具有属性(即联系的菱形上可以连接椭圆形的属性)

    做一些例题,掌握画E-R图的方法| 先画出各个实体,然后画出实体之间的联系(包括联系名、联系类型)然后画出实体的属性

E-R模型扩展

  • ISA联系

    • 有的实体型是某个实体型的子类型,这种父类-子类联系称为ISA联系,表示“is a ”语义,用🔺表示
    • ISA联系的性质:子类继承了父类的所有属性,子类也可以有自己的属性。
  • 例如:学生实体型可以分为研究生实体型和本科生实体型(三者之间用🔺加无向边连接)

    不相交约束和可重叠约束

    不相交约束:描述父类中的一个实体不能同时属于多个子类中的实体集。即一个父类中的实体最多只属于一个子类实体集。

    用ISA联系符号三角形的一个❌来表示。

    可重叠约束:父类中的一个实体能同时属于多个子类中的实体集,子类符号中没有❌表示是可重叠的。

    完备性约束:1、描述父类中的一个实体是否必须是一个子类中的实体(如果是,叫做完全特化|如果不是,叫做部分特化) 2、完全特化用父类到子类的双线连接表示 3、部分特化用父类到子类的单线连接表示

  • 基数约束

    • 定义:说明实体型中的任何一个实体可以在联系中出现的最少次数和最多次数|对实体之间一对一、一对多和多对多联系的细化|约束用一个数对min..max表示,0<=min<=max.|例如:0..1,1..3,1..*( *表示无穷大)
    • 类别:min=1的约束叫做 强制参与约束,即被施加基数约束的实体型中的每个实体都要参与联系;|min=的约束叫做非强制参与约束,被施加基数约束的实体型中的实体可以出现在联系中,也可以不出现在联系中
  • PART-OF联系

    • 定义:描述某个实体型是另外一个实体型的一部分
    • 非独占的Part-of联系简称非独占联系(整体实体如果被破坏,另一部分实体仍然可以独立存在)
    • 独占的Part-of联系简称独占联系(整体实体如果被破坏,部分试实体不能存在)
    • 表示:用 非强制参与联系表示 非独占的Part-of联系|用弱实体类型和识别联系来表示独占联系
      • 如果一个实体型的存在依赖于其他实体型的存在,则这个实体型叫做弱实体型,否则叫做强实体型。
      • 双矩形表示弱实体型,用双菱形表示识别联系。

UML

  • 统一建模语言
  • UML中的类(class)大致对应E-R图中的实体|实体型、实体的码、联系的表示
  • UML中的基数约束以及子类定义与E-R图中的定义类似

概念结构设计

  • 实体与属性的划分原则
    • 作为属性,不能具有要描述的性质
    • 属性不能与其他实体具有联系
  • E-R图的集成
    • 设计各个子系统的E-R图
    • 消除冲突,进行集成
      • 属性冲突
      • 命名冲突
      • 结构冲突
    • 设计基本的E-R图

第八章(数据库编程)

第九章(关系查询处理和查询优化)

第十章(数据库恢复技术)

事务

定义

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

\\定义事务
BEGIN TRANSACTION;\\开始事务
COMMIT;\\表示提交,即提交事物的所有操作,将食物中所有对数据库的更新写回到磁盘的物理数据库中
ROLLBACK;\\表示回滚,系统将食物中对数据库的所有已完成的操作全部要撤销,回滚到事务开始时的状态。

事务的ACID特性

  • 原子性

  • 一致性

  • 隔离性

  • 持续性(永久性)

    事务是恢复和并发控制的基本单位

    事务ACID特性可能遭到破坏的因素:

    1. 多个事务的并行运行时,不同事务操作交叉执行
    2. 事务在运行过程中被强行终止。

故障的种类

  1. 事物内部的故障

    事务撤销(UNDO)

  2. 系统故障

    • 影响正在运行的所有事物
    • 不破坏数据库
    • 主存内容,数据缓冲区(在内存)中的内容都被丢失
    • 所有运行事务都非正常终止
    • 系统要重新启动
  3. 介质故障

    系统故障称为 软故障,介质故障称为 硬故障

  4. 计算机病毒

1、数据库本身被破坏

2、数据不正确

恢复的基本原理:冗余

恢复的实现技术

建立冗余数据的最常用的技术就是 数据转储登记日志文件

后备副本的概念

  • 数据转储

    • 静态转储

    • 动态转储

      转储方式分为海量转储和增量转储,转出状态分为静态转储和动态转储,所以转储方法分为四类(2*2)(海量静态转储.....)

  • 登记日志文件

    • 日志文件的格式和内容
      • 以记录为单位的日志文件(课本P299)
      • 以数据块为单位的日志文件(将更新前的整个块和更新后的整个块都放入了日志文件中)
    • 日志文件的作用
      • 事务故障恢复和系统故障恢复必须用日志文件
      • 动态转储方式中必须建立日志文件,后备副本和日志文件结合起来才能有效地恢复数据库
      • 静态转出也可以监理日志文件,具体过程见课本P299
  • 等记日志文件遵循的原则

    • 登记次序严格按并发事务执行的时间次序、
    • 必须先写日志文件,后写数据库

恢复策略

  • 被中止的事务对数据库所做的任何改变必须撤销,这称作事务的回滚。
  • 当用户对数据库进行并发访问时,为了确保事务完整性和数据库一致性,需要使用封锁机制
  • 数据库恢复的基础是利用转储的冗余数据。这些转储的冗余数据包括( 日志文件、数据库后备副本 )。
  • SQL Server以为事务单位通常使用封锁来实现并发控制。
  • 日志文件用于存放恢复数据库用的所有日志信息,每个数据库至少拥有一个日志文件,也可以拥有多个日志文件,扩展名ldf 。
事务故障的恢复

事务故障是指事务运行至正常终止点前被终止,这时恢复子系统利用日志文件撤销(UNDO)此事务已对数据库进行修改。事务故障的恢复是由系统自动完成的,对用户是透明的。

恢复步骤:见课本P300

系统故障的恢复

撤销故障发生时未完成的事务,重做已完成的事务

恢复步骤:见课本P300

介质故障的恢复

重装数据库,然后重做已完成的事务

恢复步骤:见课本P301

在发生介质故障后,原有的数据库已破坏,需要从最近的副本(最近的完全备份加此后所有的动态备份),根据事务日志,对于备份时正在执行的而未完成的事务做Undo操作,要想使数据库处于一致性状态,则先需重做从最近的备份开始到故障前的所有事务,数据库即恢复至故障前的一致性状态。
装载数据备份-》执行UNDO操作-》执行REDO操作

具有检查点的恢复技术

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

检查点记录的内容

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

重新开始文件用来记录各个检查点记录在日志文件中的地址

动态维护日志文件的方法是,周期性地执行建立检查点、保存数据库状态的操作。

使用检查点方法可以改善恢复效率

系统使用检查点方法进行恢复的步骤

P303

数据库镜像

  • 什么是数据库镜像?有什么用途?
  • 根据数据库管理员的要求,自动把整个数据库或其中的关键数据复制到另一个磁盘上,每当主数据库更新时,数据库管理系统自动把更新后的数据复制过去,由数据库管理系统自动保证镜像数据与主数据库的一致性。

数据库的三种恢复模式:

sql server数据库提供了三种恢复模式:完整,简单和大容量日志,这些模式决定了sql server如何使用事务日志,如何选择它要记录的操作,以及是否截断日志。截断事务日志是删除己执行事务并把该日志空间让给新事务的过程,下面是各种恢复模式的定义:
1,完整sql server恢复模式:
数据库引擎把所有操作都记录到事务日志上,并且数据库引擎绝对不会截断日志,完整恢复模式能使数据库恢复到故障时间点。
2,简单sql server恢复模式:
数据库引擎最低限度地记录大多数操作,并在每个检查点之后截断事务日志。它不能备份或还原事务日志,也不能还原单独的数据页。
3,大容量日志模式:
数据库引擎对大容量操作(select into和bulk insert)进行最小记录。如果一个日志备份包含任何大容量操作,就可以使数据库恢复到日志备份的结尾,但不能恢复到某个时间点,它仅用于大容量操作期间。
在生产环境下建议使用完整恢复模式,因为它提供了最可恢复的配置。如果通过大容量机制定期导入数据,则可以临时将数据库的恢复模式改变为大容量日志模式,以获得更好的大容量负载性能,在导入过程结束后,应将数据库恢复为完整恢复模式。

数据库备份的类型

1、完全备份
这可能是大多数人常用的方式,它可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。但是呢,它也需要花费更多的时间和空间,所以,一般推荐一周做一次完全备份。
2、事务日志备份
事务日志是一个单独的文件,它记录数据库的改变,备份的时候只需要复制自上次备份以来对数据库所做的改变,所以只需要很少的时间。为了使数据库具有鲁棒性,推荐每小时甚至更频繁的备份事务日志。
3、差异备份
也叫增量备份。它是只备份数据库一部分的另一种方法,它不使用事务日志,相反,它使用整个数据库的一种新映象。它比最初的完全备份小,因为它只包含自上次完全备份以来所改变的数据库。它的优点是存储和恢复速度快。推荐每天做一次差异备份。
4、文件备份
数据库可以由硬盘上的许多文件构成。如果这个数据库非常大,并且一个晚上也不能将它备份完,那么可以使用文件备份每晚备份数据库的一部分。由于一般情况下数据库不会大到必须使用多个文件存储,所以这种备份不是很常用。

第十一章(并发控制)

前言

  • 单机处理系统中,实行交叉并发方式,并没有真正地并行运行,减少了处理机的空闲时间,提高了系统效率。

  • 多处理机系统中,每个处理机可以运行一个事务,实现真正的事务并发运行,称为 同时并发方式

  • 并发控制是衡量一个数据库管理系统性能的重要标志。

并发控制概述

  • 事务是并发控制的基本单位
  • 保证事务的 隔离性和一致性以及事务的ACID特性,是数据库管理系统中的并发控制机制的责任
  • 读数据x记为R(x),写数据x记为W(x)
  • 并发操作带来的数据不一致性和破坏了事物的隔离性包括:
    • 丢失修改
    • 不可重复读
    • 读“脏”数据
  • 并发控制的主要技术有 封锁、时间戳、乐观控制法、多版本并发控制

并发控制: 所谓并发控制,是指多用户共享的系统中,许多用户可能同时对同一数据进行操作。

调度: 指的是事务的执行次序。

串行调度: 多个事务依次串行执行,且只有当一个事务的所有操作都执行完后才执行另一个事务的所有操作。只要是串行调度,执行的结果都是正确的。

并行调度: 利用分时的方法同时处理多个事务。但是并行调度的调度结果可能是错误的,可能产生不一致的状态,包括有:丢失修改,不可重复读和读脏数据。

串行调度和并行调度的区别:
其实比较明显的是虽然串行调度能够保证调度结果的正确性,但是却限制了系统并行性的发挥,不能有效利用资源,但是并行调度的调度结果又可能出现错误,而且可能不具有串行,正是因为这样,有一个具有串行调度效果的并行调度方法,而两段锁协议就是保证并行事务可串化的方法

封锁

排他锁(X锁|写锁)

限定读取和修改数据对象

共享锁(S锁|读锁)

不能修改但是可以读取

封锁类型的相容矩阵

T1|T2 X S -
X N N Y
S N Y Y
- Y Y Y

Y=YES(相容请求)||N=NO(不相容请求)

封锁协议

一级封锁协议

1、事务T在修改数据R之前必须先对其加X锁,知道事务结束才释放。

2、一级封锁协议可防止丢失修改,并保证事务T是可恢复的。

3、不能保证可重复读和不读“脏”数据。

二级封锁协议

1、在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其进行加S锁,读完后即可释放S锁。

2、二级封锁协议除防止了丢失修改之外,还可进一步防止读“脏”数据,读完数据之后即可释放S锁,所以不能保证可重复读。

三级封锁协议

1、在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加S锁,知道事务结束才释放。

2、三级封锁协议可防止丢失修改,读“脏”数据和不可重复读。

不同级别封锁协议和一致性保证表

课本P314

活锁和死锁

活锁

避免活锁的简单方法就是采用 先来先服务策略

死锁

死锁预防
  • 一次封锁法
    • 每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。
    • 缺点:扩大了封锁范围,降低了系统的并发度。
  • 顺序封锁法
    • 预先对数据对象规定一个封锁顺序,所有事物都按这个顺序实施封锁。
    • 缺点:1、维护资源的封锁顺序非常困难,成本很高;2、事务的封锁请求可以随着事物的执行而动态地决定,很难确定每一个事务要封锁哪些对象,很难按规定的顺序去施加封锁。
死锁诊断与解除

数据库管理系统在解决死锁问题上普遍采用诊断并解除死锁的方法

  • 超时法
    • 如果一个事务的等待时间超过了规定时限,就认为发生了死锁。
    • 缺点:1、可能误判死锁;2、时限若设置太长,死锁发生后不能及时发现。
  • 等待图法
    • 事务等待图动态地反映了所有事物的等待情况,并发控制子系统周期性地生成事务等待图,并进行检测。如果发现图中存在回路,则表示系统中出现了死锁。
    • 选择一个处理死锁代价最小的事务,将其撤销,释放此事务所持有的所有锁,使其他事务得以继续运行下去。对撤销的事务所执行的数据修改操作必须加以恢复。

并发调度的可串行性

可串行化调度

定义:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同。

可串行性是并发事务正确调度的准则

冲突可串行化调度

  • 冲突操作是指不同的事务同一个数据读写操作和写写操作

    一个调度Sc在保证冲突操作次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc`    , 如果 Sc`是串行的,称调度Sc为冲突可串行化的调度。
    若一个调度是冲突可串行化,则一定是可串行化的调度。
    可用这种方法判断一个调度是不是冲突可串行化的。
    
    例:有两个事物T1与T2,初值A=10,B=20。
    
                T1:读B;A=B+1 ;
    
                T2:读A;B=A+1;
    
            先执行T1,后执行T2,结果为A=21,B=22。
    
            先执行T2,后执行T1,结果为A=12,B=11。
    
    以上两种结果均是正确。除这两种结果外的结果,都是错误的调度结果。
    

    冲突可串行化调度是可串行化调度的充分条件,不是必要条件

两段锁协议

两段锁协议: 是指所有的事务必须分两个阶段对数据项加锁和解锁。即事务分两个阶段,第一个阶段是获得封锁。事务可以获得任何数据项上的任何类型的锁,但是不能释放;第二阶段是释放封锁,事务可以释放任何数据项上的任何类型的锁,但不能申请。

第一阶段是获得封锁的阶段,称为扩展阶段:其实也就是该阶段可以进入加锁操作,在对任何数据进行读操作之前要申请获得S锁在进行写操作之前要申请并获得X锁加锁不成功,则事务进入等待状态,直到加锁成功才继续执行。就是加锁后就不能解锁了。

第二阶段是释放封锁的阶段,称为收缩阶段:当事务释放一个封锁后,事务进入封锁阶段,在该阶段只能进行解锁而不能再进行加锁操作


事务遵循两段锁协议是可串行化调度的充分条件,而不是必要条件。

一次封锁法与两段锁协议区别:一次封锁法要求每个事务必须依次将所有要使用的数据全部加锁,否则就不能继续执行。因此一次封锁法遵守两段锁协议;但是两段锁协议并不要求事务必须一次将所有哦要使用的数据全部加锁,因此,遵循两段锁协议的事务可能发生死锁。

封锁的粒度

  • 数据库中为了实现并发控制而采用封锁技术。

  • 封锁对象的大小称为封锁粒度(Granularity)

  • 封锁的对象可以是逻辑单元,也可以是物理单元。以关系数据库为例子,封锁对象可以是这样一些逻辑单元:属性值、属性值的集合、元组、关系、索引项、整个索引项直至整个数据库;也可以是这样的一些物理单元页(数据页或索引页)、物理记录等。

  • 锁定的粒度与系统的并发度和并发控制的开销密切相关。一般地,锁定的粒度越大,需要锁定的对象就越少,可选择性就越小,并发度就越小,开销就越小;反之,锁定的粒度越小,需要锁定的对象就越多,可选择性就越大,并发度就越大,开销就越大。

多粒度封锁

  • 多粒度树的根结点是整个数据库,表示最大的数据粒度。叶结点表示最小的数据粒度。
  • 多粒度封锁协议允许多粒度树中的每个结点被独立加锁。对一个结点加锁意味着这个结点的所有后裔结点也被加以同样类型的锁,所以分为了显示封锁和隐式封锁。
    • 显示封锁:应事物的要求直接加到数据对象上的锁;
    • 隐式封锁:该数据对象没有被独立加锁,是由于其上级结点加锁而使该数据对象加上了锁;

意向锁

IS锁

当事务T对给定粒度数据对象实施IS锁时,表明T的一项就是读取该粒度数据对象的部分(而不是全部)下级颗粒度数据对象;

IX锁

当事务T对给定粒度数据对象实施IX锁时,表明T的一项就是更新该粒度数据对象的部分(而不是全部)下级颗粒度数据对象;

SIX锁

当事务T对给定粒度数据对象实施SIX锁时,表明T的一项就是读取该粒度数据对象的全部下级颗粒度数据对象并更新部分(而不是全部)下级粒度数据对象。


数据锁的相容矩阵

T1\T2 IS IX S X SIX
IS ✔️ ✔️ ✔️ ✔️
IX ✔️ ✔️
S ✔️ ✔️
X
SIX ✔️

简答题

  • 数据库系统的特点

    • 数据结构化

      • 数据库系统实现整体数据的结构化,这是数据库的主要特征之一,也是数据库系统与文件系统的本质区别
    • 数据的共享性高,冗余度低且易扩充

    • 数据的独立性高

      • 物理独立性是指用户的应用程序与数据库中数据的物理存储是相互独立的
      • 逻辑独立性是指用户的应用程序与数据库的逻辑结构是相互独立的
    • 数据由数据库管理系统统一管理和控制

      数据库管理系统提供以下几个方面的数据控制功能:

      • 数据的安全性保护
      • 数据的完整性检查
      • 并发控制
      • 数据库恢复
  • 数据模型的三个要素

    数据模型通常由数据结构、数据操作和完整性约束条件三部分组成

    • 数据结构:描述数据库的组成对象以及对象之间的联系。
    • 数据操作:是指对数据库中各种对象(型)的实例(值)允许执行的操作的集合,包括操作及有关的操作规则。
    • 数据的完整性约束条件:是一组完整性规则。
  • 数据库的完整性概念和数据库的安全性概念之间存在什么联系和区别?

    • 数据库的完整性是指数据的正确性和相容性。
    • 数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改和破坏。
    • 数据库的完整性和安全性是两个既有联系又不尽相同的概念。
    • 数据库的完整性是为了防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。
    • 数据库的安全性是保护数据库防止恶意破坏和非法存取。
    • 完整性检查和控制的防范对象是不合语义的、不正确的数据,防止他们进入数据库。
    • 安全性控制的防范对象是非法用户和非法操作,防止他们对数据库进行非法存取。
  • 参照完整性规则在SQL可以用什么方式实现?删除基本关系的元组时,依赖关系可以采取的做法有哪三种?

  • 在CREAT TABLE中用FOREIGN KEY短语定义哪些列为外码
  • 用REFERENCES短语指明这些外码参照哪些表的主码
  • 删除基本关系元组时,可以采用拒绝执行(NO ACTION)、级联操作(CASCADE)和设置为空值
  • 进行数据库系统需求分析时,数据字典的内容和作用是什么?

    • 主要内容:数据字典通常包括数据项,数据结构,数据流,数据存储和处理过程几个部分。
    • 作用:数据字典是进行详细的数据收集和数据分析所获得的主要成果。是关于数据库中数据的描述,即元数据,而不是数据本身。数据字典在需求分析阶段建立,在数据库设计过程中不断修改,充实,完善的。在数据库设计中占有重要地位。
  • 什么叫数据抽象?并举例说明

    • 所谓数据抽象,是在对现实世界有一定的认识基础上,对实际的人、物、事进行人为的处理,忽略非本质的细节,抽取关心的共同和本质特征,并把这些特征用各种概念精确地加以描述。
    • 例如:在学校环境中,李英是老师,表示李英是教师类型中的一员,则教师是实体型,李英是教师实体型中的一个实体值,具有教师共同的特性和行为:在某个系某个专业教学,讲授某些课程,从事某个方向的科研。
  • 数据库中为什么要有恢复子系统?他的功能是什么?

  • 因为计算机系统中硬件的故障、软件的错误、操作员的失误以及恶意的破坏是不可避免的,这些故障轻则造成运行事务非正常中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中全部或部分数据丢失,因此必须要有恢复子系统。

  • 恢复子系统的功能是:把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)。

  • 发生介质故障的主要原因是哪些?应如何处理?

    • 介质故障又叫硬故障,是由于硬件的可靠性较差而出现的存储介质发生物理损坏,造成数据库的数据全部或部分丢失 ,如磁盘损坏,磁头碰撞,瞬时强磁场干扰等。
    • 如何处理?
      • 首先重装数据库,然后重做已完成的事务。
        • 装入最新的数据库后备副本(离故障发生时刻最近的转储副本),使数据库恢复到最近一次转储时的一致性状态。对于动态转储的数据库副本,还需同时装入转储开始时刻的日志文件副本,利用恢复系统故障的方法,才能将数据库恢复到一致性状态 。
        • 装入相应的日志文件副本(转储结束时刻的日志文件副本),重做已完成的事务。即:首先扫描日志文件,找出故障发生时已提交的事务的标识,将其记入重做队列。然后正向扫描日志文件,对重做队列中的所有事务进行重做处理。即将日志记录中“更新后的值”写人数据库。这样就可以将数据库恢复至故障前某一时刻的一致状态了
  • 简述三级封锁协议及解决的问题。

    一级封锁协议

    1、事务T在修改数据R之前必须先对其加X锁,知道事务结束才释放。

    2、一级封锁协议可防止丢失修改,并保证事务T是可恢复的。

    3、不能保证可重复读和不读“脏”数据。

    二级封锁协议

    1、在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其进行加S锁,读完后即可释放S锁。

    2、二级封锁协议除防止了丢失修改之外,还可进一步防止读“脏”数据,读完数据之后即可释放S锁,所以不能保证可重复读。

    三级封锁协议

    1、在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加S锁,知道事务结束才释放。

    2、三级封锁协议可防止丢失修改,读“脏”数据和不可重复读。

  • 设T1、T2是如下两个事务。设A的初值是0.

    T1:A:=A+2;

    T2:A:=A*2;

    给出一个遵守两阶段封锁协议,但是会产生死锁的调度。

T1 T2
SLOCK A SLOCK A
R(A)=0 R(A)=0
XLOCK A XLOCK A
等待 等待
等待 等待
等待 等待
posted @ 2020-04-11 23:16  Weber·Bon  阅读(1261)  评论(0)    收藏  举报