往往,最不详细的地方,可能更要考。
Chapter1.绪论
1.1数据库系统概述
1.1.1概念
数据:是数据库中存储的基本对象
数据库:长期存储在计算机内、有组织的、可共享的大量数据的集合
数据库管理系统(DBMS):主要功能:数据定义功能;数据组织、存储和管理;数据操纵功能;数据库的事务管理和运行管理;数据库的建立和维护功能;其他功能
1.1.2历史
jump↑jump↓jump↑jump↓jump↑jump↓
人工管理->文件系统->数据库系统
1.1.3数据库系统的特点
数据结构化:整体数据结构化,面向全组织,数据用数据模型描述,可以边长,最小存取单位是数据项
数据的共享性高、冗余度低、易扩充
数据独立性高:物理独立性、逻辑独立性
物理独立性:内模式,数据的物理存储改变,应用程序不用改变
逻辑独立性:外模式,数据的逻辑结构改变,用户程序不用改变
数据由DBMS统一管理和控制:安全性保护、完整性检查、并发控制、数据库恢复
1.2数据模型
数据模型是严格定义的一组概念的集合(说了跟没说)
用数据模型来抽象、表示和处理现实世界中的数据和信息
1.2.1两大数据模型
- 概念模型:也叫信息模型,按用户的观点对数据和信息建模
- 逻辑模型&物理模型:按计算机观点
- 逻辑模型:网状模型、层次模型、关系模型、面向对象模型等,按计算机系统的观点对数据建模,用DBMS实现
- 物理模型是对数据最底层的抽象,描述数据在系统内部的表示和存取方法。
抽象过程:现实世界中客观对象->概念模型->DBMS支持的数据模型
1.2.2概念模型
基本概念
实体:客观存在并可相互区别的事物,可以是人、事、物或抽象概念
属性:实体所具有的某一特性
码:唯一标识实体的属性集
域:某一属性的取值范围
实体型:用实体名及属性名集合来抽象和刻画同类实体的模型?
实体集:同一类型实体的集合
联系:现实世界中事物内部及事物之间的联系在信息世界中反映为实体内部和实体之间的联系
实体内部:指组成实体的各属性之间的联系
实体之间:不同实体集之间的联系
两个实体型之间的联系
一对一,一对多,多对多
实体-联系方法(E-R图)
咋整啊,一个大题,找点题做
实体型:矩形
属性:实体的属性/联系的属性,用椭圆形,并且和相应实体连接
联系:菱形,与实体相连,并在边上标注联系的类型(1:1 1:n m:n 同一个节点上的编号不要重复)
1.2.3数据模型的组成要素
数据结构
描述数据库的组成对象,以及对象之间的联系
是对系统静态特性的描述
数据操作
对各种对象的实例允许执行的操作和操作规则(突然java?),对系统动态特性的描述
主要是查询、更新
完整性约束
给定数据模型中数据及联系所具有的制约和存储规则
用于限定数据库状态和数据库状态的变化,保证数据正确、有效、相容
1.2.4常用数据模型
jump↑jump↓jump↑jump↓jump↑jump↓
1.2.5关系模型
关系:对应一张表
元组:一行
属性:一列即一个属性,属性的名称就是属性名
主码:可以唯一确定一个元组的属性集
域:属性的取值范围
分量:元组中的一个属性值
关系模式:对关系的描述 Student(sno,sname,ssex,sdept,sage…)
※关系的完整性约束
实体完整性
参照完整性
用户定义的完整性
优缺点
优点:建立在严格的数学概念基础上;概念单一;存取路径对用户透明
缺点:查询效率不如非关系数据模型;对用户请求进行优化提高了DBMS开发难度
E-R模型到关系模型转化
E-R模型 | 关系模型 |
---|---|
实体 属性 码 | 关系 属性 码 |
联系 1:1 | 转换为独立的关系模式,或与任意一端关系模式合并 |
1:n | 转换为独立的关系模式,或与n端关系模式合并 |
m:n | 转换为一个关系模式 |
1.3数据库系统结构
1.3.1数据库系统模式的概念
型type:对值的抽象类型
值value:型的具体值
模式schema:型的描述
实例instance:模式的具体值
1.3.2数据库三级模式结构
内模式(存储模式)
数据物理结构和存储方式的描述,在数据库内部的表示方式
一个数据库只有一个内模式
存储方式(顺序?B树?hash?)
索引
压缩存储
加密
存储记录结构的规定
模式(逻辑模式)
内模式和外模式的中间层,一个数据库只有一个模式
数据库中全体数据的逻辑结构和特征的描述
所有用户的公共数据视图,综合所有用户需求
模式的定义:
- 数据的逻辑结构(数据项名字、类型、取值范围)
- 数据之间的关系
- 数据有关的安全性、完整性要求
是数据库的中心与关键,独立于数据库其他层次,应该首先设计模式
外模式(子模式或用户模式)
用户使用的局部逻辑结构和特征的描述
模式-外模式:一对多
一个数据库可以有多个外模式,反映不同用户的应用需求,看待数据的方式、保密需求
外模式-应用:一对多
同一外模式也可为某一用户的多个应用系统使用
用途:安全性;用户只能看见部分数据,保密性
1.3.3数据库二级映像功能与数据独立性
二级映像在DBMS内部实现三个抽象层次(模式)的联系和转换
外模式/模式映像
定义外模式与模式间的对应关系,
映像定义通常包含在各自外模式的描述中?
保证数据逻辑独立性:模式改变时,修改映像,使外模式不变;从而应用程序不必修改
模式/内模式映像
定义数据全局逻辑结构与存储结构之间的对应关系
模式/内模式映像唯一(模式和内模式都唯一了显然)
映像定义通常包含在模式描述中
保证数据物理独立性:存储结构改变,修改映像,使模式不变;从而外模式、应用程序不必修改
1.4数据库系统组成
硬件平台及数据库
足够大的内外存,较高的通道能力,提高数据传送率
软件:DBMS
人员
数据库管理员
决定数据库中信息内容和结构
存储结构和存取策略
安全性要求和完整性约束条件
监控数据库的使用和运行
数据库的改进和重组
系统分析员和数据库设计人员
系统分析员:与用户协商,数据库系统概要设计
设计人员:用户需求调查和系统分析,确定数据库中的数据,设计各级模式
应用程序员
设计和编写应用系统的程序模块
进行调试和安装
用户
偶然用户:不经常访问,但每次访问往往需要不同的数据库信息,中高级管理人员
简单用户:查询和更新数据库,职员
复杂用户:直接使用数据库语言访问数据库,工程师,科学家
Chapter2.关系数据库
2.1关系模型概述
域:一组具有相同数据类型的值的集合 D={1,2,3}
基数:域中数据个数
笛卡尔积:就笛卡尔积
元组:笛卡尔积中每一个元素(d1,d2,d3,…,dn)
分量:di叫分量
基数:各集合基数相乘
关系:从笛卡尔积构造出的表中选取有实际意义的元组构造关系
D1*D2*…*Dn的子集叫做在域D1,D2,…,Dn上的关系,表示为R(D1,D2,…,Dn)
候选码:关系中的某一属性组能唯一识别一个元组
主码:若某个关系有多个候选码,选定其中一个作主码
主属性:候选码的所有属性
非码属性:不包含在任何候选码中的属性
全码:关系模式的所有属性组是这个关系的候选码
关系模式:关系的型
关系:很多条内容,关系模式和关系又统称为关系
2.2关系操作
查询:选择、投影、连接、除、并、交、差、笛卡尔积
数据更新:插入、删除、修改
5种基本操作:选择、投影、并、差、笛卡尔积
能够用来表达其他的运算
2.3关系的完整性
关系的完整性约束:实体完整性,参照完整性,用户定义的完整性
实体完整性和参照完整性又叫关系的两个不变性,用户定义的完整性体现具体领域中的语义约束
实体完整性
若属性A是关系R的主属性,则属性A不能取空值
参照完整性
1.关系间的引用:引用关系或其他关系的某个属性
2.外码:F是R的一个或一组属性,但不是R的码,如果F与基本关系S的主码K相对应,则称F是基本关系R的外码
R称为参照关系,S为被参照关系
所以F必是原来关系中的一个主码
参照完整性:外码F或者取空值(若F是一组属性,F的每个属性值都为空值),或者等于S中某个元组的主码值
用户定义的完整性
针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。
关系模型提供定义和检验这类完整性的机制
例如:性别只能输入男或女
2.4关系代数
一种抽象查询语言
看ppt
运算符:
集合运算符(并、差、交、笛卡尔积)
专门的关系运算符(选择、投影、连接、除)
算数运算符(加减乘除,比较大小)
逻辑运算符(与或非)
元组的连接
象集
$$
选择:\sigma_{Sage<20}(Student) \
投影:\pi_{Sname,Sdept}(Student)\
(关系的)连接:R\Join_{R.a=S.a} S\
除:R\div S
$$
自然连接:连有一个属性列相等的
连接还有左外连接、右外连接、全外连接(左+右),外连接其他属性上填NULL
关系代数不能表达:最大最小值,排序,模糊查询
没了!
Chapter3.5.8 SQL各种操作
3-关系数据库标准语言SQL
5-数据库完整性
T-sql编程
8-数据库编程
见另一篇
Chapter4.数据库安全性
概念部分还是再写一下
4.1数据库安全性概述
4.1.1数据库的不安全因素
非授权用户对数据库的恶意存取和破坏
安全机制:用户身份鉴别、存取控制、视图
数据库中重要或敏感的数据被泄露
安全机制:强制存取控制、数据加密存储和加密传输、审计日志分析
安全环境的脆弱性:与计算机系统的安全性紧密联系
安全机制:建立一套可信计算机系统的概念和标准
计算机系统安全性问题
技术安全类:系统采用具有一定安全性的硬件、软件来实现对计算机系统及其所存数据的安全保护,当系统受到供给时仍能保证系统正常运行,保证数据不增加、不丢失、不泄露。
管理安全类:管理不善导致的计算机设备和数据介质的物理破坏、丢失等软硬件意外故障、场地的意外事故等安全问题
政策法律类:政府部门建立的有关计算机犯罪、数据安全保密的法律道德准则和政策法规、法令
4.1.2安全标准简介
TCESC/TDI:安全策略、责任、保证、文档
四组七个等级,A表示可靠性最高,各安全级别 偏序向下兼容
D
一切不符合更高标准的系统
DOS
C(C1,C2)
C1:初级的安全保护;能够实现对用户和数据的分离,进行自主存取控制(DAC)(?),保护或限制用户权限的传播
C2:安全产品的最低档次;提供受控的存取保护,DAC细化,以个人身份注册负责,实施审计和资源隔离
win2000 oracle7
B(B1,B2,B3)
B1:标记安全保护;安全和可信的产品;对系统的数据加标记,对标记的主体和客体试试强制存取控制(MAC,用户需要与标记的数据标签对等才能使用数据)、审计等安全机制
Trusted Oracle 7、sql server 11.0.6
B2:结构化保护;建立形式化的安全策略模型并对系统内的所有主体和客体实施DAC&MAC
B3:安全域;TCB满足访问监控器的要求,审计跟踪能力更强,提供系统恢复功能
A(A1)
A1:验证设计;提供B3的同时给出系统的形式化设计说明和验证以确信各安全保护真正实现;理论阶段
CC
提出国标公认的表述信息技术安全性的结构
把信息产品的安全要求分为:安全功能要求、安全保证要求
4.2数据库安全性控制
非法使用数据库的情况
- 编写合法程序绕过DBMS及其授权机制
- 直接或编写应用程序执行非授权操作
- 通过多次合法查询数据库从中推导出一些保密数据
安全性控制的常用方法(举例)
- 用户标识与鉴别
- 存取控制
- 视图
- 审计
- 加密(存储加密、传输加密)
4.2.1用户标识与鉴别
用户身份鉴别:系统提供最外层安全保护措施;用户标识由用户名和用户标识号组成(用户标识号在系统整个声明周期唯一)
静态口令鉴别
一般由用户自己设定静态口令(密码)
动态口令鉴别
每次产生新的动态口令,一次一密(短信验证码)
生物特征鉴别
通过生物特征认证(指纹、虹膜)
智能卡鉴别
智能卡是一种不可复制的硬件,内置集成电路芯片,硬件加密功能
4.2.2存取控制
存取控制子系统
用户权限定义
用户对某一数据对象的操作权利称为权限
DBMS定义的用户权限存放在数据字典中,定义规则称为安全规则或授权规则
合法权限检查
用户发出存取数据库操作请求
DBMS查找数据字典,进行合法权限检查
常用存取控制方法
4.2.3&4.2.6
4.2.3自主存取控制方法
DAC
- 用户对不同的数据对象有不同存取权限
- 不同用户对同一对象也有不同权限
- 用户还可将其拥有的存取权限转授给其他用户
GRANT/REVOKE语句
用户权限组成:数据库对象;操作类型
定义用户存取权限:定义用户可以在哪些数据库对象上进行哪些类型的操作(?
↑这个词(定义用户存取权限)叫做授权
缺点:仅仅通过对数据的存取权限进行安全控制,数据本身并无安全标记,收权后,数据可能还存在于原用户中
4.2.4授权与回收
sql语句见另一篇
循环授权:A->B->C-(x)>A
4.2.5数据库角色
被命名的一组与数据库操作相关的权限,角色是权限的集合,可以为一组具有相同权限的用户创建一个角色,以简化为每个用户授权的过程
角色的sql语句
4.2.6强制存取控制方法
- B1级
- 每一个数据对象被标以一定的密级
- 每一个用户被授予某一个级别的许可证
- 对于任意一个对象,只有具有合法许可证的用户才可以存取
主体:系统中的活动实体(DBMS所管理的实际用户,代表用户的各进程)
客体:系统中被动实体,受主体操作的(文件、基表、索引、视图)
敏感度标记:对于主体和客体,DBMS为每个实例指派一个敏感度标记
敏感度标记级别:绝密TS、机密S、可信C、公开P
主体的敏感度标记称为许可证级别
客体的敏感度标记称为密级
强制存取控制规则
- 仅当主体许可证级别大于或等于客体密级时,该主体可以读相应客体(不能写)
- 仅当主体许可证级别小于或等于客体密级时,该主题可以写相应客体(不能读)
禁止了拥有高许可证级别的主题更新低密级的数据对象
举个例子,高考试卷(客体)我(主体,密级低于高考试卷)阅卷人(主体,密级高于高考试卷)
我可以写,不能读答案(这个地方感觉不够严谨);阅卷人可以读,但不能写试卷
强制存取控制是对数据本身进行密级标记,标记和数据是不可分的整体
实现MAC首先要实现DAC(高级的向下兼容)
4.3视图机制
吧保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定的安全保护;提供数据独立性
剩下的都交给sql语句
4.4审计
审计日志:将用户对数据库的所有操作自动记录下来存入其中
管理员用日志找出非法存取数据的人、时间和内容;对潜在的威胁提前采取措施加以防范
C2以上必须具有审计机制
审计功能的可选性
审计费时间空间,可以根据应用对安全性的要求,灵活地打开或关闭审计功能
审计事件
服务器事件
审计数据库服务器发生的事件
系统权限
对系统拥有的结构或模式对象进行操作的审计
要求该操作的权限是通过系统权限获得的
语句事件
SQL语句的审计(DDL DML DQL DCL)
模式对象事件
对特定模式对象(?)上进行的SELECT或DML操作的审计
审计功能
不是很懂诶
审计分类
用户级审计
针对自己创建的数据库表视图进行审计
记录所有用户的一切成功和不成功访问要求以及各种类型的SQL操作
系统级审计
DBA设置(DATABASE ADMIN)
检测成功或失败的登录请求
检测GRANT和REVOKE以及其他数据库级权限下的操作
AUDIT:设置审计
NOAUDIT:取消审计
what怎么感觉从来没见过
4.5数据加密
防止数据库中数据在存储和传输中失密
基本思想
根据一定算法将原始数据(明文)变为不可直接识别的格式(密文)
加密方法
存储加密
透明存储加密(内核级加密)
将数据写到磁盘时对数据进行加密,授权用户读取时解密
性能较好,安全完备性较高
非透明存储加密
通过多个加密函数实现
传输加密(计算机网络)
链路加密
在链路层进行加密,传输信息由报头和报文两部分组成,报头报问均加密
端到端加密
发送端加密,接收端解密
4.6其他安全性保护
推理控制
处理强制存取控制未解决的问题,避免用户通过多次合法查询数据库从中推导出一些保密数据(非法使用数据库3)
常用方法:基于函数依赖的推理控制;基于敏感关联的推理控制
隐蔽信道
数据隐私保护
个人控制隐私信息的能力,范围设计数据收集、存储、处理、发布等
4.7sql server的安全管理
另一篇
Chapter7.数据库设计
数据库设计的基本步骤:7.2-7.6标题
不想敲了
数据库设计的特点:三分技术,七分管理,十二分基础数据
数据库设计基本步骤:
- 需求分析
- 概念结构设计
- 逻辑结构设计
- 物理结构设计
- 数据库实施
- 数据库运行和维护
7.1数据库设计概述
7.2需求分析
分析用户活动,产生业务流程图
确定系统范围,产生业务范围图
分析用户活动及所设计的数据,产生数据流图
分析系统数据,产生数据字典
分析方法:自顶向下的结构化分析方法
数据字典
是各类数据描述的集合,不是数据本身
是进行详细的数据收集和数据分析所获得的主要结果
数据字典在需求分析阶段建立,在数据库设计过程中不断修改、充实、完善
看一下课本P207
内容
数据项
数据结构
数据流
数据存储
处理过程
7.3概念结构设计
是整个数据库设计的关键
概念模型:E-R模型(第一章扒出来讲过)
设计方法:自顶向下,自底向上,逐步扩张,混合策略
常用策略:自顶向下进行需求分析,自底向上设计概念结构
实体和属性的划分准则:
- 属性不再有需要描述的性质,属性是不可分的数据项
- 属性不与其他实体有联系,联系仅发生在实体之间
7.4逻辑结构设计
将概念模型转化为一般的关系、网状、层次模型
将关系模型向特定DBMS数据模型转换
设计用户子模式,采用视图机制
7.5物理结构设计
物理结构主要指:存取方法(B+树索引方法,聚簇方法,HASH方法等)和存储结构
对物理结构评价:时间和空间效率、维护代价
选择索引的规则:经常在查询条件中出现、经常用作聚集函数的参数、经常在连接操作的连接条件中出现
聚簇方法:为提高某个属性(或属性组)的查询速度,把这个(或这些)属性(属性称为聚簇码)上具有相同值的元组集中存放在连续的物理块称为聚簇,提高按聚簇属性进行查询的效率,节省存储空间
7.6数据库的实施和维护
Chapter10.数据库恢复技术
10.1事务的基本概念
定义:一个数据库操作序列,不可分割的工作单位,恢复和并发控制的基本单位
一个程序通常包含多个事务
事务的特性 ACID
原子性 Atomicity
事务是数据库的逻辑工作单位
一致性 Consistency
事务执行结果必须是使数据库从一个一致性状态变到另一个一致性状态
一致性:只包含成功事务提交的结果
不一致:包含失败事务的结果
隔离性 Isolation
对于并发事务而言,一个事务的执行不能被其他事务干扰;并发执行的事务之间不能互相干扰
持续性 Durability
事务一旦提交,他对数据库中数据的改变就应该是永久性的
10.2数据库恢复概述
把数据库从错误状态恢复到某一已知的正确状态(也叫一致状态\完整状态)
10.3故障的种类&10.5恢复策略
1.事务内部的故障
可以预期的故障(程序问题)不考虑
仅指非预期的故障:运算溢出、并发事务发生死锁而被撤销的事务、违反完整性限制
事务在运行至正常终止前被终止
事务故障恢复:撤销事务(UNDO)
由恢复子系统利用日志文件撤销此事务已对数据库进行的修改
由系统自动完成,不需用户干预
步骤:
反向扫描日志文件(从最后向前扫描),查找该事务的更新操作
对该事务的更新操作执行逆操作,即将日志记录中更新前的值写入数据库
insert,更新前值为空,做delete
delete,同理,做insert
update,用修改前的值代替修改后的值
继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理
直到读到此事务的开始标记停止,事务故障恢复完成
系统故障
软故障,系统停止运行,所有正在运行的事务非正常终止,不破坏数据库,内存中数据库缓冲区信息全部丢失
原因:硬件错误(CPU故障)、操作系统故障、DBMS代码错误、断电
系统故障恢复(UNDO+REDO)
(在系统重新启动时自动完成,不需用户干预)
发生故障时,事务未提交,但对数据库的更新可能已写入数据库
撤销(UNDO)所有未完成的事务
发生故障时,事务已提交,但缓冲区中信息尚未完全写入数据库
重做(REDO)所有已提交的事务
恢复步骤:
正向扫描日志文件(从头扫描),未完成事务记入撤销队列,已提交事务记入重做队列
撤销(UNDO)队列:未完成的事务队列(只有BEGIN TRANSACTION)
重做(REDO)队列:已提交的事务队列(既有BEGIN TRANSACTION也有COMMIT)
对撤销队列事务进行撤销处理
反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作(见事务故障)
对重做队列事务进行重做处理
正向扫描日志文件,对每个REDO 事务重新执行登记的操作,将日志记录中更新后的值写入数据库
介质故障
硬故障,外存故障:磁盘损坏、磁头碰撞、瞬间强磁干扰
介质故障恢复(重装备份并恢复到一致性状态+REDO)
恢复:装入数据库发生故障前某个时刻的数据副本,重做自此之后的所有成功事务,将事务已提交的结果重新写入数据库
重装数据库
装入最新的后备副本,恢复到最近一次转储时的一致性状态
- 静态转储,装入即可
- 动态转储,同时装入转储时克的日志副本,利用恢复系统故障的方法UNDO+REDO,才能将数据库恢复到一致性状态
重做已完成的事务
装入转储结束时刻的日志文件副本,重做已完成的事务
正向扫描,已提交的事务记入重做队列;对重做队列中所有事务进行重做处理
需要DBA介入,重装副本,执行恢复命令
什么?你说你分不清UNDO 和REDO?
怎么可能呢
大大的一个UR写在这里是吧
计算机病毒
破坏、盗窃系统数据、破坏系统文件
故障小结
两种情况:
- 数据库本身被破坏
- 数据库没有被破坏,但数据可能不正确,这是由于事务的运行被非正常终止导致的
10.4恢复的实现技术
基本原理:冗余,利用存储在其他地方的冗余数据重建
冗余数据的建立:
10.4.1数据转储
DBA将整个数据库复制到其他位置保存的过程,备用数据称为后备副本/后援副本
只能将数据库恢复到转储时的状态
转储方法
1.
静态转储:系统中无事务运行时转储,期间不允许任何活动;优缺:实现简单,降低数据库可用性
动态转储:转储与用户事务并发进行,允许转储时存取和修改;缺点:不能保证副本中数据正确有效(啊这;将动态转储期间活动建立日志文件,后备副本+日志文件才能将数据库恢复到某一时刻的正确状态
2.
海量转储:每次转储全部数据库
增量转储:只转储上次转储后更新过的数据
优缺:海量比增量在进行恢复时更方便;但数据库很大或事务处理十分频繁,增量转储更实用有效
总的方法分类:1和2笛卡尔积
10.4.2登记日志文件
用来记录事务对数据库的更新操作的文件
作用:进行事务故障恢复,系统故障的恢复,协助后备副本进行介质故障恢复
必须先写日志文件,再更新数据库
10.6具有检查点的恢复技术
提高系统故障的恢复效率
在日志文件中增加检查点(checkpoint)记录
内容:建立检查点时刻所有正在执行的事务清单、这些事务最近一个日志记录的地址
增加重新开始文件
内容:检查点记录在日志文件中的地址
恢复子系统在登录日志文件期间动态维护日志
建立检查点,保存数据库状态
可以定期(按照预定时间间隔)或不定期(按照某种规则,如日志文件写满一半)建立检查点,保存数据库状态
好处:改善恢复效率
当事务T在一个检查点P之前提交,T对数据库的修改已经写入数据库,在恢复时不需对T进行REDO操作
恢复步骤
从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点的记录
由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LIST,同时建立UNDO-LIST和REDO-LIST,将ACTIVE-LIST暂时放入UNDO-LIST,REDO-LIST暂为空
从检查点开始正向扫描日志文件(向后扫),直到日志文件结束
若有新开始的事务Ti,将Ti暂时放入UNDO-LIST
若由提交的事务Tj,将Tj从UNDO-LIST队列移到REDO-LIST队列
对UNDO-LIST中的每个事务执行撤销UNDO
对REDO-LIST中的每个事务执行重做REDO
10.7数据库镜像
提高介质故障的恢复效率
介质故障是最严重的一种故障,严重影响数据库的可用性,恢复费时、必须周期性转储数据库
提高数据库可用性:数据库镜像(mirror)
DBMS自动把整个数据库或其中的关键数据复制到另一个磁盘上,自动保证镜像与主数据库的一致性,每次主数据库更新时,DBMS自动把更新后的数据复制过去
出现故障时由镜像磁盘继续提供使用,同时DBMS利用镜像数据进行数据库恢复,不需关闭系统和重装数据库副本
没有故障时可用于并发操作
Chapter11.并发控制
多事务执行方式:
事务串行执行:每个时刻只有一个事务运行,其他事务必须等待它完成才能执行
交叉并发方式
带来的问题:多个事务同时存取同一数据,破坏事务一致性和数据库一致性
11.1并发控制概述
并发操作破坏了事务的隔离性,并发控制就是用正确的方式调度并发操作,避免造成数据的不一致
1.丢失修改
我的神秘理解:改上加改(X+X)
两个事务同时读一数据并修改,T2的提交破坏T1的提交结果,导致T1的修改丢失(飞机订票)
2.不可重复读
读上加改(S+X)
T1读取数据后,T2执行更新操作,使T1无法再现前一次读取结果
三种情况:
- T1读取后T2修改,T1再次读取得到与前一次不同的值
- T1读取后T2插入,T1再次读取发现多了一些记录
- T1读取后T2删除,T1再次读取发现少了一些记录
后两种又叫幻影现象
3.读脏数据
改上加读(X+S)
T1修改某一数据并写入数据库,T2读取同一数据后T1被撤销,此时T2读的数据就与数据库中不一致,称为读脏数据
并发控制主要技术
有封锁
时间戳:事务盖开始时间的戳,发生冲突就回滚具有较早时间戳的调度,再重新进入系统盖戳;可能有事务一直回滚
乐观控制法(乐):就是开摆
11.2封锁
X锁
排它锁/写锁,若事务T对数据对象A加X锁,则只允许T读取和修改,其他任何事物都不能再对A加任何类型的锁,直到T释放A上的锁
S锁
共享锁/读锁,若事务T对数据对象A加S锁,则其他事务只能再对A加S锁,不能加X锁,直到T释放A上的S锁。保证其他事务可以读A,但不能对A进行任何修改
一级封锁协议
事务T在修改数据A前必须加X锁,直到事务结束释放。(不使用S锁,读数据可以发生在任何时刻)
可以解决丢失修改,不能解决不可重复读、读脏数据
二级封锁协议
在一级的基础上,事务T在读取A前必须先加S锁,读完后立即释放S
可以解决丢失修改和读脏数据,不能解决不可重复读(S+X,S读完释放,X能加)
三级封锁协议
在二级的基础上,S直到事务结束才释放
都可以解决
11.3活锁和死锁
活锁
活锁:T1封锁数据R,T2请求封锁R于是等待,T3也请求封锁R于是T1释放R上封锁后首先批准T3的请求,T2继续等待;然后又来了T4T5Tn…(明明是我先来的.jpg)
避免:先进先出
死锁
T1封锁R1,T2封锁R2后请求封锁R1于是等待,而T1又请求封锁R2于是等待
1.预防死锁
破坏产生死锁的条件
一次封锁法
必须一次将所有要使用的数据加锁,否则不能继续执行
问题:降低并发度,难于事先确定封锁对象
顺序封锁法
预先对数据对象规定封锁顺序,所有事务按照这个顺序实行封锁
问题:维护成本高(事务非常多并且不断变化),难以实现
2.死锁的诊断与解除(普遍)
超时法
如果一个事务的等待时间超过规定时限,认为发生死锁
优点:实现简单
缺点:若时限太短,容易误判;时限太长,死锁发生不能及时发现
事务等待图法
有向图G={T,U}
T:节点集,表示正在运行的事务
U:边集,表示等待情况,若1等2,则1->2
出现回路说明产生了死锁
并发控制子系统周期性生成事务等待图,若出现回路,说明系统中出现了死锁
死锁的解除
选择一个代价最小的事务将其撤销,释放它持有的所有锁,使其他事务能继续运行
撤销后-10章事务故障的处理
11.4并发调度的可串行性
可串行化调度:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行执行这些事务的结果相同
可串行性:是并发事务正确调度的准则,一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度
冲突可串行化调度:保证冲突操作次序不变情况下,交换两个事务中不冲突操作的次序,若能得到一个串行的调度,该调度称为冲突可串行化调度
冲突可串行化调度=>可串行化调度(充分条件)
冲突操作:不同事务对同一数据的读写操作和写写操作
不同事务的冲突操作和同一事务的两个操作不能交换
11.5两段锁协议
使用两段锁协议产生的是可串行化调度
所有事务必须分两个阶段对数据项加锁和解锁:扩展阶段只申请锁不释放锁,收缩阶段只释放锁不申请锁
遵循两段锁协议的调度=>可串行化调度(充分条件)
两段锁协议&防止死锁的一次封锁法
一次封锁法遵守两段锁协议
两段锁协议不要求事务一次性将数据全部加锁,因此可能发生死锁
11.6封锁的粒度
封锁对象的大小称为封锁粒度
粒度越大(封锁数据库),数据库封锁数据单元越少,并发度越小,系统开销越小
粒度越小(封锁某元组),数据库封锁数据单元越多,并发度越高,系统开销越大
多粒度封锁-多粒度树:以树形姐欧股表示多级封锁粒度
三级粒度树
- 每个节点可独立加锁
- 对一个节点加锁意味着这个节点所有子树节点也加同样类型的锁
- 一个数据对象可能被两种形式封锁:显式&隐式封锁
对R1加锁:搜索R1上级节点数据库,搜索R1,R1下级节点(每个元组),若其中有不相容锁,则必须等待
意向锁
提高对某个数据对象加锁时系统的检查效率
对一个节点加意向锁,说明该节点的下层节点正在被加锁;对任意节点加基本锁,必须先对它的上层节点加意向锁
IS
对A加IS,表示对A的子树节点B意向加S锁;若成功对A加IS,则对B加S锁
IX
对A加IX,表示对A的子树B节点意向加X锁;若成功对A加IS,则对B加X锁
SIX
对A加SIX锁,表示对A加S锁和IX锁,表示要读取A中所有数据(表中所有数据)和更新子树节点级别的个别数据(更新个别元组)
这两个操作在SIX锁的定义中不冲突
神秘理解之一图掌握锁的强度关系和相容关系
IS与S、IX、SIX相容
S与IX不相容
S、IX与SIX不相容
都与X不相容
锁的强度是如图所示的偏序关系
优点:提高并发度,减少加锁解锁的开销