一、事务
用户定义的一组操作序列,要么全做,要么全不做。
是并发控制的基本单位。
commit
事务正常结束
所有的数据是永久的更改
rollback
事务异常终止
撤销之前事务所做的更改,回滚到事务未开始的状态。
事务四个特性
1)原子性:事务是数据的逻辑工作单位。
一个事务里面包含的操作要么都做要么都不做。
2)一致性:事务是从一个状态变成另一个装态。
(要么是事务未开始做的状态,要么是全部完成后的状态,不可能存在中间的状态。)
只存在成功的事务的状态,不存在失败的事务的状态。
3)隔离性
事务不能被其他的事务所干扰。
4)永久性
对事物的更改是永久的,接下来的操作和其他的故障不能够产生任何的影响。
常见的故障:
1、事务故障
事务在运行的过程中发生了些意外导致程序异常终止。
解决方法:可能已经将部分数据写入硬盘,所以应该撤销事务,强行回滚。
2、系统故障
整个正常运行的事务突然被破坏。
解决方法
1)redo所有已经提交的事务。事务提交后的数据修改可能只停留在缓冲区内。
2)undo未完成的事务,未完成的事务可能在磁盘里面已经修改过了。
3、介质故障
硬盘损坏,外存当中的内容部分丢失或者全部丢失。
解决方式:装入某个时刻的数据备份,重做这个时刻之后成功提交的事务。
恢复操作的基本原理:冗余
利用数据库当中其他部分冗余的数据来恢复被损坏的数据。
冗余数据的建立
数据转储:数据转到其他的硬件上作为备份。
1)静态转储:
在转储的时候不运行其他的事务。
能够保证一致性状态。
2)动态转储
用户运行事务的同时也进行数据库的备份。
不能保证备份的数据的一致性和有效性。
需要把动态转储期间数据库的修改活动以日志形式记录下来,建立日志文件。
恢复的时候结合日志文件,将数据库恢复到某一状态。
3)海量转储
每次将所有的数据转储一遍
4)增量转储
只转储上次转储后更新的部分。
不能保证更新后的数据有效
日志文件:用来记录对数据库的操作的文件
操作方式和操作对象。操作前后的数据
可以基于事务和基于数据块。
静态转储 + 日志文件
可以利用日志文件进行恢复处理,而不必运行事务程序。
登记日志文件:先写日志文件,后写数据库
故障的恢复:
1)事务故障的恢复:
Undo该事务对硬盘的修改。
反向操作更新操作,将更新操作逆着做一遍,直到事务开始的标志。
2)系统故障的恢复
undo故障发生时未完成的事务,
redo故障发生时已完成的事务
从头扫描日志文件,确定redo队列和undo队列,
介质故障的恢复
1)重做数据库
恢复到一致性的状态
3)恢复已经完成的数据
- 静态转储:已是一致性状态。
- 动态转储:同过日志文件(redo + undo)将数据库恢复到一致性状态。
显式封锁:直接对该数据项进行加锁
隐式封锁:对该数据项的上级数据项加锁导致间接的对该数据项进行了加锁
所以检查是否加锁的时候需要检查上中下的内容。
该数据对象
有无显式封锁与之冲突
所有上级结点
检查本事务的显式封锁是否与该数据对象上的隐式封锁冲突:(由上级结点封锁造成的)
所有下级结点
看上面的显式封锁是否与本事务的隐式封锁(将加到下级结点的封锁)冲突。
引进意向锁(intention lock)目的
提高对某个数据对象加锁时系统的检查效率
对任一结点加基本锁,必须先对它的上层结点加意向锁
如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁
第九章 —— 关系查询处理和查询优化
查询处理步骤
1.查询分析:词法语法分析
2.查询检查:权限检查
3.查询优化:有多种途径可以达到目的,选择最佳的一个
4.查询执行
-
查询分析
对查询语句进行扫描、词法和语法分析。 -
查询检查
检查语句中对象有效性,检查权限和约束。 -
查询优化
对可供选择的执行策略和操作算法进行挑选。 -
查询执行
根据优化器得到的执行策略生成查询计划。
关系代数表达式的优化算法
(1)分解选择运算
(2)通过交换选择运算,将其尽可能移到叶端
(3)通过交换投影运算,将其尽可能移到叶端
(4)合并串接的选择和投影,以便能同时执行或在一次扫描中完成
(5)对内结点分组
(6)生成程序
第七章 —— 数据库设计
数据库设计的六个阶段
1、需求分析
2、逻辑结构设计阶段
E_R图登场
3、概念结构设计阶段
关系模型
4、物理设计阶段
选择存储方式和存储引擎
5、实施阶段
6、运行和维护阶段
一、需求分析的任务
确定新系统的功能
信息要求、处理要求、安全性与完整性要求。
信息要求:获取什么数据
处理要求:、安全性与完整性要求。
数据字典
1)用途:各类数据描述的集合。
数据通过详细分析而得到的结果
2)内容
数据项
数据结构(数据采用什么样的结构组织)
数据存储(我觉的是文件描述符那类的东西,记录了数据的存储位置)
处理过程
数据流(有一定长度,有起点和终点的有序数据序列,比如一个数据流,比如查询一个表,数据是一列一列的出来还是一行一行的出来。)
数据项是数据的最小组成单位
若干个数据项可以组成一个数据结构
数据字典通过对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容。
7.3.2 概念结构设计的方法与步骤
设计概念结构的四类方法
自顶向下
首先定义全局概念结构的框架,然后逐步细化
自底向上
首先定义各局部应用的概念结构,然后将它们集成起来,得到全局概念结构
逐步扩张
首先定义最重要的核心概念结构,然后向外扩充,以滚雪球的方式逐步生成其他概念结构,直至总体概念结构
混合策略
将自顶向下和自底向上相结合,用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略中设计的各局部概念结构。
三种常用抽象
-
分类(Classification)
定义某一类概念作为现实世界中一组对象的类型
这些对象具有某些共同的特性和行为
它抽象了对象值和型之间的“is member of”的语义
在E-R模型中,实体型就是这种抽象 -
聚集(Aggregation)
定义某一类型的组成成分
它抽象了对象内部类型和成分之间“is part of”的语义
在E-R模型中若干属性的聚集组成了实体型,就是这种抽象。
物理设计
- 为关系模式选择存取方法(建立存取路径)
- 设计关系、索引等数据库文件的物理存储结构
数据库的实施
1.用DDL定义数据库结构
2.组织数据入库
- 筛选数据。需要装入数据库中的数据通常都分散在各个部门的数据文件或原始凭证中,所以首先必须把需要入库的数据筛选出来。
- 转换数据格式。筛选出来的需要入库的数据,其格式往往不符合数据库要求,还需要进行转换。这种转换有时可能很复杂。
- 输入数据。将转换好的数据输入计算机中。
- 校验数据。检查输入的数据是否有误。
3.编制与调试应用程序
4.数据库试运行
数据库试运行也称为联合调试,其主要工作包括:
1)功能测试:实际运行应用程序,执行对数据库的各种操作,测试应用程序的各种功能。
2)性能测试:测量系统的性能指标,分析是否符合设计目标。
3)测试方法与数据:测试过程应当尽量在真实的环境下进行。测试数据要有量与质的保证(有充分的代表性数据)。进行时空效果综合评价。