数据库个人笔记(持续更新中)
第一章 绪论
1.1数据库系统概述
数据(Date)
数据库(DB):长期储存在计算机中,有组织、可共享的大量数据集合。具有低冗余度、高数据独立性、易扩展的特点
数据库管理系统(DBMS):是计算机基础软件,有以下几个功能:
- 数据定义功能,提供数据定义语言(DDL)
- 数据组织、存储和管理
- 数据操作功能,提供数据操纵语言(DML)
- 数据库事务处理和运行管理,用于保证事务的正确性和数据安全性等
- 数据库的建立和维护功能
- 其他功能
数据库系统(DBS):由数据库+数据库管理系统(及相关应用开发工具)+应用程序+数据库管理员组成的
1.2数据模型
将具体事务转换为可处理的数据,对现实的模拟
1.2.1两类数据模型
第一类:概念模型:按照用户要求对数据和信息建模
第二类:逻辑模型:包括层次模型、网状模型、关系模型、面向对象数据模型和对象关系数据模型、半结构化数据模型
第二类:物理模型:描述数据在系统内部的表示方式和存储方法
1.2.2概念模型
实体+属性+码+实体型+实体集+联系
1.2.3数据模型的组成元素
数据结构
数据操作
数据的完整性约束条件
1.2.4常用数据模型
层次模型
优点:
- 结构简单
- 查询效率高
- 提供了良好的完整性支持
缺点:
-
现实中很多联系没有层次结构
-
如果含有多个双亲结点就会导致数据冗余
-
查询子结点必须通过父节点
-
结构死板
网状模型
优点:
- 更能直观的反应世界
- 具有良好的性能
缺点:
- 结构复杂
- DDL、DML复杂且需要嵌套高级语言
- 需要选择合适的存取路径
关系模型*
最重要的一种模型
关系:一个关系对应一张表
元组:一行
属性:一列的第一个名称即为属性名
码:码键,某个属性可以确定一个唯一的元组称为该关系的码
域:属性的取值范围
分量:元组中的一个属性值
关系模式:对关系的描述,一般为:关系名(属性1,属性2,...)
1.3数据库系统结构
数据模型中有“型(type)”和“值(value)”两种概念,而数据库系统结构中包含了“模式”和“实例”两种概念。
1.3.1数据库系统三级模式结构
模式(逻辑模式):是数据库中全体数据的逻辑结构和特征的描述,一个数据库只有一个模式,既不涉及硬件又不涉及应用程序,需要用DDL严格定义模式
外模式(用户模式):用户能够看见使用的局部数据结构和特征,即为模式的子集,每个用户所看到的外模式不同,需要用DDL严格定义模式
内模式(存储模式):一个数据库只有一个内模式,他是数据的物理结构和存储方式的描述,是数据在数据库内部的组织方法。
1.3.2数据库的二级映像功能与数据独立性
外模式/模式映像:当模式改变时通过对该映像进行相应改变可以保证外模式不需要改变,从而保证应用程序不变。
模式/内模式映像:因为模式与内模式都是唯一的,所以该映像是唯一的,它可以保证当物理存储结构发生改变时模式保持不变,从而保证应用程序不变。
第二章 关系数据库
2.1关系数据结构和定义
2.1.1关系
1.域:具有相同属性的集合,如{0,1}、{自然数、0}
2.笛卡尔积:D1xD2xD3 = {(d11,d21,d31),(d12,d22,d32),(...),...}
3.关系:R(D1,D2,D3,...,Dn),笛卡尔积的子集,n称为目或者度
当n=1时称为单元关系;当n=2时称为二元关系
因为关系是笛卡尔积的子集,所以也是一张二元表, 表中的域则称为属性
关系有三种类型:基本表、查询表(查询结果对应的表)、视图表(虚表,不存信息,仅供展示)
2.2.2关系模式
数据库要区分型和值,关系数据库中关系是值,关系模式则是型
$$
R(U,D,DOM,F)
$$
R:关系名
D:该关系属性名的集合
DOM:属性向域的映射集合
F:属性间数据的依赖关系集合
2.2关系操作
2.2.1基本关系操作
常用关系操作 = 查询 + 插入、删除、修改
查询(关系代数) = 选择+投影+并+差+笛卡尔积
2.3关系的完整性
2.3.1实体完整性
关系中每个元组都是可区分的,唯一的
若属性A是关系R的主属性,则其不能取空值且唯一
2.3.2参照完整性
即关系R的外键应为S的主键,让R和S能够相关联。
2.3.3用户定义完整性
用户定义的每个属性的取值范围
2.4关系代数
一种抽象的查询语言,通过关系的运算来表示查询
2.4.1传统集合运算
2.4.2专门的关系运算
选择
投影
连接
除
2.5关系演算
第三章 SQL
3.1数据定义
一个数据库管理系统中可以创建多个数据库,一个数据库中可以创建多个模式,一个模式通常包括多个表、视图索引等数据库对象。
3.1.1模式的定义与删除
定义语句:CREAT SCHEMA <模式名> AUTHORIZATION <用户名>
定义模式实际上就是定义了一个命名空间,在这个空间中可以进一步定义数据库对象,例如基本表、视图、索引等。
-- 例:为用户ZHANG创建一个模式TEST,并定义表TAB
CREAT SCHEMA AUTHORIZATION ZHANG
CREAT TABLE TAB(CHAR X;CHAR Y;);
删除语句:DROP SCHEMA <模式名><CASCADE|RESTRICT>
CASCADE(级联):删除模式时将里面的数据库对象全部删除
RESTRICT(限制):若存在数据库对象则拒绝删除执行
3.1.2基本表的定义、删除与修改
1、定义表
CREAT TABLE <表名>(<列名><数据类型>[约束条件:PRIMARY KEY|UNIQUE],...[FOREIGN KEY(列名) REFERENCES <表2名>(列名)]);
-- 例子
CREAT TABLE STU(
sno char(20) primary key,
sname char(20) unique,
ssex char(2),
foreign key(Sno) REFERENCES COURSE(Con),
);
一个模式可以对应多个基本表,绑定方式为:
1、CREAT TABLE "S-T".Student(...); //创建时绑定
2、在创建模式时就创建基本表即可
2、修改表
ALTER TABLE<表名>
-- 增加新列
[ADD[COLUMN]<新列名><数据类型>[完整性约束]]
-- 给已有的列增加约束
[ADD<标记完整性约束>]
-- 删除某列
[DROP[COLUMN]<列名>[CASCADE|RESTRICT]]
-- 删除某列的完整性约束
[DROP CONSTRAINT<完整性约束名>[CASCADE|RESTRICT]]
-- 修改某列的定义
[ALTER COLUMN <列名><数据类型>];
3、删除表
DROP TABLE <表名> [CASCADE|RESTRICT];
3.2索引的建立与删除
通过建立索引垃圾啊算查询数据库的速度,常见的索引包括:B+树索引、散列索引、位图索引。
一般建立索引是由建表人和数据库管理员完成,用户不能显示地选择索引,所以一般属于内模式范畴
1、建立索引
CREAT [UNIQUE][CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>]) ASC(默认):升序 DESC:降序
例:
CREAT UNIQUE INDEX Stusno ON Student(Sno);
CREAT UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);
2、修改索引
ALTER INDEX <旧索引名> RENAME TO <新索引名>
3、删除索引
DROP INDEX <索引名>
3.3数据查询
-- DISTTINCT:删除表中相同项
SELECT [ALL|DISTINCT]<目标列表达式>
FROM<表名或视图名>
[WHERE<条件表达式>]
[GROUP BY<列名1> [HAVING<条件表达式>]]
[ORDER BY<列名2>[ASC|DESC]];
ORDER BY :对该列进行升序(ASC)和降序(DESC)排序
GROUP BY:将某个属性进行分组,每一组都有一个函数值
3.3.1 聚集函数
WHERE语句不能使用聚集函数表达式。只能作用域SELECT和HAVING两个子句
COUNT(*) | 统计元组个数 |
---|---|
COUNT([DISTINCT|ALL]<列名>) (ALL为默认值) | 统计一列中值的个数 |
SUM([DISTINCT|ALL]<列名>) | 计算一列中值的总和 |
AVG([DISTINCT|ALL]<列名>) | 计算一列中值的平均值 |
MAX([DISTINCT|ALL]<列名>) | 求一列中最大值 |
MIN([DISTINCT|ALL]<列名>) | 求一列中最小值 |
例:
1、求学生总数
SELECT COUNT(*)
FROM Student;
2、求平均成绩大于等于90分的学生学号和平均成绩
SELECT Sno,AVG(Grade)
FROM Student
GROUP BY Sno
HAVING AVG(Grade)>=90;
3.3.2嵌套查询
不相关子查询
例:查询李明所在系的学生
1、查询李明所在系(结果为SC)
SELECT Sdept
FROM Student
WHERE Sname="LiMing";
2、查询该系的学生
SELECT Sno
FROM Student
WHERE Sdept = "SC";
3、嵌套查询
SELECT Sno
FROM Student
WHERE Sdept IN (
SELECT Sdept
FROM Student
WHERE Sname="LIMING"
);
以上例子为不相关子查询,即查询所用变量与父结构不相关
相关子查询
例:查找超过平均成绩的课程号
SELECT Sno,Cno
FROM SC x
WHERE Grade>=(
SELECT AVG(Grade)
FROM SC y
WHERE y.Sno=x.Sno);
可以在SELECT后面加上未知数x(元组变量),带入到子节点中查询,则称为相关子查询。
EXISTS谓语的子查询
SELECT Sname
FROM Student
WHERE EXISTS //只返回真或者假
(SELECT *
FROM SC
WHERE Sno = Student.Sno AND Con='1');
3.3.3集合查询
3.4数据更新
3.4.1插入数据
普通插入
INSERT INTO<表名>
VALUES(<常量>,<常量>,...)
子查询结果插入
INSERT INTO<表名>
SELECT Sdapt,Sname
FROM Student;
3.4.2修改数据
UPDATE Student
SET Sage = 22
WHERE Sno="xxxx";
3.4.3删除数据
DELETE
FROM Student
WHERE Sno='232323';
3.5视图
是一个虚表。其实就是先把满足某些条件的基本表中的列提取出来并组成一张虚表。
3.5.1定义视图
CREATE VIEW <视图名>[<列名>]
AS <子查询>
[WITH CHECK OPTION] //要保证进行操作时满足子查询的条件
行列子集视图:只是从单个基本表导出,并保留了主码的视图
删除视图
DROP VIEW <视图名>[CASCADE];
3.5.2查询视图
当对视图进行查找时,将子查询和用户查询结合起来,转换为等价的对基本表的查询,该转换称为视图消解
SELECT Sno,Sage
FROM IS_Student
WHERE Sage<20;
视图消解后:
SELECT Sno,Sage
FROM Student
WHERE Sdept='IS' AND Sage<20;
3.5.3更新视图
由于视图并没有存储数据,因此对视图的更新、删除、修改数据皆需要转为对基本表的操作,该方法为视图消解
当组成视图的某个属性是通过数学方式求得的(如SVG()),则该视图无法转变为对基本表的更新,则其为不可更新的视图
3.5.4视图的作用
- 简化用户操作
- 能让用户一多种角度看数据
- 对重构数据库提供了一定的逻辑独立性(如物理上增加新的字段时,用户只关心视图中所包含的几个属性)
- 视图能够对数据提供安全保护
- 视图能够更清晰的表达查询
第四章 数据库安全性
数据库安全性是指保护数据库防止不合法使用所造成的数据泄露、更改和破坏。
不安全因素:
- 非授权用户对数据的恶意存取与破坏
- 数据库中重要或敏感的数据被泄露
- 安全环境脆弱
4.1数据库安全性控制
4.1.1用户身份鉴别
- 静态口令鉴别
- 动态口令鉴别
- 生物识别
- 智能卡识别
4.1.2存取控制
存取控制 = 定义用户权限 + 合法权限检测
存取控制有两种方法:
1、自主存取控制:由管理员给用户提供存取权限,不同对象有不同权限
2、强制存取控制:对于任意的对象,只有具有合法许可证的用户能访问(每个对象一个密级,只有高于该权限用户能访问)
4.1.2.1自主存取控制
PS . 数据是开放的,只对用户有限制
用户权限 = 数据库对象 + 操作类型
CREAT ROLE UNAME; //创建角色
GRANT: //授权
GRANT [SELECT|UPDATE()|INSERT|ALL PRIVILEGES]
ON TABLE <表名>
TO [ROLE|PUBLIC|U1];
<WITH GRANT OPTION>
REVOKE: //删除授权
REVOKE [SELECT|UPDATE()|INSERT|ALL PRIVILEGES]
ON TABLE <表名>
FROM [ROLE|PUBLIC|U1];
4.1.2.2强制存取控制
PS. 用户权限也限制,数据也限制,避免了绕过用户直接访问数据的风险
对实体分类:
主体:访问数据库的用户(许可证级别)
客体:数据库中的数据、视图、基本表等(密级)
等级划分:绝密 > 机密 > 可信 > 公开
高权限可以读低权限文件,低权限可以写高权限文件(只能低到高)。
强制存取 > 自主存取,所以强制存取一定实现了自主存取
4.2视图机制
为不同的用户定义不同的视图进行限制
4.3审计
审计:对数据库的每次操作都会记录下来保存到审计日志中,其实是一种事后检查安全机制
审计事件
- 服务器事件
- 系统权限
- 语句事件
- 模式对象事件
审计功能
- 基本功能:查阅审计
- 多套审计规则
- 提供审计分析和报表
- 审计日志管理
- 提供查阅审计日志的视图
审计分类
- 用户级审计
- 系统级审计
AUDIT ALTER,UPDATE //创建审计
ON SC;
NOAUDIT ALTER,UPDATE //删除审计
ON SC;
4.4数据加密
1、存储加密
- 透明存储加密:对用户透明,内核级加密
- 非透明存储加密:多个加密函数实现加密
2、传输加密
- 链路加密
- 端到端加密
4.5其他安全措施
1、推理控制
2、隐蔽信道
3、数据隐私保护
第五章 数据库完整性
5.1实体完整性
在定义表时对PRIMARY KEY进行定义,有两种方式(对单属性定义 与 对表级定义)
CREATE TABLE Student(
Sno char(9) primary key;
...
)
CREATE TABLE Student(
Sno char(9);
Sname char(12);
PRIMARY KEY(Sno);
)
实体完整性的检验:
1、判断主键是否为空,通过全排安排扫描的方式
2、判断主键是否唯一,可以通过B+树的方法来判断实体完整性是否唯一(从根节点开始查找)
5.2参照完整性
对模型使用FOREIGN KEY来定义那些属性为外键并用REFERENCES来指明这些外码参照了哪些主码
CREAT TABLE SC
{
Sno char(6) PRIMARY KEY,
Sco char(12),
FOREIGN KEY(Sco) REFERENCES Student(Sco)
//PRIMARY KEY(Sno),
//ON UPDATE CASCADE,
//ON DELETE NO ACTION
};
5.2.1参照完整性的检查和违规处理
当对两张表中的其中一张进行增删改操作时可能会破坏参照完整性
- 当在被参照表中加入某个元素,原表中没有该元素
- 当在原表中加入某个元素,被参照表中没有该元素
- 当在原表中删除某个元素,被参照表中没有删除该元素
- 修改原表中的某个值,被参照表中没有修改该元素
解决如上的策略为:
1、拒绝执行;不允许该操作,为默认方法
2、级联操作;如删除某个元组时相关表中元组也删除
3、设为空值;如把被参照表中某个元组删除时,与之相关的原表中的元组都要设为空值
5.3用户定义完整性
5.3.1属性上的约束条件
1、属性不能为空(NOT NULL)
2、列值唯一(PRIMARY KEY、UNIQUE)
CREATE TABLE XX(
SNO CHAR(9) UNIQUE NOT NULL, //列值唯一且非空
)
3、用CHECK短语设置要求
-- Ssex只能在男女中选择:
Ssex char(2) CHECK(Ssex IN('男','女'))
-- Grade在0-100之间:
Grade int CHECK(Grade>=0 AND Grade<=100)
5.3.2元组上的约束条件
通常用CHECK来进行约束
-- 名字不能用Ms.开头或者只能是女性
Sname char(20) CHECK(Ssex = ‘女’ OR Sname NOT LIKE 'Ms.%')
5.4完整性约束句子CONSTRAINT
CONSTRAINT <约束名><约束条件>
CREAT TABLE{
Sno char(7)
CONSTRAINT C1 CHECK(Sno>900 AND SNO <1000)
CONSTRAINT C2 PRIMARY KEY(Sno)
-- 其中的C1、C2是自定义的名字
}
可以使用ALTER TABLE来修改限制条件
ALTER TABLE Student
DROP CONSTRINT C1;
ADD CONSTRINT C3 CHECK (Sno>900 AND SNO <1000)
5.5&5.6断言与触发器
第六章 关系数据理论
6.1名词解释
第一范式:每个分量不可再分
数据依赖:关系内部属性之间的约束关系
函数依赖:比如一个学生只有一个学号,则姓名、性别等数值则可以由一个学好唯一确定,即f(x),其中f可以为Sname、Ssex,而x则为Sno
R<U,F>
R:关系名
U:一组属性
F:数据依赖
例子:
建立一个教务数据库,包含学号(Sno),所在系(Sdept),系主任名(Mname),课程号(Cno),成绩(Grade)则U={Sno,Sdept,Mname,Cno,Grade}
通过语义分析知:
1、一个系有若干学生,一个学生一个系
2、一个系只有一个系主任
3、一个学生可以选多门课程,每门课有多名学生选
4、每个学生学的每门课都有一个成绩则F=
如果只通过数据依赖的方法建表,会导致:
- 数据冗余
- 更新异常
- 插入异常
- 删除异常
6.2规范化
如果X,Y是属性组U的两个子集(X和Y也是两个集合),且当X唯一时能确定一个唯一的Y,则称X函数确定Y,记作X->Y
6.2.1名词解释
- X->Y,Y不是X的子集,则X->Y是非平凡的函数依赖
- X->Y,Y是X的子集,则称X->是平凡的函数依赖,对任一关系模式都成立
- X->Y,则X称为决定因素
- X->Y,Y->X,记作X<-->Y
如果X->Y,X‘是X的真子集,且Y不依赖与X',则称X为Y的完全函数依赖,格式为在→上加F
如果X->Y,Y不完全依赖于X,则称Y对X部分函数依赖,格式为在→上加p
如果X->Y,Y->Z,则X->Z,该依赖称为传递函数依赖
6.2.2码
候选码:在R<U,F>中,K-F->U(完全函数依赖),则称K为候选码(属性集合K能完全推出元组的所有属性)
超码:若K为U的部分函数依赖,则为超码,候选码是最小的超码
主码:候选码中选一个作为
主属性:候选码中的属性
非主属性(非码属性):非候选码中的属性
全码:所有属性都是主属性时
6.2.3范式
IF5<IF4<BCNF<IF3<IF2<IF1(等级越低的范式要求越高)
1NF
每个属性都为最小值不能再分,数据库必须满足的最低要求
2NF
所有的非主属性都完全函数依赖与任何一个候选码
若一个关系模式R不满足2NF,则可能导致:
- 插入异常,如候选码为<Sno,Cno>,而插入一个学生<Sno,Sdept,Sloc>因为没有选课Cno为空则会导致异常。
- 删除异常,如果删除掉主属性则元组必须删除
- 修改复杂,如果一个学生转系,正常的话只需要修改Sdept即可,但是因为不满足2NF,数据库属性中还含有住处(Sloc)属性需要修改,就导致每次修改都要改两个变量
3NF
所有的非主属性既不部分函数依赖于码,也不传递依赖与码,则满足3NF,与2NF的区别在于多了个不传递依赖与码
其中SC与S-L都满足2NF,但是S-L不满足3NF
BCNF
扩展版的3NF
- 满足1NF
- 所有主属性对不包含它的码也是完全函数依赖
- 没有任何属性完全函数依赖于非码的任意属性
例子
S(Sno,Sname,Sdept,Sage),设Sno和Sname也具有唯一值,则S有两个码(Sno)、(Sname)且两个码都有唯一属性且彼此不相交,则满足3NF,也满足BCNF
多值依赖
若X,Y,Z为U的子集且Z = U - X -Y。若给一组(X, Z),有一组Y值,这组值能推出X的值但是于Z无关,则称多值依赖X——>Y
其中(C,B)可以由一组T值推出C但与B无关。C-->T
平凡多值依赖:当X-->Y,而Z为空时
4NF
就是不允许有非平凡且非函数依赖的多值依赖
6.3 数据依赖的公理系统
第七章 数据库设计
7.1数据库设计步骤
需求设计→概念结构设计→逻辑结构设计(外模式)→物理结构设计(内模式)→数据库实施→数据库运维
7.2需求设计
需求分析
NABCD分析法
数据字典
对数据库中数据项的描述,在数据库设计中不断完善
7.3概念结构设计
将用户需求抽象为信息结构的过程,可以非常直观的反应现实,通常采用E-R模型来进行设计
E-R图(可使用UML图来设计)
E-R图提供了实体型、属性和联系的方法。主要是实体与实体之间的联系。
实体型:用矩阵表示
属性:用椭圆表示
联系:用菱形表示
一个完整的E-R图实例:
7.4逻辑结构设计
将概念结构设计生成的E-R图转换成数据模型的过程(关系模型、层次模型等)
E-R图转换为关系模型
-
一个实体型转变为一个关系模式
-
一个1:1的联系可以转变为一个独立的关系模式,也可以与任一边合并
-
一个1:n的联系可以转变为一个独立的关系模式,也可以与n端合并
-
一个m:n的联系可以转变为一个独立的关系模式
-
三个及以上的多元联系可以转变为一个独立的关系模式
7.5物理结构设计
物理结构设计多指对数据库的存取索引方法等进行物理存储结构的设计
数据库为多用户共享系统,通常不同用户对数据库的存取要有不同的路径,常用存取方法为索引方法和聚簇方法
- 索引方法:B+树索引和hash索引
- 聚簇存取方法:为了提高某个属性的查询速度,可以把这些属性值相同的元组集合存放在连续的物理块上聚簇。则该属性(或属性组)称为聚簇码。
第八章 数据库编程
第九章 关系查询处理和查询优化
9.1关系数据库的查询处理
同编译原理相同,用来将用户提交的查询语句转变为高效的查询执行计划的过程
步骤:查询分析—>查询检查—>查询优化—>查询执行
选择操作的实现
- 全盘扫描的方式
- 索引扫描的方式:1、HASH表;2、B+树
连接操作的实现
- 嵌套循环的方法
- 排序、合并的方法
- 索引连接
- HASH join算法
9.2查询优化
目前关系数据库的执行代价主要包括:I/O代价+CPU代价+内存代价+通信代价
进行优化的方式就是减少这些代价
9.3代数优化
通过改变关系代数表达式的等价变换来提高查询效率。
1、连接、笛卡尔积的交换律
E1 X E2 = E2 X E1
E1 连接(自然连接) E2 = E2 连接(自然连接) E1
2、连接、笛卡尔积的结合律
(E1 X E2) X E3 = E1 X (E2 X E3)
连接同上
。。。。。。(未完补充)
9.4物理优化
1、基于规则的启发式优化
- 查询时小表可以直接全盘扫描
- 当遇到大加小时可以让小表作为外表
2、基于代价估算的优化
第十章 数据恢复技术
10.1事务
用户定义的一个数据库操作实例,这个操作要么全做,要么全不做。不可分割的一个工作单位
事务定义的三个句子:
BEGIN TRANSACTION; --开始事务
COMMIT; --提交事务的所有操作(如更新数据库等)
ROLLBACK; --回滚,当数据库发生异常时撤销所有操作回到开头
事务的ACID特征:
- 原子性:不可分割
- 一致性:如果在过程中出错的就要回退,否则会导致一部分数据对一部分数据错,就没有一致性了
- 隔离性:事务间不相互干扰
- 持续性(永久性):一个事物一旦提交就再也不会改变
10.2数据库系统故障种类
1、事务内部故障
在写事务时用户写的事务出错从而导致,为非预期故障,不能由应用程序处理,因为无法执行到ROLLBACK语句,所以要强制回滚,该恢复方法称为事务撤销
2、系统故障
任何操作导致系统重启从而中断事务(如停电、DBMS代码错误等),此时的方法为清除所有事务的修改,然后重做
3、硬件故障、病毒
10.3恢复的实现技术
前面当出现故障时最好的办法就是通过冗余数据来重建,而如何建立冗余数据则成了恢复技术的一大问题。
两种办法:数据转储、日志文件
10.3.1数据转储
由数据库管理员定期的将数据库中的数据复制到磁盘等地方保存。这种方法只能将错误的数据库恢复到保存数据的时期。
1、有两种转储方式
- 静态转储:系统无事务时进行的操作
- 动态转储:转储和事务可以并发执行
2、转储内容量划分:
- 海量转储:将全部数据存到别的设备上
- 增量转储:将上一次海量转储后更新的数据存入
转储方式为1+2的排列组合
10.3.2 日志文件
日志文件:为了实现动态转储必须将事务对数据库的修改活动记下,登记日志是在执行前完成的。
日志文件两类:
- 以记录为单位的日志文件
- 以数据块为单位的日志文件
动态转储必须要日志文件、静态转储可以要。
事务故障恢复步骤:
1、反向扫描日志文件
2、执行逆操作
3、继续扫描,并不断循环2
4、到达事务标记头部停止
系统故障恢复步骤:
1、正向扫描日志文件,将事务加入撤销队列
2、对队列中事务进行逆操作(增删)
3、对重做事务进行重做操作(更新)
介质故障恢复步骤(最严重,概率最小):
1、重装数据库,重做所有事务
2、装入日志文件副本
10.3.3检查点回复技术
带检查点的数据库存储步骤:
1、将日志记录保存到存储器(写日志)
2、在日志文件中写入一个检查点记录(创检查点)
3、写数据到数据库中(写数据)
4、将事务存取的文字写到检查点中(修改检查点值)
利用检查点恢复步骤:
1、在检查点前的事务不需要重做
2、执行时间覆盖到检查点的需要重做
3、当事故运行时事务还在运行,需要撤销
10.4数据库镜像
为了防止介质存取故障
没有故障时可以并发访问,从而实现负载均衡。