第一章 数据库应用系统的开发方法
1.1 数据库基本概念
- 数据
两部分:临时性(内存),持久性(磁盘)。
- 数据库:数据库系统你能够存放结构化数据的地方,是长期存储、有组织的、可共享数据的地方。
- 数据库系统:基于数据库的计算机应用系统。
组成:数据库,数据库管理系统,数据库管理员,硬件平台,软件平台
- 数据库应用系统(DBAS)的结构:
1.2 软件工程与数据库技术
- 软件工程:软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。
- 软件生存周期:软件生存周期(SDLC,软件生命周期)是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,
- 数据库工程(数据库设计,应用的设计与实现):数据库工程是指一个或多个数据连接(数据库以及访问该数据库所需的信息)的集合。
注:数据库应用系统的设计开发必须要有软件过程模型作为指导(瀑布模型,快速原型模型,螺旋模型等)。
1.3 DBA生命周期模型
五个基本活动、三条设计主线、三级结构模式(概念,逻辑,物理)
- 规划与分析(目标,任务,可行性)
工作内容:系统规划与定义:任务陈述、确定任务目标、确定范围和边界、确定用户视图
可行性分析:技术、经济、操作可行性及开发方案选择
项目规划:项目团队、环境、活动,成本预算,进度计划
- 需求分析:数据需求分析→数据字典,功能描述,性能、其他分析。
- 系统设计(概念,逻辑,物理):
概念设计:数据库概念模型设计、系统总体设计
逻辑设计:数据库逻辑结构设计、应用程序概要设计、数据库事务概要设计
物理设计:数据库物理结构设计、数据库事务详细设计、应用程序详细设计
- 实现与部署(DBAS的实施,建立数据库,编写程序等)
- 运行管理与维护(DBA负责 )
第二章 需求分析
2.1 需求分析
- 需求分析的概念和意义
需求分析:使系统工程师能够刻画出软件的功能和性能,指明软件和系统其他元素的接口,并建立软件必须满足的约束。
需求分析的目标:深入描述软件的功能和性能,确定软件设计的约束和软件同其它系统元素的接口细节,定义软件的其它有效性需求。
- 需求分析发生变化:软件功能复杂,需求的可变性,软件产品的不可见性,
- 需求获取的方法:面谈,实地观察,问卷调查、查阅资料
- 需求分析的过程:标识问题→建立需求建模→描述需求(软件规格说明书)→确认需求(评审)(软件工程的重点:文档,需求规格说明书)
常使用下列方法:结构化分析与建模方法(SAD),如:DFD,IDEF。面向对象的分析建模方法(OOA),如UML。结构化建立分析模型:功能建模,数据建模,行为建模。抽象与分解是结构化分析的主要指导思想。
2.2需求分析方法
常见两种:SA(DFD、IDEF)和OOA(UML)
- 数据流图(DFD):(考级:理解)对业务流程的建模。
数据流图常见图形解释:
数据流:数据流是一组数据,数据流是数据在系统内传播的路径。在数据流图中数据流用带箭头的线表示,在其线旁标注数据流名。(DFD的核心)
数据源:代表系统之外的实体,可以是人、物或其他软件系统。是数据在流动中的源点。
数据处理:处理是对数据进行处理的单元,它接收一定的数据输入,对其进行处理,并产生输出。
数据存储:表示信息的静态存储,可以代表文件、文件的一部分、数据库的元素等。
- DFD具体建模的过程
- 明确目标,确定系统范围
- 建立顶层DFD图(一张)
- 构建第一层DFD分解图
- 开发DFD层次结构图
- 检查确认DFD图:五条规则
- IDEF0需求建模方法(16条,不同的领域)
IDEF的含义是集成计算机辅助制造(Integrated Computer-AidedManufacturing, ICAM) DEFinition。最初的IDEF方法是在美国空军ICAM项目建立的,最初开发3种方法:功能建模(IDEF0)、信息建模(IDEF1)、动态建模(IDEF2),后来,随着信息系统的相继开发,又开发出了下列IDEF族方法:数据建模(IDEF1X),过程描述获取方法(IDEF3)、面向对象的设计(OO设计)方法(IDEF4)、使用C++语言的OO设计方法(IDEF4C++)、实体描述获取方法(IDEF5)、设计理论(rationale)获取方法(IDEF6)、人-系统交互设计方法(IDEF8)、 业务约束发现方法(IDEF9)、网络设计方法(IDEF14)等。
第一类IDEF方法的作用是沟通系统集成人员之间的信息交流。主要有:IDEF0、IDEF1、IDEF3、IDEF5。IDEF0通过对功能 的分解、功能之间关系的分类(如按照输入、输出、控制和机制分类)来描述系统功能。IDEF1用来描述企业运作过程中的重要信息。IDEF3支持系统用户 视图的结构化描述。IDEF5用来采集事实和获取知识。
第二类IDEF方法的重点是系统开发过程中的设计部分。目前有两种IDEF设计方法:IDEF1X和IDEF4。IDEF1X可以辅助语义数据模型的设计。IDEF4可以产生面向对象实现方法所需的高质量的设计产品。
IDEF1X:IDEF系列方法是由美国空军的ICAM(Integrated Computer Aided Manufacturing)计划中首次提出一种复杂系统分析与设计方法,它包括了功能建模(IDEF0)、信息建模(IDEF1)、动态建模(IDEF2)、数据建模(IDEF1x)、过程描述获取方法(IDEF3)等。其中,IDEF1x是IDEF1的扩展版本,改进了图形的表达并且增强语义。IDEF1x是语义数据模型化技术,可用于概念模型设计,有一致性、可扩展性、简洁的特点,易于用户掌握。
实体中的联系:
(1)连接联系中又可分为标定联系与非标定联系。
标定联系:子实体主关键字是父实体主关键字的一部分;
非标定联系:父实体主关键字作为子实体的外键。
(2)分类联系(Categorization Relationship),表示实体中分层结构,主实体由多个分类实体构成,分类联系可以分为完全分类联系与不完全分类联系。
完全分类联系是指主实体的每一个实例都可以是某个分类实体的实例,例如学生可以分类为男学生、女学生;
不完全分类联系是指存在一个主实体的实例不在分类实体的实例中,例如:学生分类为大一学生、大二学生,该分类不完全包括了所有学生。
(3)非确定性关系:又称为“多对多关系”,两个实体间相互存在一对多的联系。
- UML用例建模方法:统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。
第三章 数据库结构设计(概念,逻辑,物理)
3.1数据库概念设计
- 数据库概念设计的目标:数据库概念化设计是从抽象和宏观的角度来设计数据库,即定义数据全局性的规范,保证数据库内容完整、组织合理和便于应用。一般它应该包含数据库的数据组成、数据模型、数据内部组织等核心内容,并在此基础上形成一份称之为数据库概要设计报告的书面文件。
- 概念设计的依据(需求分析的结果)及过程:依据:需求说明书,DFD,各阶段的报表。过程:建模目标,实体集等。
- 概念模型的设计(ER建模方法:将现实世界抽象为具有属性的实体及联系。)
实体,实例,实体集,属性(描述实体性质,取值范围叫“域”),码(key)(主码),联系,联系集。
- IDEF1X建模方法(了解)
3.2数据库逻辑设计
- 逻辑设计的任务:将概念模型(如ER图)转化为DBMS所支持的数据模型(如关系模型);
- 逻辑设计的依据(概念设计的结果):关系模式的设计。
- 相关概念:关系模型,数据依赖,候选码,主码,外码,数据规范化(*),范式
- 数据库逻辑设计的方法:概念结构→关系模型→数据模型(特定的DBMS)→优化数据
3.3数据库物理设计
- 物理设计描述:设计数据库的存储结构和物理方法(完整性,可靠性,安全性)
- 数据库的物理结构(存储结构和存取方法):
- 索引:有序索引(聚集索引、稠密索引、主索引,唯一索引,单层),散列索引(Hash)
例题:如果Group By列具有高基数度的数据聚合则不适合建立索引视图。
- 数据库的物理设计:空间少、效率高,维护代价低
五个环节:
(1)、数据库的逻辑模式描述:关系模式映射成基本表,视图
(2)、文件的组织和存储设计:按照访问频率来进行分盘存储
存取路径:如何建立索引,对不同的情况建立的索引不同
(3)、数据的分布设计:
不同类型数据的物理分布:
将应用数据(基本表)、索引、日志、数据库备份数据等合理安排在不同介质中。
应用数据的划分与分布:
根据数据的使用特征划分(频繁使用分区和非频繁使用分区)
根据时间、地点划分(时间或地点相同的属于同一分区)
分布式数据库系统( DDBS )中的数据划分(水平划分或垂直划分)
派生属性数据分布(增加派生列或不定义派生属性)
关系模式的去规范化(降低规范化提高查询效率)
水平划分:
将基本表划分为多张具有相同属性、结构完全相同的子表,子表包含的元组是基本表中元组的子集。
垂直划分:
将基本表划分为多张子表,每张子表包含的属性是原基本表的子集。
(4)、确定系统配置:是性能达到最优
(5)、物理模式的评估:时间和空间的评价
第四章 数据库应用系统(DBAS)功能设计与实施
4.1 软件设计
1、软件的体系结构与设计过程
➢软件体系结构:又称软件架构,软件体系结构= {构件,连接件,约束}软件体系结构是软件系统中最本质的东西。良好的体系结构必须是普适、高效和稳定的。
➢软件体系结构有多种风格和类型, 如分层体系结构、模型-视图-控制器( MVC )体系结构、客户端/服务器体系结构等。
2、软件设计过程:
●软件开发由设计、实现、测试三个环节组成,设计又包含概要设计和详细设计。
●概要设计的任务是进行软件总体结构设计,可采用层次结构图建立软件总体结构图.详细设计的任务是进行数据设计、过程设计及人机界面设计.
●设计原则:模块化、信息隐藏抽象与逐步求精。
●软件设计可选用结构化设计方法、面向对象设计方法或面向数据设计方法等。
4.2 DBAS的总体设计
- DBAS的体系结构设计:
将系统从功能、层次/结构、地理分布等角度进行分解,划分为多个子系统,定义各子系统功能;设计系统的全局控制,明确各子系统间的交互和接口关系。
- 软件的体系结构设计:具有一定形式的结构化元素,即构件的集合,包括处理构件、数据构件和连接构件。处理构件负责对数据进行加工,数据构件是被加工的信息,连接构件把体系结构的不同部分组合连接起来。
- 软硬件的选型与配置设计:网络,设备,终端软件环境,软件开发平台和语言、第三方选型平台。
- 业务规则的初步设计:从功能角度有四个层次:表示层、业务逻辑层、数据访问层、数据持久层。(选填考点)
4.3 DBAS的功能概要设计
- 表示层概要设计
- 业务逻辑层概要设计:高内聚,低耦合
- 数据访问层的概要设计(事务):对DBAS的数据处理需求设计用于操作数据库的各类事务。
事务:访问并能更新数据库中的各数据项的程序执行单元。(原子性、一致性、隔离性、持续性)
- 数据持久层的概要设计
4.4 DBAS功能详细设计
- 表示层详细设计:原型迭代法:初步设计、用户界面细节设计、原型设计与改进)
- 业务逻辑层详细设计:处理流程、算法,具体数据等
4.5 应用系统安全架构设计
- 数据安全设计:五个方面:
安全性保护、完整性保护、并发性控制、数据备份与恢复、数据加密传输。
(1)、数据库安全性保护:windows,用户
(2)、数据库完成性保护:正确性、一致性、相容性
(3)、数据库的并发性控制:事务在时间上重叠执行。(封锁技术:排它锁、共享锁、避免死锁:两个及以上的事务之间循环等待)
(4)、数据库的备份与恢复:双机,数据转储、数据加密存储
(5)、数据加密传输:数字安全证书、对称密钥加密、数字签名、数字信封
2、环境的安全设计:漏洞与补丁、病毒、网络环境安全、物理环境安全
3、制度安全措施:权限
4、在删除架构时,如果使用CASCADE选项,则会将该架构中的所有架构对象一起全部删除;如果使用RESTRICT选项,如果被删除的架构中包含架构对象,则拒绝删除此架构。
4.6 DBAS实施
- 创建数据库
- 数据装载
- 编写与调试物理程序
- 数据库系统试运行
第五章 UML与数据库应用系统
5.1 DBAS建模
- 统一建模语言(UML)
- UML的组成:语义(自然语言)+表示法(可视化标准符号)
- 九种图(常用):静态图(用例图、类图、对象图、组件图、部署图);动态图(序列图、协作图、状态图、活动图)。
- UML中对类的分类:边界类(Boundry Class),实体类(Entity Class),控制类(Control Class)。具体特点如下:
实体类是用于对必须存储的信息和相关行为建模的类。实体对象(实体类的实例)用于保存和更新一些现象的有关信息,例如:事件、人员或者一些现实生活中的对象。实体类通常都是永久性的,它们所具有的属性和关系是长期需要的,有时甚至在系统的整个生存期都需要。(最终可能映射成数据库中的表以及字段)
边界类是系统内部与系统外部的业务主角之间进行交互建模的类。边界类依赖于系统外部的环境,比如业务主角的操作习惯、外部的条件的限制等。它或者是系统为业务主角操作提供的一个GUI,或者系统与其他的系统之间进行一个交互的接口,所以当外部的GUI变化时,或者是通信协议有变化时,只需要修改边界类就可以了,不用再去修改控制类和实体类。业务主角通过它来与控制对象交互,实现用例的任务。(负责协调其他类的工作,本身并不完成任何功能)
控制类用于对一个或几个用例所特有的控制行为进行建模,它描述的用例的业务逻辑的实现,控制类的设计与用例实现有着很大的关系。在有些情况下,一个用例可能对应多个控制类对象,或在一个控制类对象中对应着对个用例。它们之间没有固定的对应关系,而是根据具体情况进行分析判断,控制类有效将业务逻辑独立于实体数据和边界控制,专注于处理业务逻辑,控制类会将特有的操作和实体类分离,者有利于实体类的统一化和提高复用性。(位于系统最上层,包含所有窗体、报表等硬件接口以及其他系统的接口)
5、UML进行面向对象系统分析步骤
(1)识别系统用例和角色
(2)进行系统分析并抽象出类
(3)设计系统并设计其中的类及其行为,包括结构设计和详细设计
5.2 DBAS业务流程与需求表达
- 业务流程与活动图(描述系统的活动及流程):
- 系统需求与用例图(功能建模):用例图角色中的关系(关联,包含、扩展)
5.3 DBAS系统内部结构的表达
- 系统结构类图(面向对象:OO):类与类之间的关系:关联、依赖、继承、聚合、组成、实现。在UML中常用顺序图和通讯图来表达。
- 系统结构与顺序图:系统内部对象之间的消息发送与接收)(针对行为进行建模)。
- 系统结构与通信图:顺序图强调时间,通信图强调空间。
5.4 DBAS系统微观设计的表达
- 微观设计与对象图:对象图类的实例,描述某个特定时间中所有对象在系统中的结构。对象图中矩形分为两个框,上框还对象名,下框是属性值
- 微观设计与状态图:基于事件驱动,描述有关事件或对象的状态的转移。
- 微观设计与时间图:基于时间驱动,描述状态的变化,整个方框就代表生命线
5.5 DBAS系统宏观设计的表达
- 宏观设计与包图:表示系统中不同包、命名空间或不同项目之间彼此的关系。也就是逻辑层次与实体层次上的关联性。
- 宏观设计与交互概述图:将活动图和顺序图嫁接在一起的图,旨在于把不同的交互关系在同一张图中表达。(可以省略细节)
- 宏观设计与复合结构图:适用于系统间的沟通接口,架构设计师在初期阶段评估系统复杂度的工具,也是系统维护的参考图。(如:用户、浏览器、数据服务器与web服务器之间的交流)
5.6 DBAS系统实现与部署的表达
- 系统实现与组件图:表示系统的静态实现视图,用来展现一组组件间的组织和依赖,用对源代码,可执行的发布、物理数据库等的系统建模。(组件:逻辑设计中定义的概念和功能在物理架构中的实现。)
- 系统实现与部署图:描述系统中软硬件的物理配置情况与系统体系结构。(在项目集层测试之前)
第六章 数据库与数据库对象
6.1 创建及维护数据库
- SQL server数据库概述:SQL server发展史,SQL server特色,安装SQL server的硬件要求,分类(系统数据库,用户数据库):对数据库Master、msdb 、tempdb、model、resource的清晰认识。
- 数据库的组成:SQL server将数据库映射为一组操作系统文件。
数据文件:.mdf(主数据文件,只有一个,大小不得小于3MB)和.ndf(次要数据文件,有0个或多个,可在一个或多个磁盘存放)
日志文件:.ldf(日志文件)
数据库存储空间的分配:最小单位:数据页(page,简称页),一页是8kb的连续存储空间。页的大小决定了数据库表中一行数据的最大大小。行不能跨页存储。
- 数据库文件组:
主文件组(primary):系统定义,包含主要数据文件和任何没有明确分配的其他文件组,系统表中的所有页都分配在主文件组中。
用户文件组:使用filegroup关键字来定义和修改。
➢注意:
-
- 日志文件不在文件组中,日志空间与数据空间分开管理。
- 一个文件不可以是多个文件组成员。
- 若文件组包含多个文件,则在所有文件被填满后才会自动循环增长。
- 文件加入数据库中后,不能移动到其他文件组。
- 只能指定一个文件组为默认文件组。
- 数据库文件的属性:
定义:文件名及其位置(逻辑文件名和物理文件名)。初始大小(不能小于modle数据库主要数据文件的大小)。
增长方式:自动增长(默认)。
大小限制:默认无限制。
- 创建数据库:T_SQL创建,SQL server management studio可视化创建。
代码及规则:
PRIMARY :指定为主要数据库文件,没有指定默认第一个文件是主要数据文件。
LOG ON : 自动创建日志文件,大小为数据文件总和25%或512KB中大的。
NAME:逻辑文件名,唯一。
FILENAME :物理文件名。
SIZE :初始大小, .mdf大小不小于model,.ndf默认为1MB。
注:MAXSIZE :最大大小,未指定则文件自动增长到磁盘满
UNLIMITED : 增长无限制,一般指定为日志文件2TB数据文件16TB.
FIL EGROWTH :指定文件自动增量,不超过MAXSIZF默认数据文件1MB,日志文件为当前文件的10%。
FILEGROUP :文件组逻辑名,唯- ,不能是系统名,
DEFAULE : 指定该文件组为默认文件组。
- 修改数据库
扩大空间:扩大文件大小,新增文件。
空间减小:释放未使用的空间。自动收回(AUTO_SHRINK,默认为FALSE),手动收回(按比例收缩数据库的大小)。
添加和删除数据库文件:ALTER关键词(add,remove和modify),DBCC SHRINKFILE关键词。
- 分离和附加数据库
分离:可视化环境,使用sp_detach_db系统存储过程来实现。
附加:可视化环境,使用CREATE DATABASE……FOR ATTACH |ATTACH_REBUILD_LOG
6.2 架构
架构(Schema,也称模式),是数据库下的一个逻辑命名空间,是数据库对象的容器,一个数据库包含一个或多个构架,同个数据库内架构名唯一。
定义构架
CREATE SCHEMA [<构架名>]
AUTHORIZATION<用户名>
删除构架
DROP SCHEMA [<构架名>]
6.3 分区表
- 基本概念
分区表是将表中的数据按水平分割成不同子集,并将数据子集存储在数据库一个或多个文件组中。物理上将大表分成几个小表,逻辑上还是一个大表。 合理使用分区能提高数据库性能。
创建分区表的决定因素:当前数据量的大小和将来数据量的大小,还有表中数据的操作特点。
- 创建分区表
三个步骤:
( 1 )创建分区函数:告诉DBMS以什么方式进行分区
CREATE PARTITION FUNCTION
( 2 )创建分区方案:作用是将分区函数生成的分区映射到文件组中
CREATE PARTITION SCHEME
( 3 )使用分区创建表
语法:CREATE PARTITION FUNCTION 表名(数据类型)
AS RANGE LEFT FOR VALUES(x1,x2,x3)
存储情况见下表:
6.4 索引
-
-
- 创建索引:INDEX(UNIQUE,CULSTERED,NONCLUSTERED,[FILEFACTOR])
- 删除索引:DROP INDEX
-
6.5 索引视图
- 基本概念
标准视图也称虚拟表,返回结果集与基本表一致。标准视图的结果集不永久存放;
建立唯一聚集索引的视图 ,称为索引视图,也称为物化视图。建立索引后,视图的结果集存放在数据库中。
对基本表的修改会反映到索引视图存储的数据中。
- 适合建立视图的情况
很少更新基础数据,索引视图效果更好。
若基础数据以批处理形式定期更新,且主要是作为只读数据进行处理,可考虑在更新前删除所有索引视图,然后重建,提高更新性能。
视图提高性能:大量行的链接和聚合,许多查询执行的连接和聚合操作。
不会提高反而有影响:大量OLTP系统,大量更新,没有聚合和连接的查询,group by具有高基数度的数据聚合。
- 定义索引视图
➢创建聚簇索引前视图必须符合的条件:
定义索引视图时,视图只能引用基本表)不能是其他视图。
引用的所以基本表和视图同一数据库,所有者相同。
必须用SCHEMABINDING选项建立视图。
视图中表达式引用的所有函数必须确定。
对视图建立的第一个索引是唯一聚簇索引,之后在创建其他
CREATE VIEW;WITH SCHEMABINDING; CREATE
UNIQUE CLUSTERED INDEX ...
第七章 高级数据库查询
7.1 一般数据查询功能扩展
- select语句
select 列名 from 表名……
- 使用top限制结果集
Top n[percent][with ties]
-
-
-
- Top n :前n行;
- Top n [percent]:前n%行;
- [with ties]:包括最后一行取值并列的结果。(select top 3 with ties:前三行包含并列。)
- CASE函数:显示不同类型的数据。
-
-
语法::
CASE
WHEN布尔表达式1 then结果表达式1
WHEN布尔表达式2 then结果表达式2
WHEN布尔表达式n then结果表达式n
[ELSE结果表达式n+ 1]
END
-
-
- 将查询结果保存到新表
-
语法:
Select 查询列表序列 into < 新表名>
From 数据源……
注意:表名前加#为局部临时表,##为全局临时表,只有表名为永久表。
7.2 查询结果的并、交、差运算
- 并(union)
语法:
SELECT语句1
UNION [ALL]
SELECT语句2
UNION [ALL]……
使用UNION注意:
➢要进行合并的查询,SELECT中列数必须相同,语义相同。
➢每个相对应列的数据类型隐式兼容,如char(20)与varchar(40)。
➢合并后结果采用第一个SELECT 语句的列标题。
➢若需排序,则GROUP BY语句写在最后一个SELECT之后,且排序的一句是第一个SELECT中的列名。
- 交运算
返回同时在两个集合中出现的记录(intersect)。
语法:
SELECT语句1
INTERSECT
SELECT语句2
INTERSECT……
SELECT语句n
- 差运算
➢差运算:返回第个集合中有而第二
个集合中没有的的记录。
语法:
SELECT语句1
EXCEPT
SELECT语句2
EXCEPT.
SELECT语句n
7.3 相关子查询
子查询是一条包含在另一条SELECT语句里的SELECT语句。外层的SELECT语句叫外层查询,内层的SELECT语句叫内层查询(或子查询)。子查询总是写在圆括号中。
具体语法略。
第四节 其他的查询功能
- 开窗函数
➢在SQL Server中,一组行被称为个窗口1。
➢与聚合函数一样,开窗函数也是对行集组进行聚合计算,但是它不像普通聚合函数那样每组只返回一个值,开窗函数可以为每组返回多个值,因为开离窗函数所执行聚合计算的行集组是窗口。
格式:
函数名(列)OVER( 选项)OVER 关键字:
表示把函数当成开窗函数而不是聚合函数;
SQL 标准允许将所有聚合函数用做开窗函数使用OVER 关键字来区分这两种用法
其他排名函数:
RANK():非连续 排序
DENSE RANK():排名是连续整数
NTILE():
将有序分区中的行划分到指定数目的组中,编从1开始,函数返回此行所属的组的编号
ROW_NUMBER():
返回结果集中每个分区内的序列号,每个分区第一行从1开始。
注:①#temp是局部临时表,只有在当前连接中的用户(即创建表的用户)才可以查询得到。
第八章 数据库后台编程技术
8.1 存储过程
- 基本概念
使用T - SQL语言编写代码时,有两种方式存储和执行代码:
( 1 )在客户端存储代码,通过客户端程序或SQL命令向DBMS发出操作请求,由DBMS将结果返回给用户程序。(弊端:若执行的命令很多,就要反复的发送,进而引起网络堵塞。)
( 2 )以子程序的形式将程序模块存储在数据库中,供有权限的用户通过调用反复执行。
存储过程:即存储在数据库中供所有用户程序调用的子程序。
存储过程分为三类:系统存储过程,用户自定义存储过程(最常用),扩展存储过程。
用户自定义存储过程是由用户创建并能完成某特定功能(如查询用户所需数据信息)的存储过程。
扩展存储过程是SQL Server可以动态装载并执行的动态链接库(DLL)。扩展存储过程使您得以使用像C这样的编程语言创建自己的外部例程。对用户来说,扩展存储过程与普通存储过程一样,执行方法也相同。
存储过程的优点:
-
- 极高的执行效率。(批处理的方式)
- 增强代码的重用性和共享性。(复用性)
- 使用存储过程可以减少网络流量。(理解架构:B/S,C/S)
- 使用存储过程保证安全性。
- 在大型数据库中, 应用程序访问数据库的最主要方式就是存储过程。
- 存储过程可以在系统启动时自动执行。
- 创建存储过程
存储过程定义包含两个主要组成部分:
①过程名称及其参数的说明;
②过程的主体(其中包含执行过程操作的Transact- SQL语句)
创建存储过程的语法格式如下:
存储过程是由CREATE PROCEDURE语句来创建的,其语法如下。
CREATE { PROC | PROCEDURE } [ schema name.] procedure name [ ; number]
[ { @parameter [ type schema_ name. ] data_ type }
[VARYING][=default][[OUT[PUT]][,…n]
[ WITH <procedure_ option> [ ...n ]
[ FOR REPLICATION]
AS { <sq1_ statement> [;][ ..n ] | <method_ specifier> } [; ]
<procedure_ option> : :=
[ ENCRYPTION]
[ RECOMPILE]
[ EXECUTE AS_ Clause ]
<sql_ statement> : := { [ BEGIN ] statements [ END ] }
<method_ specifier>: := EXTERNAL NAME assembly_ name .class_name.method_name
(!!!说明:“[ ]”这个符号表示里面的内容可以存在,也可以不存在)
其中,对涉及的参数说明如下:
schema_name:设定存储过程所属架构的名称。
procedure_ name: 存储过程的名称。它是一个合法的标识符,在架构中是唯一的,存储过程名一般不能 使用前缀“sp_”,此前缀由系统存储过程使用。如果过程名以并号“井#”开头,则表示创建的过程将是局部临时过程.这种过程名的长度不超过116个字符(含#);如果以双井号“# #”开头,则表示是全局临时过程.这种过程名的长度不超过128个字符(含井#)。
Number:用于对同名的存储过程进行分组的整数。例如.myPro;1.myPro;2等。
@ parameter:存储过程带的参数,data_ type 为参数所属架构的数据类型。参数可以
是一个或者多个,最多为2100个参数。在定义时参数可以设置默认值,而对于没有设置
默认值的参数,在调用时必须为其提供值。在默认情况下.参数只能代表常量表达式,而
不能用于代表表名、列名或其他数据库对象的名称。如果指定了FOR REPLICATION,
则无法声明参数。
OUTPUT(或OUT):如果指定了OUTPUT(或OUT),则表示该参数为输出参数。输出参数用于将存储过程处理后的某些结果返回给调用它的语句。游标(cursor)数据类型参数必须指定OUTPUT,同时还必须指定关键字VARYING。一般情况下,text、ntext和image类型参数不能用作OUTPUT参数。
VARYING:指定输出参数支持的结果集。仅适用于游标类型参数。
Default:设定参数的默认值。如果定义了default 值,则在调用存储过程时无须为此参数指定值,否则必须指定参数值才能调用。默认值必须是常量或NULL.
RECOMPILE:该选项用于指示sQL Server不要将存储过程的执行规划保存在高速缓冲存储器中.因为该过程在执行时要重新编译,然后才运行。如果指定了FOR REPLICATION,则不能使用此选项。
ENCRYPTION:指示SQL Server 对CREATE PROCEDURE语句的原始文本进行加密.加密后的代码的输出在SQLServer2008的任何目录视图中都不能直接显示。
EXECUTE AS:该子句用于指定在其中执行存储过程的安全上下文。
FOR REPLICATION:如果选择该选项,则表示创建的存储过程只能在复制过程中执行。该类过程不能声明参数,忽略RECOMPILE选项。
<sql statement>: 表示包含在过程中的一个或多个SQL语句。
<method_ specifier>: CLR存储过程的标识。assembly_ name. class name. method name
用于指定.NET Framework 程序集的方法.以便CLR存储过程引用。
- 执行存储过程
调用一个存储过程,一般是用EXECUTE(或EXEC)语句来完成。但也可以直接将过程名当作一条命令来执行。例如,对于上面定义的过程myProl,以下三种执行方式都是有效且等价的。
myProl;--这种没有EXECUTE或EXEC的执行方式必须位于批处理中的第一条语句
EXEC myProl;--这种格式通常用于嵌人到其他语言中
EXECUTE myProl; - -这种格式通常用于嵌人到其他语言中
如果存储过程带有参数,则其执行和调用方法将变得复杂一些。
- 删除存储过程
当一个存储过程不再使用时,就应该将它从数据库中删除。删除个 存储过程 的SQL语句是DROP PROCEDURE。其语法如下。
DROP { PROC | PROCEDURE } { [ schema name. ] procedure } [ ..n ]
从该语法中可以看出,一条DROP PROCEDURE语句可以同时删除一个或多个存储过程。例如,同时删除过程myProl, myPro2,myPro3,可使用下列语句来完成。
DROP PROCEDURE myProl, myPro2, myPro3;
当然,也可以在SSMS中删除一个存储过程。 方法是:在对象资源管理器中右击要删除的存储过程所对应的节点,然后在弹出的菜单中选择“删除”命令,最后根据提示删除存储过程。(注意,当一个存储过程被删除以后,所有用户对其拥有的操作权限也将全部被删除。)
8.2 用户自定义函数
用户定义函数:类似于编程语言中的函数,其结构与存储过程类似,但函数必须有一个RETURN子句,用于返回函数值。
两类用户定义函数:标量函数和表值函数。前者返回单个数据值,表值函数返回一个表。
- 创建和调用标量函数
定义标量函数:
CREATE FUCTION......RETURNS return_ data_type
AS
BEGIN
[函数体]
RETURN scalar_expression
END
调用标量函数:
注意:调用时需要提供函数拥有者名和函数名,可以在任何出现表达式的SQL语句中调用类型一致的标量函数。
- 创建和调用内嵌表值函数
创建内联表值函数:
CREATE FUCTION
RETURNS TABLE
AS
RETURN [Qselect_ stmtD]
参数说明: select stmt是定义内联表值函数返回值的单个SELECT语句;表值函数没有返回变量,没有函数体,只返回一个查询结果。
调用内联表值函数:
使用内联表值函数与视图类似,其作用相当于带参数的视图。
- 创建和调用多语句表值函数
CREATE FUCTION
RETURNS @return_ variable
TABLE< table _type_ definition定义返回的表结构>
AS
BEGIN
[函数体:SQL语句]
RETURN
END
调用建多语句表值函数:在SELECT的FROM子句中使用。
- 删除用户自定义函数
DROP FUNCTION 函数名 ---当前数据库中操作
8.3 触发器
- 基本概念
触发器:特殊存储过程,在对表中的数据进行UPDATE、INSERT、 DELETE操作时自动触发执行,常用于保证业务规则和数据完整性,增强数据完整性约束能力。
SQL Server 2008支持三种类型的触发器:DML(数据操纵语言)、DDL(数据定义语言)、登录触发器。
适用场合:
-
- 完成比CHECK (只能实现同一表列之间取值约束)约束更复杂的数据约束。
- 保证数据库性能而维护的非规范化数据。
- 可实现复杂的商业规则。
- 评估数据修改前后的表状态,并采取对策。
- 创建触发器
CREATE TRIGGER trigger_ name ON
{ table | view }
WITH ENCRYPTION]
{ FOR | AFTER| INSTEAD OF }
{[ INSERT ][,][ UPDATE][,]
[ DELETE ] }
AS
sql_ statement..n]
参数说明:
FOR或AFTER:后触发型,操作、约束检查完成后触发。
INSTEAD OF:前触发型,数据操作语句最多定义一个触发器。执行触发器而非引发语句。若满足完整性约束则需要重新执行这些数据操作。
注:在触发器里面,有两种逻辑表:insertd表(保存在插入之前的数据)和deleted表(存放删除之后的数据)。
删除触发器:
DROP TRIGGER 触发器名
8.4 游标
游标:实现对SELECT结果集的逐行处理。
- 游标的组成
游标结果集( SELECT返回结果集)与游标当前行指针(指向结果集中某行)
特点:定位特定行;从当前位置检索一行或多行;支持当前行数据修改;对修改结果提供不同级别的可见性支持。
- 使用游标
(1) 声明游标
ISO标准语法:DECLARE cursor name[1] CURSOR FOR
select_ statement[2]
参数说明:
[1]INSENSTITIVE:创建临时副本,对临时表操作,否则对基本表:SCROLL:范围,否则只支持NEXT ;
[2]READ ONLY:禁止更新UPDATE更新列指定列或所有。
(2)打开游标
OPEN cursor name
(3)提取数据
FETCH [1]FROM cursor name [INTO @
variable_ namef...n]]
(4)关闭游标
CLOSE cursor. Name ------(可以再次打开。)
(5)释放游标
DEALLOCATE cursor name ------(释放分配给游标的所有资源。)
附:@@ FETCH_STATUS是一个系统函数,用于判断游标数据提取状态,它返回针对任何打开的游标发出的最后一个FETCH语句的状态。 该函数返回下表中提到的整数值(参考: @@ FETCH_STATUS(Transact-SQL) ):
@@ FETCH_STATUS==0时表示当前游标指针位于结果集的第一行。
第九章 安全管理
9.1 安全控制概述
数据库安全性不同于数据的完整性。
安全性:保护数据以防止不合法用户故意造成破坏。(确保用户被允许做其想做的事情。)
完整性:保护数据以防止合法用户无意中造成的破坏。(确保用户做的事情是正确的。)
- 数据库安全控制的目标
保护数据免受意外或故意的丢失、破坏或滥用。
- 数据库安全的威胁
安全计划需要考虑:可用性损失,机密性数据损失私密性数据损失,偷窃和诈,意外的损害。
- 安全控制模型
包括四阶段:身份验证(用户)、操作权限控制(数据库应用程序与数据库管理系统)、文件操作控制(操作系统)、加密存储与冗余(数据库)。
- 授权和认证
认证是一种鉴定用户身份的机制。授权是将合法访问数据库或数据库对象的权限授予用户的过程。包括认证用户对对象的访问请求。DBMS通常采用自主存取控制和强制存储控制两种方案来解决安全控制问题。
9.2 存取控制
1、自主存取控制
又称自主安全模式 ,通过SQL的GRANT,REVOKE,DENY语句来实现。
权限种类 :维护权限与操作权限 (语句权限与对象权限)
用户分类:系统管理员( sa)、数据库对象拥有者、普通用户。
2、强制存取控制
➢为避免自主存取模式下数据的“无意泄露”,采取强制存取控制。
➢DBMS将全部实体分为主体和客体两大类。
主体:系统活动实体,实际用户和进程。
客体:被动实体,受主体操纵,包括文件、基本表、视图。
➢对于主体和客体,DBMS为它们的每个实例指派-个敏感度标记( Label )。
➢敏感度标记: DBMS指派,主体为许可证级别,客体为密级。分绝密、秘密、可信和公开等若干级别。
9.3 审计跟踪
➢审计跟踪实质上是一种特殊的文件或数据库。系统自动记录用户对常规数据的所有操作。
➢审计跟踪对数据安全有辅助作用。
9.4 统计数据库的安全性
➢统计数据库提供基于各种不同标准的统计信息或汇总数据。
➢统计数据库安全系统用于控制对统计数据库的访问。
➢统计数据库允许用户查询聚合类型的信息,如总和、平均等,但不允许查询个人信息。
9.5 SQL Server的安全控制
- 身份验证模式
Windows身份验证模式:SQL Server通过Windows操作系统获得用户信息,验证登录名和密码,一般推荐。
混合身份验证模式:Windows授权用户和SQL授权用户可以登录。
- 登录帐户
两类:SQL Server自身负责身份验证的账户,内置系统账户与用户自己创建。登录到SQL Server的Windows网络账户,可以是组账户或用户账户。
操作语句:
建立登录账户:
CREATE LOGIN login_ name
----GREATE LOGIN login_ name WITH PASSWORD=”******(密码)”
修改登录帐户属性:
ALTER LOGIN login_ name WITH PASSWORD=”******(密码)” //修改密码
ALTER LOGIN login_ name WITH NAME=”******(账户名)” //修改账户
删除登录帐户:
DROP LOGIN login_ name
- 数据库用户
➢用户有了登录帐户,只能连接到SQL服务器,并不具有访问数据库的权限。
➢映射:让登录账户成为数据库用户的操作成为映射。一个登录账户可以映射为多个数据库用户。默认情况下,新建数据库只有一个用户:dbo ,数据库用户的拥有者。
操作:
➢建立数据库用户:
CREATE USER user name[|FOR|FROM]
LOGIN login. name
➢Guest用户,特殊数据库用户,匿名访问, 有映射到登录账户的时候使用
GRANT CONNECT TO guest
REVOKE CONNECT TO guest
➢删除数据库用户
DROP USER user_ name
- 权限管理
➢登录账户成为合法用户后没有任何操作权限,就需要为用户授予数据库数据及其对象的操作权限。
- 对象级别的权限(6种):SELECT、INSERT、 UPDATE、 DELETE、REFERENCES、EXECUTE
授权语句:
GRANT对象权限ON对象TO(主体:数据库用户名或角色) WITH GRANT OPTION]
拒绝权限:
DENY对象权限ON对象TO(主体:数据库用户名或角色) [CASCADE][AS主体]
收权语句
REVOKE对象权限ON对象TO ( 主体:数据库用户名或角色) [CASCADE][AS角色]
( 2 ) 语句级别的权限
CREATE
DATABASEIPROCEDURE|T ABLE|VIEWIFUNCTION BACKUP DATABASE | LOG
- 角色
➢定义: 一组具有相同权限的用户就是角色。
➢SQL Server 2008中,角色分为预定义的系统角色和用户角色两种。
系统角色又分为固定服务器角色(服务器级角色)和固定数据库角色(数据库级角色)
用户角色均是数据库级角色。
➢操作:
创建用户定义的角色:
CREATE ROLE
实例: CREATE ROLE MathDept [AUTHORIZATION Software]
删除用户定义角色
DROP ROLE
实例:DROP ROLE MathDept
9.6 Oracle的安全管理
Oracle的安全机制分为数据库级的安全控制、表级、列级、行级的安全控制。
Oracle系统通常设置两级安全管理员:
全局级:负责管理、协调,维护全局数据一致性和安全性 ;
场地级:负责本结点数据库安全性,用户管理、系统特权与角色管理。
- 用户与资源管理
按权限大小划分为DBA用户和普通用户。
DBA用户:由DBMS自动创建, sys与system用户,拥有全部系统特权。
普通用户:由DBA用户或有相应特权的用创建,并授予系统特权。
- 权限管理
(1)系统特权
三种默认特权:
Connect :不能建立任何对象,可以查询数据字典及访问数据库对象。
Recource : 可建立数据库对象(表、视图索.... )
DBA : 拥有预定义的全部权限。
(2)对象特权
用于维护表级、行级、列级数据的安全性。
注:Oracle中有个表空间的概念!!(表空间:在oracle中,表空间是Oracle数据对象和数据存储的容器,是一个逻辑概念,若干操作系统文件就可以组成一个表空间。表空间统一管理空间中的数据文件(通常,文件的后缀名是dbf),一个数据文件只能属于一个表空间;而一个数据库空间由若干个表空间组成。表空间是ORACLE数据库恢复的最小单位。)
第十章 数据库运行维护与优化
10.1 数据库运行维护基本工作
DBAS进入运行维护阶段的主要任务:保证数据库系统安全、可靠且高效率地运行。
数据库的运行除了DBMS与数据库外,还需要各种系统部件协同工作。
首先必须有各种相应的应用程序,其次各应用程序与DBMS都需要在操作系统(OS)支持下工作。
维护工作包括:数据库转储与恢复、数据库安全性、完整性控制检测并改善数据库性能、数据库的重组(不修改原有结构)和重构(部分修改模式和内模式)。
10.2 运行状态监控与分析
数据库的监控分析:指管理员借助工具监测DBMS的运行情况,掌握系统当前或以往的负荷、配置、应用等信息,并分析监测数据的性能参数和环境信息,评估DBMS的整体运行状态。
根据监控分析实现不同,分为:数据库系统建立的自动监控机制由DBMS自动监测数据库的运行情况。管理员手动实施的监控机制。
10.3 数据库存储空间管理
空间使用情况变化带来的问题:降低数据库系统服务性能、空间溢出导致灾难停机事故。
数据的存储结构分为:逻辑存储结构、物理存储结构
10.4 数据库性能优化
数据库性能优化是DBAS系统上线后最常见的运行维护任务之一。
进行数据库性能优化时,首先要确定优化目标,一般从数据库运行环境、参数调整、模式调整、数据库存储优化、查询优化几个方面考虑。
- 数据库运行环境与参数调整
一般来说 ,可以从外部环境(CPU,网络带宽等)、调整内存分配、调整磁盘I/O、调整资源竞争等几个方面着手改变数据库参数,提高其性能。
注:CPU使用情况判断依据:对于台数据库服务器,如业务空闲时使用率超过90%。说明服务器缺乏CPU资源,如高峰时CPU使用率仍然低,说明服务器CPU资源充足。
- 模式调整与优化
数据库的规范化过程: 高效率利用存储空间,减少数据的冗余,减少数据的不一致性。
问题:规范化关系解决了数据维护的异常, 并使数据冗余最小化,但会导致数据处理性能下降。(可以使用反规范化来处理,但是会破坏完整性。分割表:分割所有表的结构,水平分割,垂直分割。)
- 存储优化
3.1 禁用索引
对于使用索引的表,插入记录时,MySQL会对插入的记录建立索引。如果插入大量数据,建立索引会降低插入数据速度。为了解决这个问题,可以在批量插入数据之前禁用索引,数据插入完成后再开启索引。
禁用索引的语句: ALTER TABLE table_name DISABLE KEYS 开启索引语句: ALTER TABLE table_name ENABLE KEYS
MyISAM对于空表批量插入数据,则不需要进行操作,因为MyISAM引擎的表是在导入数据后才建立索引。
3.2 禁用唯一性检查
唯一性校验会降低插入记录的速度,可以在插入记录之前禁用唯一性检查,插入数据完成后再开启。
禁用唯一性检查的语句:SET UNIQUE_CHECKS = 0; 开启唯一性检查的语句:SET UNIQUE_CHECKS = 1;
3.3 禁用外键检查
插入数据之前执行禁止对外键的检查,数据插入完成后再恢复,可以提供插入速度。
禁用:SET foreign_key_checks = 0; 开启:SET foreign_key_checks = 1;
3.4批量插入数据
插入数据时,可以使用一条INSERT语句插入一条数据,也可以插入多条数据。
3.5禁止自动提交
插入数据之前执行禁止事务的自动提交,数据插入完成后再恢复,可以提高插入速度。
禁用:SET autocommit = 0; 开启:SET autocommit = 1;
4、查询优化
效率低下的SQL语句常常是系统效率不佳的主要原因。常用优化方法如下:
( 1 )合理使用索引
权衡:索引提高查询效率,索引增加系统开销
( 2 )避免或简化排序
ORDER BY和GROUP BY语句的执行涉及排序,磁盘排序开销很大,应利用索引自动以适当的次序产生输出。
( 3 )消除对大型表数据的顺序存取
嵌套查询中,对表的顺序存取严重影响查询效率。
优化方法:对连接列进行索引,或使用并集来避免顺序存取。
( 4 )避免复杂正则表达式
原因:消耗较多CPU资源进行字符串匹配.
( 5 )使用临时表加速查询
将表的一个子集进行排序并创建临时表。
(6)用排序来取代非顺序磁盘存取
原因: 非顺序磁盘存取最慢。使用以数据库排序功能为基础的SQL替代非顺序存取
(7)不充分的连接条件
原因: 左(右)外连接包含与NULL数据匹配,相比内连接,代价可能很高
(8)存储过程
尽量使用自带返回参数,而非自定义返回参数,减少不必要参数,避免数据冗余。
( 9 )不要随意使用游标
原因:占用较多系统资源。尤其是大规模并发情况下,很容易使得系统资源耗尽而崩溃。
(10)事务处理
一旦将多个处理放入事务,会降低系统处理速度。将频繁操作的多个可分割的处理过程放入多个存储过程中,这样就大大提高系统响应速度。
5、SQL Server性能工具
(1)SQL Server Profiler
用来监视SQL Server事件的多用途监控T具(性能、存储过程、T-SQL语句运行等监控)。结果存储在一个跟踪文件中,可通过分析文件诊断问题。
(2)数据库弓|擎优化顾问
测试数据库工作负荷( -组在数据库中执行的T-SOL语句), 给出优化建议。
注:性能工具有很多。
第十一章 故障管理与事务
11.1 故障管理概述
- 故障类型及其解决方案
➢DBMS中常见的4类故障:事务内部故障、系统故障、介质故障、计算机病毒故障
事务内部故障:事务故障导致数据不一致,分为预期的(大部分)和非预期的。
( 1 )预期的事务内部故障
可通过事务过程本身发现的。解决办法:事务回滚
( 2 )非预期的事务内部故障
不能由事务程序处理的故障,如运算溢出等。事务故障的恢复由系统自动完成。
➢系统故障:又称软故障,运行期间,由于硬件故障、数据库软件及OS漏洞、突然断电等故障,导致数据不一致。
解决办法:重启后,撤销(UNDO)所有未提交的事务;重做( REDO )所有已提交的事务;
>介质故障:又称硬故障,运行期间由于磁头碰撞、磁盘损坏、强磁干扰、天灾人祸等,使得数据丢失的一类故障。导致物理存储设计损坏,数据文件及数据全部丢失,破坏性最大。(软件容错,硬件容错)
2、数据库恢复技术概述
无论哪种故障,恢复的基本原理是冗余。
数据库恢复:把数据库从错误状态恢复到某一已知的正确状态。
在DBMS中,数据库恢复子系统占10%以上。
恢复机制涉及两个问题:如何建立冗余数据; 如何利用这些冗余数据实施数据库恢复。
11.2 数据转储
数据转储即数据备份:指DBA或DBMS定期复制数据库,并将其存放到其他介质的过程。
这些保存的副本被称为后援副本或后备副本。
1、静态转储和动态转储
静态转储: 期间系统不能运行其他事务,不允许任何存取、修改活动。静态转储保证数据的一致性,但降低了数据库的可用性。转储和事务是互斥的。
动态转储:即允许转储和事务并发执行。动态转储不能保证转储数据的一致性。
动态转储+日志文件(记录转储期间各事务对数据库的修改活动记录) :既保证数据一致性又提高了数据库的可用性。
2、数据转储机制
完全转储:对数据库中所有数据进行转储。占据较多时间和空间,但恢复时间短。
增量转储:只复制上次转储后发生变化的文件或数据块。所需时间及空间短,但只能和完全转储配合才能对数据库进行恢复。
差量转储:对最近次数据库完全转储以来发生的数据变化进行转储。
3、多种转储方法结合使用
仅使用完全转储:占据时间和空间多,代价大
完全转储+增量转储:恢复时间较长。
完全转储+差量转储:恢复时间短。
11.3 日志文件
- 日志文件的概念
DBMS运行中,将所有事务的修改操作登记到日志文件。
作用:事务故障恢复和系统故障恢复必须使用日志文件。
在动态转储方式中必须建立日志文件。在静态转储方式中也可使用日志文件。
- 日志文件的格式与内容
两种格式:以记录为单位的日志文件,以数据块为单位的日志文件。
3、登记日志文件的原则
登记的次序严格按并行事务执行的时间次序。保证事务对数据库的操作的可再现性和正确性。必须先写日志文件,后写数据库。先后顺序导致必然性。
4、检查点
检查点的作用:最大限度地减少数据完全恢复时必须执行的日志部分。
11.4 硬件容错方案
1、概述
由于数据库运行的硬件故障、机房电力故障、机房自然灾害等,要求从硬件级别对DBMS进行保护。从DBMS运行所需要的各种环境出发,分析支撑数据库系统运行的环节。
相关度最紧密的技术:数据库存储保护技术,服务器容错技术及数据库镜像与容灾技术。
2、磁盘保护技术
RAID:廉价冗余磁盘阵列,多块磁盘构成的一个整体。依靠冗余技术:镜像冗余,校验冗余(XOR操作)。
3、服务器容错技术
➢引入服务器容错原因
解决服务器硬件异常问题。
➢服务器容错技术简介采用两台相同的服务器, 共享存储设备。(双机热备,Active- Standby ),两台服务器之间会有私有网络进行心跳检测。
➢其他服务器容错技术
硬件级别:自行设计制造的专用软硬件架构。
软件级别:专门]的服务器级别容错技术,如Oracle提供了RAC架构。
4、数据库镜像与数据库容灾
➢引入数据库镜像原因
注:前面几种恢复技术都必须及时正确地转储数据库。
数据库镜像简介:是一种用于提高数据库可用性的解决方案,它根据DBA的要求,自动把整个数据库或关键数据复制到另一个磁盘上。(双机互备援模式,双机热备份模式)
5、SQL Server数据库镜像简介
SQL Server数据库镜像是将数据库事务处理从一个SQL Server数据库移到不同的SQL Server数据库。
镜像的复制是一个备用的复制,不能直接访问,只用来进行错误恢复。“见证服务器”使镜像服务器自动识别。两种运行模式: 高安全性模式及运行模式。
SQL Server数据库镜像提供三种实现方式:高可用性,高保护性,高性能。
高可用性。两台服务器同步事务写入,支持自动错误恢复。
高保护性。两台服务器同步事务写入,手工错误恢复。
高性能。两台服务器写入不同步,手工错误恢复。
第十二章备份与恢复数据库
12.1 数据库备份与恢复
1、备份数据库
数据备份的原因:防止数据丢失(存储介质故障、用户的操作错误、服务器故障、病毒侵害、自然灾害),一旦出现问题,能够根据备份进行恢复。
备份是数据转移的一种方式。(将数据库从一台服务器复制到另一台服务器、设置数据库镜像、文件归档和灾难恢复)
2、恢复数据库
恢复数据库指数据库系统出现故障时,利用备份副本将数据库恢复到某个正确、一致的状态的过程。两种类型:介质故障恢复非介质故障恢复
12.2 SQL Server的备份与恢复机制
1、恢复模式
恢复模式是一个数据库属性,它用于控制数据库备份和还原操作的基本行为。
恢复模式决定备份类型和还原方案。备份类型决定数据库备份的内容。
三种恢复模式:简单恢复模式、完整恢复模式、大容量日志恢复模式。
2、备份内容及时间
备份内容:用户数据库、系统数据库
备份时间:
系统数据库:修改之后进行备份。
用户数据库:周期性备份。
进行下列操作后,立刻进行备份:创建数据库之后,或批量加载数据之后。创建索引之后。执行清理事务日志的操作之后。执行大容量数据操作之后。
3、SQL Server的备份机制
(1)备份设备
SQL Server将备份数据库的场所称为备份设备。支持将数据库备份到磁带或磁盘上。
备份设备类型:永久备份设备: 在备份之前需要先建立。临时备份设备: 不需要预先建立,在备份时将委、据库直接备份到物理文件上。
(2)备份类型
1 )数据库备份:完整数据库备份、差异数据库备份
2 )文件备份:文件备份、差异文件备份
3 )事务日志备份
(3)实现备份
使用SQL Server管理平台(可视化)、使用T- SQL语句
4、SQL Server的恢复机制
SQL Server支持在以下级别恢复(还原)数据:数据库(数据库完整还原)、数据文件(文件还原)
数据库还原的顺序:恢复最近的完全备份→恢复最近的差异备份(如有) →恢复自差异备份之后的所有日志备份(按备份的先后顺序) →恢复数据库。
12.3 Oracle的备份与恢复机制
1、Oracle数据库逻辑备份与恢复
Oracle数据库常见的故障类型:
内部恢复机制:SQL语句错误、进程失效、实例失效、自动处理、网络 失效。
利用备份数据恢复:用户错误、介质失效。
2、Oracle数据库物理备份与恢复
物理备份:指对数据物理文件所实施的备份。
物理备份管理方式:用户管理的备份、Recover Manager(RMAN)备份、第三方备份软件。
第十三章 大规模数据架构
13.1 分布式数据库
1、分布式数据库系统概述
分布式数据库系统与分布式数据库的区别:
分布式数据库系统
数据分布存储于若干场地,并且每个场地由独立于其它场地的DBMS进行数据管理。物理上分散、逻辑上集中的数据库系统。
分布式数据库
分布式数据库系统中各场地上数据库的逻辑集合。
2、分布式数据库目标与数据分布策略
12个目标:
本地自治、非集中式管理、高可用性。( 最基本特征)
位置独立性、数据分片独立性、数据复制独立性。(分布透明性)
分布式查询、事务管理。( 复杂性)
硬件独立性、操作系统独立性、网络独立性、
数据库管理系统独立性。
数据分布策略:从数据分片和数据分配考虑
数据分片(对关系操作):水平分片,垂直分片,导出分片,混合分片。
数据分配(对分片结果操作):将分片产生的片断分配存储在各个场地上。解
决数据分配的方法:集中式,分割式,全复制式,混合式。
- 分布式系统的体系结构
分布式数据管理系统结构图:
GDBMS:全局数据管理
GDD:全局数据字典
LDBMS:局部数据库管理
CM:通信管理
- 分布式数据库的相关技术
分布式查询:用户与分布式数库系统的接口。分布式查询优化需考虑:
①操作执行的顺序。
②操作的执行算法(连接操作和并操作)。
③不同场地间的数据流动的顺序。
分布式事务管理
主要包括:①恢复控制:基于两阶段的提交协议。②并发控制:基于封锁协议。
- 分布式系统的共享方式
a)不共享结构。大多数集群采用这种结构,节点间通过以太网等局域网方式简单连接。最常见的例子就是Hadoop。这种结构最大的优势就是扩容的成本非常低,只需要简单增加机器并做网络连接即可,集群的可用性也非常高。缺点也非常明显,所谓的不共享不代表不交换数据,而一旦需要交换数据,计算速度必然受影响,因此在同等节点配置下,这种集群必然是最慢的。。
b)共享磁盘结构。很多商业集群采取这种架构,节点间通过I/O总线连接到一块共享存储上,这个共享磁盘除了数据外还能存储检查点文件或关键系统镜像,以便在节点失效时恢复,从而提高集群的可用性。另外由于磁盘上的数据共享,能保持很好的一致性,并且避免了节点间的数据交换。
c)共享内存结构。这种集群实现起来十分困难。在上图中,节点由可扩展一致性接口(Scalable Coherence Interface, SCI, 具体见IEEE1596-1992标准)环连接,SCI通过网卡连接每个节点的内存总线。这种结构的优点,一是数据访问速度非常快,且充分利用了CPU的cache;二是其大大增加了单一操作系统管理的CPU和内存量,这对应用编程是有利的,与单机编程将非常相似。这种结构的缺点是,首先需要细致的资源配置,有些操作系统默认的内存分配策略是进程仅使用本节点内存,可能在整个集群还有大量内存;其次是这种结构下维持高速缓存一致性的开销较大,如果牺牲高速缓存一致性,编程模型又会变得复杂。
13.2 并行数据库
1、并行数据库概述
并行数据库系统---通过并行实现各种数据操作,如数据载入、索引建立、数据查询等,可以提高系统的性能。
优势:增强的可用性:当存储某个关系的场地系统崩溃时,可继续使用存储在别的场地的副本。
2、 并行数据库系统结构
实现并行DBMS的三种硬件结构:
( 1 )共享内存系统(Shared Memory):但是随着CPU的增加,会造成内存冲突。
( 2 )共享磁盘系统(Shared Disk):虽然网络实现了CPU之间的数据交换,但增加了通讯代价。
( 3 )无共享资源系统(Shared Nothing):存在通讯代价,非本地磁盘访问代价高。
( 4 )层次结构(Hierachical):集合了以上三种的优点。
3、数据划分与并行算法
一维数据划分:将大数据集水平划分到多个磁盘上,可以通过并行读写有效地利用多磁盘的I/O带宽。(轮转法,散列法,范围划分法)。
并行算法:并行排序,并行连接
13.3 云计算数据库架构
1、云计算概述
云计算是一种商业计算模型。它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务。
云( cloud ) : 即云计算提供商的数据中心的软硬件设施。
云分为:
公共云:以即用即付的方式提供给公众。
私有云:不对公众开放的云。
混合云
- 云数据库体系结构
云数据库(CloudDB,简称云库):云+数据库。
目前主要的云计算平台:AWS ( Amazon Web Services )、GAE ( Google AppEngine )、Hadoop。
附:谷歌云计算基础架构模式( 4个子系统):Google File System文件系统、Map/Reduce分布式编程环境、Chubby分布式锁机制、BigTable大规模分布式数据库
- 云
数据库与传统数据库比较云数据库的缺点上: 数据安全问题、对云的管理问题、对因特网的依赖。
13.4 XML数据库
1、XML数据库概述
XML , extensible Markup Language.可扩展标记语言。(半结构化的语言)
XML数据库支持对XML文档格式进行存储和查询等操作的数据库管理系统。
三种类型的XML数据库:XML Enabled Database(XEDB) )--能处理XML的数据库、Native XML Database(NXD) )--纯XML数据库、Hybird XML Database(HXD)--混合XML数据库。
与传统数据库比较, XML数据库的优势:能够对半结构化数据进行处理。提供对标签和路径的操作。能清晰地表达数据的层次特征。
2、SQL Server 2008与XML
SQL Server中的XML语句:
FOR XML :将返回结果变为XML格式。(SQL语言)
注:Xml在SQL server中也可以作为一种数据类型。
第十四章 数据仓库与数据挖掘
14.1 决策支持系统的发展
如何利用日益增长的数据为企业的管理和决策服务?
经过研究和实践产生了数据仓库和数据挖掘技术。
- 决策支持系统及其演化
般将数据分为:分析型数据、操作型数据(由企业的基本业务系统产生的数据,用于联机处理环境( OLTP ) )。
决策支持系统( DSS ) : 综合利用大量数据,有机组合众多模型(数学模型和数据处理模型) , 通过人机交互,辅助各级决策者实现科学决策的系统。
- 基于数据仓库的决策支持系统
14.2数据仓库技术概述
- 数据仓库的概念与特性
数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它出于分析性报告和决策支持目的而创建。为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。
建立数据仓库的主要目的在于根据决策需求对企业的数据采取适当的手段进行集成,形成一个综合的、面向分析的数据环境,用于支持企业的信息性、决策性的分析应用。
数据仓库的特性:面向主题性、集成性、不可更新性和时间特性等。
- 数据仓库的体系结构与环境
➢从数据层次角度来看,典型的数据仓库的数据体系结构包括:操作型数据、操作型数据存储( Operation Data Store )、数据仓库( DataWarehouse )和数据集市( Data Mart)。也可以包括个体层数据。
➢从功能结构看,可分为数据处理、数据管理和数据应用三个层次。
➢ODS体系结构
操作数据存储ODS(OperationalData Store)是数据仓库体系结构中的一个可选部分,由业务系统产生的报表、细节数据的查询自然能够从ODS中进行,从而降低业务系统的查询压力。ODS设计与DW设计在着眼点上有所不同,ODS重点考虑业务系统数据是什么样子的,关系如何,在业务流程处理的哪个环节,以及数据抽取接口等问题。
ODS是一个将面向主题的,动态增长的,非实时的,消除了原始数据库差异的,对原始库最大限度进行冗余处理后得到的数据集,通过ODS消除了数据间的关联细节,实现了对某一领域数据进行统一处理(比如查询、统计)的快捷方法。
ODS的主要目的是为了降低数据仓库系统和业务系统之间的紧耦合。
ODS分成4类:
ODS 1:数据更新频率秒级。
ODS 2:数据更新频率小时级。
ODS 3:数据更新频率天级。
ODS 4:根据数据来源方向和类型区分。
- 数据仓库的数据组织
“粒度”:数据仓库的数据单位中保存数据 的细化或综合程度的级别。细化程度越高,粒度越小。
➢粒度影响到数据仓库的数据量及系统能回答的查询的类型。
➢进行数据仓库的数据组织时,应根据当前应用的需求进行多粒度级设计。满足多角度、多层次数据查询要求。
数据分区(分割):数据分散到各自的物理单元中去,它们能独立地处理。
➢最常见的是按照时间标准分区。
数据分区的方式可以分成系统层分区 (数据库系统提供的机制)和应用层分区(由应用代码实现)两种。
➢如何分区由开发者和程序员控制、
元数据:关于数据的数据,或叫描述数据的数据。用于构造、维持、管理、和使用数据仓库,在数据仓库中尤为重要。
➢元数据描述了数据的结构、内容、链和索引等内容。
➢在数据仓库中, 元数据分成技术型元数据和业务型元数据。
➢元数据解决了人在何时何地为了什么原因及如如何使田数据合库的问题。
Data Mart:数据集市--小型的,面向部门或工作组级数据仓库。
Operation Data Store:操作型数据存储一ODS是能支持企业日常的全局应用的数据集合,是不同于DB的一种新的数据环境是DW扩展后得到的一个混合形式。四个基本特点:面向主题的( Subject - Oriented )、集成的、可变的、当前或接近当前的。
14.3 设计与建造数据仓库
- 数据仓库设计的需求与方法
数据仓库SDLC和数据仓库CLDS。SDLC是典型的需求驱动开发生命周期; CLDS是典型的数据驱动开发生命周期。
- 数据仓库的数据模型
➢数据仓库的数据模型分为概念( E R图逻辑(关系型模型或多维数据模型)、物理=级数据模型。与普通数据库系统的数据模型不同:
①一般不包含纯操作型数据。
②一般需要扩充关键字结构,在其中加入时间属性。
③需要增加导出数据。
- 数据仓库设计步骤
数据仓库的设计过程分为:概念模型设计、技术评估与环境准备工作、逻辑模型设计、物理模型设计、数据生成与应用实现、数据仓库运行与准护。
14.4 数据仓库的运行与维护
- 数据仓库数据的更新与维护
数据仓库维护的基本思路:根据某种维护策略,在一定条件下触发维护操作;维护操作捕捉到数据源中的数据变化;通过一定策略对数据仓库中的数据进行相应的更新操作,以保持两者的一致性。(实时维护、延时维护、快照维护。)
用户不可存取数据仓库时间的长短是衡量数据维护效率的重要指标。将维护分为"聚集"和"更新”两个部分。
- 数据仓库监控与元数据管理
数据仓库监控:对数据仓库的数据量、各种数据的使用率、用户和安全状况、网络通信情况、网络数据流量、数据源数据变化情况、集成和维护工具运行效率、查询响应时间、应用支持效率等进行必要的监控。
元数据管理:一般采用元数据库来存储和管理元数据。
14.5 联机分析处理与多维数据模型
- OLAP简介
(注:OLTP:联机处理系统,对操作数据处理。)
➢OLAP-联机分析处理或在线分析处理主要用于支持复杂的分析操作,侧重对决策人员和高层管理人员的决策支持。
➢OLAP工具一般具有快速、可分析和多维的特点。
- 多维分析的基本概念
➢维----人们观察数据的角度。
➢数据的多维分析----针对数据仓库中以多维形式组织起来的数据,从多个角度、不同层次,采取各种数据分析技术,对数据进行剖析,以使用户能从多角度和不同层次观察和分析数据。
- 多维分析的基本操作
➢钻取与卷起:OLAP分析最基本的操作。钻取指对应于某维逐步向更细节层方向观察数据,卷起则反之。
➢切片和切块:实现局部数据的显示。
➢旋转:改变一个报告或页面显示的维方向,得到不同视角的数据。,最简单的旋转就是数据交叉。
4. OLAP的实现方式
OL AP的实现方式有三种:
➢基于多维数据库的QLAP ( MOLAP ): 以多维数组为基本存储结构。
➢基于关系数据库的OLAP ( ROLAP ):采用关系表表示和存储。( 星形模式或雪花模式
➢混合型的OLAP ( HOLAP ):结合MOLAP与ROLAP.具有最好的查询性能。
14.6 数据挖掘技术
数据挖掘( Data Mining )----就是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中,提取隐含在其中的、人们事先不知道的、但又是潜在有用的信息和知识的过程。
数据源必须是真实的、大量的、含噪声的;发现的是用户感兴趣的知识;发现的知识要可接受、可理解、可运用。
- 数据挖掘步骤
数据挖掘作为知识发展的过程,分为三个阶段:
➢数据准备:三个子步骤:数据选取;数据预处理;数据变化。
➢数据挖掘:首先确定挖掘的任务,其次决定挖掘算法。
➢结果解释评估:剔除冗余或无关的模式。
- 关联规则挖掘
给定一个销售交易数据库,从中找出这些交易中的某些物品和其他物品之间的关系,这种数据挖掘一般称为关联 (或关联分析、关联规则)挖掘。
- 分类挖掘
➢分类挖掘方法用于预测数据对象的离散类别。
一般分为两个步骤:通过以知数据集,建立分类函数,构造分类器。利用所获得的分类函数对末知类别标记的数据项进行分类操作。
- 聚类挖掘
聚类挖掘方法--用于对集中的数据进行分组,使得每组内的数据尽量相似而不同
组间的数据尽可能不同。
聚类方法包括统计方法、机器学习方法、神经网络方法和面向数据库的方法等。
- 时间序列分析
时间序列--用时间排序的一组随机变量。
时间序列分析--又称为数据演变分析描述行为随时间变化的对象的规律或趋势,并对其进行建模。
从不同角度可分为:一元时间序列和多元时间序列;等间隔时间序列和不等间隔时间序列;平稳时间序列和非平稳时间序列。