第八章 数据库编程
1、嵌入式 SQL 与主语言之间的通信SQL 是描述性的面向集合的语句,负责操纵数据库;高级语言语句是过程性的面向记录的语句,负责控制程序流程通信。
使用预编译方法处理
在嵌入式 SQL 中, 当主语言为C 语言时, 语法格式为 EXEC SQL <SQL 语句>;
当主语言为 Java, 语法格式为 #SQL{<SQL 语句>};
嵌入式 SQL与主语言之间的通信包括:
① SQL向主语言传递执行状态信息,主要用 SQL通信区实现
② 主语言向 SQL 提供参数,主要用主变量实现
③ 将SQL语句查询数据库的结果交给主语言处理,主要用主变量和游标实现S
QL 通信区:SQL语句执行后的执行状态信息将送到SQL通信区中,应用程序从中取出这些信息,据此决定接下来执行的语句SQL 通信区在应用程序中用 EXEC SQL INCLUDE SQLCA 加以定义
主变量:SQL语句中使用的主语言程序变量简称为主变量 (即SQL 使用主语言的变量)输入主变量由应用程序赋值,SQL 引用;输出主变量由SQL 赋值或设置状态信息,返回应用程序一个主变量可以附带一个任选的指示变量 (整型),用来指示所指主变量的值或条件主变量名和指示变量名前面要加冒号 (:)作为标志所有主变量和指示变量必须在 SQL 语句 BEGIN DECLARE SECTION 与 END DECLARE SECTION 之间进行说明
游标:SQL 是面向集合的,一条 SQL 语句可以产生或处理多条记录,而主语言是面向记录的,一组变量一次只能存放一条记录,因此引入游标来协调这两种不同的处理方式一个数据缓冲区,用来存放SQL 语句的执行结果,每个游标区都有自己的名字
第九章 关系查询处理和查询优化
一.查询处理
1.查询处理的4个阶段
查询分析
查询检查
查询优化
代数优化
关系代数表达式的优化,即按照一定的规则,通过对关系代数表达式进行等价交换,改变代数表达式中操作的次序和组合,使查询执行更高效
物理优化
存取路径和底层操作算法的选择
查询执行
第十章 数据库恢复技术
1、事务的概念
① 事务是数据库操作序列,这些操作要么全做,要么全不做,是不可分割的工作单位。一个事务可以是一个sql语句,一组sql语句,或者整个程序。一般来说,一个程序包含多个事务。
② 事务是恢复的基本单位,也是并发控制的基本单位。
2、定义事务的SQL语句
开始语句: BEGIN TRANSACTION;
结束语句:COMMIT;//表示提交事务的所有操作
或者 ROLLBACK;//表示回滚,即事务运行中发生了某种故障,需要
对已完成的操作进行撤销,回滚到事务开始的状态。
3、事务的4个特性 (ACID):原子性,一致性,隔离性,持续性
① 原子性:一个事务要么全做,要么全不做
② 一致性:事务执行的结果必须一致。如果一个事务被迫中断,即事务中的一些操作做了,剩下的还没做,且做了的对数据库造成的修改已经存入物理数据库的话,就会造成数据库处于不一致的状态。因此事务要么全做,要么全不做,一致性和原子性是密切相关的
③ 隔离性:一个事务的执行不能被其他事务干扰
④ 持续性(也称为永久性):一个事务一旦提交,它对数据库中数据的改变应该是永久性的
4、数据库系统的故障种类:事物内部的故障、系统故障、介质故障、计算机病毒
① 事务内部的故障
事务内部的故障有的是可以通过事务程序本身发现的,有的是非预期的、不能由事务程序处理的
事务故障的情况下,数据库可能处于不正确的状态。恢复程序要在不影响其他事务运行的情况下,强行回滚该事务,即撤销该事务造成的修改,这类恢复操作称为UNDO (事务撤销)
② 系统故障 (软故障)
系统故障是指造成系统停止运转的任何事件,使得系统要重新启动(例如硬件错误、操作系统故障、DBMS代码错误、系统断电等等)
系统故障的情况下,在系统重新启动后,恢复子系统除了需要撤销未完成的事务以外,还需要 REDO (事务重做)所有已提交的事务
③ 介质故障 (硬故障) 5/9
外存故障,如磁盘损坏、磁头碰撞、瞬时强磁场干扰等
④ 计算机病毒
5、数据库恢复技术:数据转储、登记日志文件
恢复机制涉及的两个关键问题
1、如何建立冗余数据;
2、如何利用这些冗余数据实施数据库的恢复
恢复的基本原理:利用存储在后备副本、日志文件和数据库镜像中的冗余数据来重建数据库
建立冗余数据的技术包括:
① 数据转储
数据库管理员定期将整个数据库复制到磁带、磁盘或其他存储介质上保存起来,这些备用数据称为后备副本或后援副本。当数据库遭到破坏后可以将后备副本重新装入,但重装后备副本只能将数据库恢复到存储时的状态,要想恢复到故障发生时的状态,则必须重新运行自转储后的所有更新事务
数据转储分为:静态转储(在系统中无运行事务时进行)、动态转储(转储期间允许对数据库进行存取或修改)
数据转储也可分为:海量转储(每次转储全部数据库)、增量转储(每次只转储上一次转储后更新过的数据)
数据转储方法分为:动态海量转储、动态增量转储,静态海量转储、静态增量转储
② 登记日志文件
日志文件是用来记录事务对数据库的更新操作的文件,有两种格式:以记录为单位、以数据块为单位
以记录为单位的日志文件
需要登记的内容:各个事务的开始(BEGINTRANSACTION)标记、各个事务的结束(COMMIT/ROLLBACK)标记、各个事务的所有更新操作
日志记录的内容:事务标识(标明哪个是事务)、操作的类型(增删改)、操作对象 (记录内部标识)、更新前数据的旧值(对插入而言,此项为空值)、更新后数据的新值 (对删除而言,此项为空值)
以数据块为单位的日志文件
日志记录的内容:事务标识、被更新的数据块
日志文件的作用:
(1)事务故障恢复和系统故障恢复必须用日志文件
(2)在动态转储方式中必须建立日志文件,后备副本和日志文件结合才能有效恢复数据库
(3)在静态转储方式中也可以建立日志文件,当数据库毁坏后可以重新装入后备副本把数据库恢复到转储结束时刻的正确状态 ,然后利用口态文件把已完成的重条进行重做处理 对故障发生时尚未完成的重各进行撤销外理
把已完成的事务进行重做处理,对故障发生时尚未完成的事务进行撤销处理登记日志文件的两条原则:
(1)登记的次序严格按并发事务执行的时间次序
(2)必须先写日志文件,后写数据库
6、不同的数据库系统故障下的恢复策略
① 事务故障的恢复
由系统自动完成,对用户透明:利用日志文件撤销(UNDO)此事务已对数据库进行的修改
② 系统故障的恢复
由系统重新启动时自动完成,不需要用户干预:撤销(UNDO)故障发生时未完成的事务,重做(REDO)已完成的事务
③ 介质故障的恢复
最严重的一种故障:重装数据库,重做 (REDO)已完成的事务
*为避免磁盘介质出现故障影响数据库,许多数据库管理系统提供了数据库镜像功能 (复制数据实现)
7、具有检查点的恢复技术
这种技术在日志文件中增加了检查点记录:检查点之前的事务已经做完了,不需要重做,检查点期间和之后的事务需要重做,可以改善恢复效率
系统出现故障时,恢复子系统将根据事务的不同状态采取不同的恢复策略
第十一章 并发控制
一.并发控制的概念
1.并发控制:
为了保证事务的隔离性和一致性,数据库管理系统需要对并发操作进行正
确调度
2.并发控制的主要技术有:
封锁、时间戳、乐观控制法、多版本并发控制等
3.并发操作带来的数据不一致性:
①丢失修改:两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失
②不可重复读:指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果
③读脏数据:事务T1修改某一数据后并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撒销,这时T1修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致
4.并发控制的基本方法:封锁(x锁、S锁)
①排他锁/写锁,X锁若事务T对数据对象A加上X锁,则只允许事务T读取和修改A事务T释放A上的锁之前:其他事务不能读取和修改A,不能再对A加任何类型的锁
②共享锁/读锁,S锁若事务T对数据对象A加上S锁,则事务T可以读取A,但不能修改A事务T释放A上的S锁之前:其他事务可以读取A,可以对A加S锁,但不能修改A,也不能对A加X锁封锁类型的相容矩阵:
5.封锁协议:
约定何时申请X锁/S锁、持续时间、何时释放等等
①一级封锁协议
事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放
②二级封锁协议
事务T在修改数据R之前必须先对其加X锁(一级封锁协议),并且其他事务在读取数据之前必须先对其加S锁,读完后即可释放S锁
③三级封锁协议
事务T在修改数据R之前必须先对其加X锁(一级封锁协议),并且其他事务在读取数据之前必须对其加S锁,直到事务结束才释放(二级封锁协议是读完就能释放)不同级别的封锁协议和一致性保证:
一级封锁协议√√
二级封锁协议√√√√
三级封锁协议√√√vV
6.活锁和死锁
①活锁
事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待;T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待;T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求...2有可能永远等待,产生活锁避免活锁:采用先来先服务的策略
②死锁
事务T1封锁了数据R1,T2封锁了数据R2,T1又请求封锁R2,因T2已封锁了2,于是T1等待T2释R2上的锁,接着T2又申请封锁R1,因T1已封锁了R1,T2也只能等待T1,释放R1上的锁,这样T在等待T2,而T2又在等待T1,T1和T2两个事务永远不能结束,形成死锁
解决活锁的方法:
(1)死锁的预防
1.一次封锁法:每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行
2.顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务按这个顺序实施封锁
(2)死锁的诊断与解除诊断:
1.超时法:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁
2.等待图法:构建事务等待图(有向图:节点表示运行的事务,边表示事务等待的情况),存在回路即死锁解除:选择一个处理死锁代价最小的事务,将其撤销(UNDO),释放此事务持有的所有的锁
7.可串行化调度:多个事务并发执行的结果=这些事务按某种次序串行执行的结果一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。例如现有事务T1和T2,若T1与T2的并发执行结果与先T1后T2相同,或者与先T2后T1相同,那么这个调度就是正确的,否则就是错误的
8.冲突可串行化调度
冲突操作:指不同的事务对用一个数据的读写操作(读和写)和写写操作(写和写)不同事务的冲突操作和同一事物的两个操作是不能交换的,如果发生交换,自然会发生错误。基于此,如果调度能保证冲突操作的次序不变,就称为冲突可串行化的调度。冲突可串行化调度一定是可串行化调度。(但是注意,可串行化调度也有可能不满足冲突可串行化)
9. 两段锁协议(2PL):所有事务必须分两个阶段对数据项加锁和解锁
①获得封锁(扩展阶段):在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁
②释放封锁(收缩阶段):在释放一个封锁之后,事务不再申请和获得任何其他封锁若并发执行的所有事务均遵守两段锁协议,则对这些事务均遵守两段锁协议,则对这些事务的任何并发调度都是可串化的
10.多粒度封锁
显示封锁:直接加到数据对象上的锁
隐形封锁:由于上级节点加锁使得该数据对象加上锁
意向锁:如果对一个节点加上意向锁,那么这个节点的下一个节点加上锁
意向共享锁,意向排他锁,共享意向排他锁
第十二章 数据库管理系统
数据库管理系统的基本功能
数据库定义和创建
数据组织,存储和管理
数据存取
数据库事务管理和运行管理
数据库的建立和维护
......
应用层:关系数据库管理系统的核心之外
语言处理层:处理对象是数据库语言,如SQL
数据存取层:处理对象是单个元组
数据存储层:处理对象是数据页和系统缓存区
第十三章 数据库技术发展概述
1.数据模型是数据库系统的核心和基础
2.层次模型和网状模型都是格式化模型
一.面向对象数据模型
将语义数据模型和面向对象程序设计方法结合起来,用面向对象观点来描述现实世界
实体(对象)的逻辑组织、对象间限制、联系等的模型。系列面向对象核心概念构成
了面向对象数据模型(Object Oriented Data Model, O0模型)的基础,主要包括以下一
些概念:
(1)现实世界中的任何事物都被建模为对象。每个对象具有一个唯一的对象标识
(2)对象是其状态和行为的封装,其中状态是对象属性值的集合,行为是变更对象状
态的方法集合
二.XML数据模型
XML 数据模型由表示XMIL 文档的结点标记树、结点标记树之上的操作和语义约束组持
成。XMIL结点标记树中包括不同类型的结点
文档结点是树的根结点
XM 文档的根元素作为该文档结点的子结点
元素结点对应XMI 档中的每个元素
子元素结点机的排列顺序按照XML文档中对应标签的出现次序;属性结点对应元素相关的属性值
元对素结点是它的每个属性结点的父结点;命名空间结点描述元素的命名空间字符串
结点标记树的操作主要包括树中子树的定位以及树和树之间的转换。XML元素中的ID/IDref属性
提供了一定程度的语义约束的支持
三.RDF数据模型
RDF是一种用于描述Web资源的标记语言,其结构就是由(主语,谓词,宾语)构成的三元组。
这里的主语通常是网页的URL;谓语是属性,如Web页面的标题、作者和修络的不
改时间、Web文档的版权和许可信息等;
宾语是具体的值或者另一个数据对象
第十四章 大数据管理
一.基本概念
1.什么是大数据
大数据是指无法在可容忍的时间内用现有IT技术和软硬件工具对其进行感知、获取、不断生成数据
管理、处理和服务的数据集合
还有专家给出的定义是,大数据通常被认为是PB(10° B)或更高数量级的数据,包括结构化的、半结构化的和非结构化的数据。
2.大数据的特征
巨量,多样,快变(实时性),价值
二.拓展
1.NoSQL数据管理系统
Key-Value模型
BigTable模型
文档模型
图模型
2.NewSQL数据库系统
3.MapReduce技术
是一种并行编程模型,是软件框架
第十五章 内存数据库系统
内存数据库是将内存作为主存储设备的数据库系统
数据库的数据存储一般有行存储模型、列存储模型和混合模型等。
在行存储模型 元组是连续存放的,适合事务处理中一次更新多个属性的操作·保证对多个属性的操作产生最小的内存访间:但对于只涉及表中相对较少属性的分析处理时,即使该查询仅涉及元组某个或某些属性,其他属性也会被同时从内存读入到缓存,降低了缓在利用率。
列存储模型将关系按列进行垂直划分,相同属性的数据连续存储。当访问特定属性时只读入所需要的属性所在的分片,所以节省内存带宽,并且具有较高的数据访问局部性,可减少缓存失效,提高数据访问效率;同时列存储将相同类型的数据集中存储,能够更好地对数据进行压缩以减少内存带宽消耗,利用SIMD(单指令多数(据流)技术提高并行处理效率,通过列存储的数据定长化处理支持对数据按偏移位置的访问。但是,如果查询需要的属性较多,列存储需要连接多个划分来满足查询要求,则会导致性能下降。特别是元组重构时需要进行较多的连接操作,代价较高。
第十六章 数据仓库与联机分析处理技术
数据仓库是为了构建新的分析处理环境而出现的一种数据存储和组织技术
数据仓库的基本特征
(1)主题与面向主题
数据仓库中的数据是面向主题进行组织的
(2)数据仓库是集成的
(3)数据仓库是不可更新的
在数据处理时不可以更新
(4)数据仓库是随时间变化的