数据库系统概论

目录


数据库系统组成
数据库系统的特点

前言

这篇博客主要总结一下数据库系统这门课的理论知识,关于SQL的代码将主要在数据库实验博客中展示
数据库实验中的代码都是以Oracle数据库的语法格式来写的

还想在这里说一下我对于这门课的理解,数据库技术是专业核心技术之一,现在软件开发过程中少有不需要数据库做支撑的软件开发,因此数据库技术在软件工程专业是十分重要的,学习数据库并不单纯的只是学习数据库的操作和理论知识,还需要了解数据库的一些底层知识,与数据结构课程结合起来,励志做一个高水平的打工人。

绪论

数据库系统概述

四个基本概念

数据(Data):描述事物的符号记录成为数据
数据的含义成为数据的语义,数据与其语义是密不可分的

数据库(Database):是长期储存在计算机内、有组织的可共享大量数据的集合。
基本特征有:
数据按一定的数据模型组织、描述和储存
可为各种用户共享
冗余度较小
数据独立性较高(物理独立性、逻辑独立性)
易扩展

数据库管理系统(DBMS):位于用户与操作系统之间的一层数据管理软件。用于科学地组织和存储数据、高效地获取和维护数据
主要功能包括:
数据的定义功能
数据组织存储和管理
数据操纵的功能
数据库的事务管理和运行管理
数据库的建立和维护功能
其他功能

数据库系统(DBS):是由数据库、数据库管理系统、应用程序和数据库管理员组成的存储、管理、处理、和维护数据的系统

数据管理技术的产生和发展(了解)

什么是数据管理:对数据进行分类、组织、编码、存储、检索和维护

人工管理阶段

数据的管理者:用户(程序员),数据不保存
数据面向的对象:某一应用程序
数据的共享程度:无共享、冗余度极大
数据的独立性:不独立,完全依赖于程序
数据的结构化:无结构
数据控制能力:应用程序自己控制

文件系统阶段

数据的管理者:文件系统,数据可长期保存
数据面向的对象:某一应用程序
数据的共享程度:共享性差、冗余度大
数据的结构化:记录内有结构,整体无结构
数据的独立性:独立性差,数据的逻辑结构改变必须修改应用程序
数据控制能力:应用程序自己控制

数据的最小存取单位是记录,记录有结构

数据库系统阶段

这是上述发展过程的第三个阶段,由于这个阶段比较重要,单独拿出来作为一节

整体数据结构化(本质区别)

整体数据的结构化是数据库的主要特征之一

数据的共享性高,冗余度低,易扩充
数据独立性高

数据独立性是由DBMS的二级映像功能来保证的,主要包含一下两点

物理独立性:指用户的应用程序与存储在磁盘上的数据库中数据是相互独立的。当数据的物理存储改变了,应用程序不用改变。

逻辑独立性:指用户的应用程序与数据库的逻辑结构是相互独立的。数据的逻辑结构改变了,用户程序也可以不变。

数据由DBMS统一管理和控制

在这里插入图片描述

DBMS提供的数据控制功能
(1)数据的安全性(Security)保护
保护数据,以防止不合法的使用造成的数据的泄密和破坏。

(2)数据的完整性(Integrity)检查
将数据控制在有效的范围内,或保证数据之间满足一定的关系。

(3)并发(Concurrency)控制
对多用户的并发操作加以控制和协调,防止相互干扰而得到错误的结果。

(4)数据库恢复(Recovery)
将数据库从错误状态恢复到某一已知的正确状态。

数据模型

两大类数据模型

数据模型是对现实世界数据特征的抽象

数据模型可以分两类
第一类:概念模型
它是按用户的观点来对数据和信息建模,用于数据库设计

第二类:逻辑模型和物理模型
逻辑模型主要包括网状模型、层次模型、关系模型、面向对象模型等,按计算机系统的观点对数据建模
物理模型是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法
在这里插入图片描述

数据模型的组成要素

数据结构

描述数据库的组成对象,以及对象之间的联系

数据结构是对系统静态特性的描述

数据操作

对数据库中各种对象(型)的实例(值)允许执行的操作及有关的操作规则

数据操作是对系统动态特性的描述

完整性约束条件

一组完整性规则的集合

概念模型(E-R图!!!)

(1) 实体(Entity)
客观存在并可相互区别的事物称为实体。
可以是具体的人、事、物或抽象的概念。

(2) 属性(Attribute)
实体所具有的某一特性称为属性。
一个实体可以由若干个属性来刻画。

(3) 码(Key)
唯一标识实体的属性集称为码。

(4) 域(Domain)
属性的取值范围称为该属性的域。

(5) 实体型(Entity Type)
用实体名及其属性名集合来抽象和刻画同类实体称为实体型

(6) 实体集(Entity Set)
同一类型实体的集合称为实体集

(7) 联系(Relationship)
现实世界中事物内部以及事物之间的联系在信息世界中反映为实体内部的联系和实体之间的联系。
实体内部的联系通常是指组成实体的各属性之间的联系
实体之间的联系通常是指不同实体集之间的联系
在这里插入图片描述

最常用的数据模型

非关系模型:层次模型,网状模型
关系模型

层次模型(了解)

层次模型用树形结构来表示各类实体以及实体间的联系

满足的条件:
1.有且只有一个结点没有双亲结点,这个结点称为根结点
2.根以外的其它结点有且只有一个双亲结点
3.上层记录类型和下层记录类型间的联系是1:n联系
在这里插入图片描述
在这里插入图片描述
层次模型的完整性约束条件:
无相应的双亲结点值就不能插入子女结点值
如果删除双亲结点值,则相应的子女结点值也被同时删除

优点
层次模型的数据结构比较简单清晰
查询效率高
层次数据模型提供了良好的完整性支持
缺点
多对多联系表示不自然
对插入和删除操作的限制多,应用程序的编写比较复杂
查询子女结点必须通过双亲结点
由于结构严密,层次命令趋于程序化

网状模型(了解)

网状数据库系统采用网状模型作为数据的组织方式

满足下面三个条件的基本层次联系的集合:
(1)允许一个以上的结点无双亲结点;
(2)一个结点可以有多于一个双亲结点,也可以有多于一个子女结点;
(3)有向图中的结点是记录类型,有向边表示从箭尾一端的记录类型到箭头一端的记录类型间的1:n类型。将箭尾一端称为双亲结点,箭头一端称为子女结点。

在这里插入图片描述
基于网状数据模型的数据结构,其操纵具有如下特点:
(1)允许插入无双亲的子结点;
(2)允许只删除双亲结点,其子结点仍在;
(3)更新操作较简单,只需更新指定记录即可;
(4)查询操作可以有多种方法实现

优点
能够更为直接地描述现实世界,如一个结点可以有多个双亲
具有良好的性能,存取效率较高

缺点
结构比较复杂,而且随着应用环境的扩大,数据库的结构就变得越来越复杂,不利于最终用户掌握
DDL、DML语言复杂,用户不容易使用

关系模型

关系(Relation)
一个关系对应通常说的一张表

元组(Tuple)
表中的一行即为一个元组

属性(Attribute)
表中的一列即为一个属性,给每一个属性起一个名称即属性名

主码(Key)
表中的某个属性组,它可以唯一确定一个元组。

域(Domain)
属性的取值范围。

分量
元组中的一个属性值。

关系模式
对关系的描述
关系名(属性1,属性2,…,属性n)
学生(学号,姓名,年龄,性别,系,年级)

优点
建立在严格的数学概念的基础上
概念单一
实体和各类联系都用关系来表示
对数据的检索结果也是关系
关系模型的存取路径对用户透明
具有更高的数据独立性,更好的安全保密性
简化了程序员的工作和数据库开发建立的工作

缺点
存取路径对用户透明导致查询效率往往不如非
关系数据模型
为提高性能,必须对用户的查询请求进行优化
增加了开发DBMS的难度

数据库系统结构

数据库管理系统角度看,数据库系统通常采用三级模式结构,是数据库系统内部的系统结构
在这里插入图片描述

三级模式结构

模式(也称逻辑模式)是数据库中全体数据的逻辑结构和特征的描述
一个数据库只有一个模式

外模式(也称子模式或用户模式)是数据库用户(包括应用程序员和最终用户)使用的局部数据的逻辑结构和特征的描述
模式与外模式的关系:一对多
外模式与应用的关系:一对多
外模式是保证数据库安全性的一个有力措施,每个用户只能看见和访问所对应的外模式中的数据

内模式(也称存储模式)是数据物理结构和存储方式的描述

二级映像结构

二级映象在DBMS内部实现这三个抽象层次的联系和转换

外模式/模式映像
保证了数据的逻辑独立性
模式:描述的是数据的全局逻辑结构
外模式:描述的是数据的局部逻辑结构
同一个模式可以有任意多个外模式
每一个外模式,数据库系统都有一个外模式/模式映象,定义外模式与模式之间的对应关系
映象定义通常包含在各自外模式的描述中

模式/内模式映像
保证了数据的物理独立性
模式/内模式映象定义了数据全局逻辑结构与存储结构之间的对应关系。
数据库中模式/内模式映象是唯一的
该映象定义通常包含在模式描述中

设计数据库模式结构时应首先确定数据库的逻辑模式

数据库系统的组成

数据库
数据库管理系统(及其开发工具)
应用系统
数据库管理员(
1.决定数据库中的信息内容和结构
2.决定数据库的存储结构和存取策略
3.定义数据的安全性要求和完整性约束条件
4.监控数据库的使用和运行
5. 数据库的改进和重组

硬件平台及数据库(内存,外存,通道技术)
软件(DBMS)
人员(数据库管理员、系统分析员和数据库设计人员、应用程序员、用户)

关系型数据库

关系数据结构及形式化定义

关系模型中数据的逻辑结构是一张二维表

关系

:是一组具有相同数据类型的值的集合

笛卡尔积:给定一组域D1,D2,…,Dn,这些域中可以有相同的。D1,D2,…,Dn的笛卡尔积为:D1×D2×…×Dn ={(d1,d2,…,dn)|diDi,i=1,2,…,n}
其实就是简单的排列组合(概念太长难以理解)
(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组(Tuple)
(d1,d2,…,dn)中的每一个值di叫作一个分量
一个域中允许有的不同的取值个数成为基数

关系
D1×D2×…×Dn的子集叫作在域D1,D2,…,Dn上的关系,表示为R(D1,D2,…,Dn)
R:关系名
n:关系的目或度(Degree)
元组
关系中的每个元素是关系中的元组,通常用t表示。
单元关系与二元关系
当n=1时,称该关系为单元关系或一元关系
当n=2时,称该关系为二元关系
关系的表示
关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域
属性
关系中不同列可以对应相同的域
为了加以区分,必须对每列起一个名字,称为属性(Attribute)
n目关系必有n个属性

候选码
若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码
简单的情况:候选码只包含一个属性
全码
最极端的情况:关系模式的所有属性组是这个关系模式的候选码,称为全码
主码
若一个关系有多个候选码,则选定其中一个为主码
主属性
候选码的诸属性称为主属性
不包含在任何侯选码中的属性称为非主属性或非码属性

三类关系包括:基本表、查询表、视图表

基本关系的性质
① 列是同质的
② 不同的列可出自同一个域
③ 列的顺序无所谓,,列的次序可以任意交换
④ 任意两个元组的候选码不能相同
⑤ 行的顺序无所谓,行的次序可以任意交换
⑥ 分量必须取原子值(不能有大表套小表)

关系模式

关系模式是指对关系的描述

关系模式可以形式化地表示为:
R(U,D,DOM,F)
R 关系名
U 组成该关系的属性名集合
D 属性组U中属性所来自的域
DOM 属性向域的映象集合
F 属性间的数据依赖关系集合
通常可以简记为
R (U) 或 R (A1,A2,…,An)
R: 关系名
A1,A2,…,An : 属性名

关系模式
对关系的描述
静态的、稳定的
关系
关系模式在某一时刻的状态或内容
动态的、随时间不断变化的

关系型数据库

关系数据库的型: 关系数据库模式是对关系数据库的描述

关系数据库模式包括若干域的定义和在这些域上定义的若干关系模式

关系数据库的值: 关系模式在某一时刻对应的关系的集合,简称为关系数据库

关系操作

选择、投影、并、差、笛卡尔积是5种基本操作

关系数据库语言的分类
关系代数语言用对关系的运算来表达查询要求

关系演算语言用谓词来表达查询要求
元组关系演算语言
谓词变元的基本对象是元组变量
域关系演算语言
谓词变元的基本对象是域变量

具有关系代数和关系演算双重特点的语言代表:SQL(Structured Query Language)

关系的完整性

实体完整性

若属性A是基本关系R的主属性,则属性A不能取空值

参照完整性

若属性(或属性组)F是基本关系R的外码它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
或者取空值(F的每个属性值均为空值)
或者等于S中某个元组的主码值

用户自定义完整性

针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求

关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能

SQL

SQL的特点

综合统一

集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于一体。

可以独立完成数据库生命周期中的全部活动

用户数据库投入运行后,可根据需要随时逐步修改模式,不影响数据的运行。

数据操作符统一

高度非过程化

SQL只要提出“做什么”,无须了解存取路径。
存取路径的选择以及SQL的操作过程由系统自动完成。

面向集合的操作方式

操作对象、查找结果可以是元组的集合
一次插入、删除、更新操作的对象可以是元组的集合

以同一种语法结构提供多种使用方式

SQL是独立的语言
能够独立地用于联机交互的使用方式

SQL又是嵌入式语言
SQL能够嵌入到高级语言(例如C,C++,Java)程序中,供程序员设计程序时使用

语言简洁、易学易用

在这里插入图片描述

SQL的组成

(1)数据操作语言(The Data Manipulation Language,DML):该SQL语句允许用户提出查询,以及插入、删除和修改行。本书这章中将介绍插入、删除和修改行的DML命令。

(2)数据定义语言(The Data Definition Language DDL):该SQL语句支持表的创建、删除和修改,支持视图和索引的创建和删除。完整性约束能够定义在表上,可以是在创建表的时候,也可以是在创建表之后定义约束。

(3)数据控制语言(Data Control Language,DCL):该SQL语句的目标是管理用户对数据库对象的访问。

(4)触发器和高级完整性约束:新的SQL标准包括对触发器的支持,当对数据库的改变满足触发器的条件时,DBMS就执行触发器。

(5)嵌入式和动态SQL:嵌入式的SQL特征使得可以从宿主语言(例如C或者COBOL)中调用SQL代码。动态的SQL特征允许在运行时构建查询。

(6)客户-服务器执行和远程数据库提取:这些命令控制一个客户应用程序如何连接到一个SQL数据库服务器上,或者如何通过网络来访问数据库的数据。

(7)事管务理:各种命令允许用户显式地控制一个事务如何执行。这些命令将在后面章节中介绍。

视图的优点

1、视图能够简化用户的操作
2、视图使用户能以多种角度看待统一数据
3、视图对重构数据库提供了一定程度的逻辑独立性
4、视图能够对机密数据提供安全保护
5、适当利用视图可以更清晰的表达查询

数据库安全性

数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏 。

数据库安全性概述

数据库不安全因素

  • 非授权用户对数据库进行恶意存取和破坏
  • 数据库中的敏感信息泄露
  • 安全环境的脆弱性(计算机系统,网络系统的安全性)

数据库安全性控制

在这里插入图片描述
系统根据用户标识鉴定用户身份,合法用户才准许进入计算机系统
数据库管理系统还要进行存取控制,只允许用户执行合法操作
操作系统有自己的保护措施
数据以密码形式存储到数据库中
在这里插入图片描述
在这里插入图片描述

用户身份鉴别

用户标识由用户名和用户标识号组成

用户身份鉴别的方法:

  • 静态口令鉴别:用户自己设定,口令静态不变
  • 动态口令鉴别:口令动态变化,一次一密
  • 生物特征鉴别:指纹、虹膜等信息
  • 智能卡鉴别:集成电路,硬件加密

存取控制

权限:用户对某一数据对象操作的权力
安全规则(授权规则):DBMS定义语言将用户权限存放到数据字典

存取控制机制:
定义用户的权限,并将用户权限等级到数据字典中
合法权限检查

自主存取控制(DAC)C级
用户对不同的数据对象有不同的存取权限
不同的用户对同一对象也有不同的权限
用户还可将其拥有的存取权限转授给其他用户

强制存取控制(MAC)B1级
每一个数据对象被标以一定的密级
每一个用户也被授予某一个级别的许可证
对于任意一个对象,只有具有合法许可证的用户才可以存取

自主存取控制方法

通过 SQL 的GRANT 语句和REVOKE 语句实现
在这里插入图片描述

授权和回收

sql部分,见实验

数据库角色

sql部分,见实验

强制存取控制方法

为了防止数据的无疑泄露,需要对系统控制下的所有主客体实施强制存取控制策略

在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两大类
主体是系统中的活动实体,如用户,进程等
客体是系统中的被动实体,受主体操纵,如基本表,视图,索引等

对于主体和客体,DBMS为它们每个实例(值)指派一个敏感度标记
绝密(Top Secret,TS)
机密(Secret,S)
可信(Confidential,C)
公开(Public,P)
TS>=S>=C>=P

仅当主体的许可证级别大于或等于客体的密级时,该主体才能相应的客体
仅当主体的许可证级别小于或等于客体的密级时,该主体才能相应的客体

自主存取控制与强制存取控制共同构成数据库管理系统的安全机制

在这里插入图片描述

视图机制

把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护

间接地实现支持存取谓词的用户权限定义

审计

启用一个专用的审计日志将用户对数据库的所有操作记录在上面

审计员利用审计日志监控数据库中的各种行为,找出非法存取数据的人、时间和内容

C2以上安全级别的DBMS必须具有审计功能

审计功能是可选的:审计很费时间和空间 || DBA可以根据应用对安全性的要求,灵活地打开或关闭审计功能 || 审计功能主要用于安全性要求较高的部门

审计事件:
服务器事件:审计数据库服务器发生的事件
系统权限:对系统拥有的结构或模式对象进行操作的审计 ,要求该操作的权限是通过系统权限获得的
语句事件:对SQL语句,如DDL、DML、DQL及DCL语句的审计
模式对象事件:对特定模式对象上进行的SELECT或DML操作的审计

在这里插入图片描述

AUDIT ALTER,UPDATE ON SC; --对修改SC表结构或修改SC表数据的操作进行审计
NOAUDIT  ALTER,UPDATE ON SC; --取消对SC表的一切审计

数据加密

防止数据库中数据在存储和传输中失密的有效手段

加密思想:根据一定的算法将原始数据—明文变换为不可直接识别的格式­—密文

加密方法:存储加密 && 传输加密
在这里插入图片描述
在这里插入图片描述
基于安全套接层协议SSL传输方案的实现思路:
1.确认通信双方端点的可靠性(采用基于数字证书的服务器和客户端认证方式)
2.协商加密算法和密钥
3.可信数据传输(以密文形式在网络上传输)

其他安全性保护

推理控制
隐蔽信道
数据隐私保护

数据库完整性

数据库的完整性包括数据的正确性和数据的相容性

为了保证数据库的完整性,数据库管理系统必须:
1.提供定义完整性约束条件的机制
2.提供完整性检查的方法
3.违约处理

实体完整性

定义主码

对主码进行操作时要检查主码是否唯一以及主码是否为空

检查记录中主码值是否唯一的一种方法是进行全表扫描

为避免对基本表进行全表扫描,RDBMS核心一般都在主码上自动建立一个索引

参照完整性

定义外码
在这里插入图片描述
参照行为违约处理:
1.拒绝(NO ACTION)执行(默认)
2.级联(CASCADE)操作
3.设置为空值(SET-NULL)

用户定义完整性

列值非空(NOT NULL)
列值唯一(UNIQUE)
检查列值是否满足一个条件表达式(CHECK)

在CREATE TABLE时可以用CHECK短语定义元组上的约束条件,即元组级的限制

完整性约束命名字句

数据库恢复技术

事务的基本概念

事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。事务可以是一条sql语句、一组sql语句或者整个程序

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

COMMIT
事务正常结束
提交事务的所有操作(读+更新)
事务中所有对数据库的更新写回到磁盘上的物理数据库中

ROLLBACK
事务异常终止
事务运行的过程中发生了故障,不能继续执行
系统将事务中对数据库的所有已完成的操作全部撤销
事务滚回到开始时的状态

事务的ACID特性:
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持续性(Durability )

数据库恢复技术概述

数据库管理系统必须具有把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)的功能,这就是数据库的恢复管理系统对故障的对策

故障的种类

事务内部故障——非预期的(UNDO)

事务没有达到预期的终点(COMMIT或者显式的ROLLBACK),数据库可能处于不正确状态。

事务故障的恢复:事务撤消(UNDO)
强行回滚(ROLLBACK)该事务
撤销该事务已经作出的任何对数据库的修改,使得该事务象根本没有启动一样

系统故障(UNDO & REDO)

称为软故障,是指造成系统停止运转的任何事件,使得系统要重新启动。

常见的原因有:
特定类型的硬件错误(如CPU故障)
操作系统故障
数据库管理系统代码错误
系统断电

发生系统故障时,一些尚未完成的事务的结果可能已送入物理数据库,造成数据库可能处于不正确状态。
恢复策略:系统重新启动时,恢复程序让所有非正常终止的事务回滚,强行撤消(UNDO)所有未完成事务

发生系统故障时,有些已完成的事务可能有一部分甚至全部留在缓冲区,尚未写回到磁盘上的物理数据库中,系统故障使得这些事务对数据库的修改部分或全部丢失
恢复策略:系统重新启动时,恢复程序需要重做(REDO)所有已提交的事务

介质故障

介质故障破坏数据库或部分数据库,并影响正在存取这部分数据的所有事务

计算机病毒

恢复的技术实现

1.建立冗余数据(数据转储 & 登记日志文件)
2.利用冗余数据进行数据库恢复

数据转储

转储是指数据库管理员定期地将整个数据库复制到磁带、磁盘或其他存储介质上保存起来的过程

备用的数据文本称为后备副本(backup)或后援副本

重装后备副本只能将数据库恢复到转储时的状态
要想恢复到故障发生时的状态,必须重新运行自转储以后的所有更新事务
在这里插入图片描述

静态转储和动态转储

静态转储
在系统中无运行事务时进行的转储操作
转储开始时数据库处于一致性状态
转储期间不允许对数据库的任何存取、修改活动
得到的一定是一个数据一致性的副本
优点:实现简单
缺点:降低了数据库的可用性(转储必须等事务结束。事务运行必须等转储结束)

动态转储
转储操作与用户事务并发进行
转储期间允许对数据库进行存取或修改
优点:不用等待正在运行的用户事务结束,不会影响新事务的运行
动态转储的缺点:不能保证副本中的数据正确有效

利用动态转储得到的副本进行故障恢复
需要把动态转储期间各事务对数据库的修改活动登记下来,建立日志文件
后备副本加上日志文件就能把数据库恢复到某一时刻的正确状态

海量转储和增量转储

海量转储: 每次转储全部数据库
增量转储: 只转储上次转储后更新过的数据

从恢复角度看,使用海量转储得到的后备副本进行恢复往往更方便
如果数据库很大,事务处理又十分频繁,则增量转储方式更实用更有效

登记日志文件

日志文件(log file)是用来记录事务对数据库的更新操作的文件

日志文件的作用:
进行事务故障恢复
进行系统故障恢复
协助后备副本进行介质故障恢复

常用的格式有以记录为单位的日志文件 和 以数据块为单位的日志文件

记录为单位的日志文件包括:
各个事务的开始标记(BEGIN TRANSACTION)
各个事务的结束标记(COMMIT或ROLLBACK)
各个事务的所有更新操作

记录为单位的日志文件,每条日志记录的内容
事务标识(标明是哪个事务)
操作类型(插入、删除或修改)
操作对象(记录ID、Block NO.)
更新前数据的旧值(对插入操作而言,此项为空值)
更新后数据的新值(对删除操作而言, 此项为空值)

数据块为单位的日志文件,每条日志记录的内容
事务标识
被更新的数据块

必须先写日志文件,后写数据库

恢复策略

事务故障恢复(UNDO)

事务故障:事务在运行至正常终止点前被终止
恢复方法:由恢复子系统利用日志文件撤消(UNDO)此事务已对数据库进行的修改

事务故障的恢复由系统自动完成,对用户是透明的,不需要用户干预

步骤:
1.反向扫描文件日志
2.对该事务的更新操作执行逆操作
3. 继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理
4. 直至读到此事务的开始标记

系统故障恢复

系统故障造成数据库不一致状态的原因
未完成事务对数据库的更新可能已写入数据库——UNDO
已提交事务对数据库的更新可能还留在缓冲区没来得及写入数据库——REDO

系统故障的恢复由系统在重新启动时自动完成,不需要用户干预

步骤:
1.正向扫描日志文件得到重做(REDO) 队列 和 撤销 (UNDO)队列
2.对撤销(UNDO)队列事务进行撤销(UNDO)处理——参考上面
3.对重做(REDO)队列事务进行重做(REDO)处理

介质故障恢复

1.重装数据库
2.重做已经完成的事务

步骤:
1.装入最新后备数据库副本(动态的需要装入日志文件)
2.装入有关的日志文件的副本(转储结束时刻的日志文件副本),重做已经完成的事务

介质故障的恢复需要数据库管理员介入

具有检查点的恢复技术

检查点恢复技术是为了解决搜索整个日志和重做出理耗费大量的事件

具有检查点的恢复技术:
在日志文件中增加检查点记录
增加重新开始文件
恢复子系统在登录日志文件期间动态地维护日志

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

重新开始文件的内容:
记录各个检查点记录在日志文件中的地址
在这里插入图片描述
步骤:
1.将当前日志缓冲区中的所有日志记录写入磁盘的日志文件上
2.在日志文件中写入一个检查点记录
3.将当前数据缓冲区的所有数据记录写入磁盘的数据库中
4.把检查点记录在日志文件中的地址写入一个重新开始文件

检查点的保存可以是定期的也可以是不定期的
在这里插入图片描述

数据库镜像

数据库管理系统自动把整个数据库或其中的关键数据复制到另一个磁盘上
在这里插入图片描述
发生故障时使用镜像
在这里插入图片描述
在实际应用中用户往往只选择对关键数据日志文件镜像

并发控制

并发控制的基本概述

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

并发控制的任务:
对并发操作进行正确调度
保证事务的隔离性
保证数据库的一致性

并发操作带来的数据不一致性:
1.丢失修改(Lost Update)
2.不可重复读(Non-repeatable Read)
3.读“脏”数据(Dirty Read)

数据不一致性:由于并发操作破坏了事务的隔离性
并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性

封锁

封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁,加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。

基本封锁类型:排他锁(X锁) & 共享锁(S锁)

排他锁

排它锁又称为写锁
若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁
保证其他事务在T释放A上的锁之前不能再读取和修改A

共享锁

共享锁又称为读锁
若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁
保证其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改

封锁协议

在运用X锁和S锁对数据对象加锁时,需要约定一些规则,这些规则为封锁协议(Locking Protocol)。

一级封锁协议——不可重复读 & 读脏数据

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

一级封锁协议可防止丢失修改,并保证事务T是可恢复的。
在一级封锁协议中,如果仅仅是读数据不对其进行修改,是不需要加锁的,所以它不能保证可重复读和不读“脏”数据。

二级封锁协议——丢失修改 & 读脏数据

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

在二级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读。

三级封锁协议——丢失修改 & 读脏数据 & 不可重复读

一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。

活锁和死锁

活锁

在这里插入图片描述
避免活锁:采用先来先服务的策略
当多个事务请求封锁同一数据对象时
按请求封锁的先后次序对这些事务排队
该数据对象上的锁一旦释放,首先批准申请队列中第一个事务获得锁

死锁

在这里插入图片描述

死锁的预防

预防死锁的发生就是要破坏产生死锁的条件

一次封锁法

要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行

会降低系统并发度

顺序封锁法

顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。

会导致维护成本很高,并且往往难以实现

死锁的诊断与解除
超时法

如果一个事务的等待时间超过了规定的时限,就认为发生了死锁
优点:实现简单
缺点:有可能误判死锁,时限若设置得太长,死锁发生后不能及时发现

等待图法

用事务等待图动态反映所有事务的等待情况
若T1等待T2,则T1,T2之间划一条有向边,从T1指向T2
在这里插入图片描述
如果发现图中存在回路,则表示系统中出现了死锁。

解除死锁

选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有的锁,使其它事务能继续运行下去

并发调度的可穿行性

执行结果等价于串行调度的调度也是正确的,称为可串行化调度

可串行化调度

可串行化(Serializable)调度:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同

冲突可串行化调度

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

不能交换的两个动作:
同一事务的两个操作
不同事务的冲突操作

一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc’,如果Sc’是串行的,称调度Sc是冲突可串行化的调度

冲突可串行化调度是可串行化调度的充分条件

两段锁协议

数据库管理系统普遍采用两段锁协议的方法实现并发调度的可串行性,从而保证调度的正确性

两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁
在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁
在释放一个封锁之后,事务不再申请和获得任何其他封锁
在这里插入图片描述
事务遵守两段锁协议是可串行化调度的充分条件

遵守两段锁协议的事务可能发生死锁

封锁粒度

封锁对象的大小称为封锁粒度

封锁的粒度越大,数据库所能够封锁的数据单元就越少,并发度就越小,系统开销也越小

同时考虑封锁开销和并发度两个因素, 适当选择封锁粒度:
需要处理多个关系的大量元组的用户事务:以数据库为封锁单位
需要处理大量元组的用户事务:以关系为封锁单元
只处理少量元组的用户事务:以元组为封锁单位

多粒度封锁

在这里插入图片描述

显式封锁: 直接加到数据对象上的封锁
隐式封锁:是该数据对象没有独立加锁,是由于其上级结点加锁而使该数据对象加上了锁
显式封锁和隐式封锁的效果是一样的

系统检查封锁冲突时要检查显式封锁,还要检查隐式封锁

对某个数据对象加锁,系统要检查该数据对象、所有上级结点、所有下级结点

意向锁

引进意向锁(intention lock)目的是提高对某个数据对象加锁时系统的检查效率

如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁
对任一结点加基本锁,必须先对它的上层结点加意向锁

在这里插入图片描述
锁的强度是指它对其他锁的排斥程度
一个事务在申请封锁时以强锁代替弱锁是安全的,反之则不然
在这里插入图片描述
具有意向锁的多粒度封锁方法:
申请封锁时应该按自上而下的次序进行
释放封锁时则应该按自下而上的次序进行

具有意向锁的多粒度封锁方法:
提高了系统的并发度
减少了加锁和解锁的开销
在实际的数据库管理系统产品中得到广泛应用

意向共享锁(IS锁)

如果对一个数据对象加IS锁,表示它的后裔结点拟(意向)加S锁。

意向排它锁(IX锁)

如果对一个数据对象加IX锁,表示它的后裔结点拟(意向)加X锁。

共享意向排它锁(SIX锁)

如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,即SIX = S + IX。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值