目录
5 . 4 数 据 库 的 控 制 功 能
5.4.1 并发控制
1 . 事务的基本概念
2 . 数据不一致问题
3 . 封锁协议
4 . 死锁问题
5.4.2 数据库性能优化
1 . 硬件升级
2 . 数据库设计
5.4.3 数据库的完整性
1 . 完整性约束条件
2 . 实体完整性
3 . 参照完整性
4 . 用户定义的完整性
5 . 触发器
5.5.4 数据库的安全性
1 . 用户标识和鉴别
2 . 数据授权(不用数据访问需要不同的用户角色)
3 . 视图
4 . 审计与跟踪
5. 4. 5. 备份与恢复技术
1 . 物理备份
2 . 逻辑备份
3 . 日志文件
4 . 数据恢复
5.4.6 数据中心的建设
5 . 4 数 据 库 的 控 制 功 能
要想使数据库中的数据达到应用的要求,必须对其进行各种控制,这就是 D B M S 的控制功能,包括并发控制、性能优化、数据完整性和安全性,以及数据备份与恢复等问题。
这些技术虽然给人们的感觉是边缘性技术,但 对 D B M S 的应用而言,却是至关重要的。
5.4.1 并发控制
在多用户共享系统中,许多事务可能同时对同一数据进行操作,称为并发操作。此时, D B M S 的并发控制子系统负责协调并发事务的执行,保证数据库的完整性不受破坏,同时,避免用户得到不正确的数据。
1 . 事务的基本概念
D B M S 运行的基本工作单位是事务,事务是用户定义的一个数据库操作序列,这些操作序列要么全做,要么全不做,是一个不可分割的工作单位。
备注:
事务不是单一操作,而是一个操作序列!!!!不可打断的操作序列。而操作序列是有一个个独立的操作完成的,操作本身又是可以相互独立的!!!
事务具有以下特性:
( 1 ) 原 子 性 (A tom icity)。
事务是数据库的逻辑工作单位,事务的原子性保证事务包含的一组更新操作是原子不可分的,也就是说,这些操作是一个整体,不能部分地完成。
(2 ) —致 性 (C onsistency)。
一致性是指使数据库不同实体从一个一致性状态变到另一个一致性状态。例如,在转账的操作屮,各账户金额必须平衡。一致性与原子性是密切相关的,一致性在逻辑上不是独立的,它由事务的隔离性来表示。
( 3 ) 隔离性 (Isolation)。
隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。它要求即使有多个事务并发执行,但看上去每个事务按串行调度执行一样。这一性质也称为可串行性,也就是说,系统允许的任何交错操作调度等价于一个串行调度。
( 4 ) 持 久 性 (Durability)。
持久性也称为永久性,是指事务一旦提交,改变就是永久性的,无论发生何种故障,都不应该对其有任何影响。事务的原子性 、 一 致性、隔离性和持久性通常统称为 A C ID 特性。
2 . 数据不一致问题
数据库的并发操作会带来一些数据不一致问题,例如,丢失修改、读 “脏数据”和不可重复读等。
(1) 丢失修改:一个线程的写被另一个线程的写破坏(覆盖)
事务 A 与事务 B 从数据库中读入同一数据并修改,事务 B 的提交结果破坏了事务 A 提交的结果,导致事务 A 的修改被丢失。例如,有 T l 、 T 2 两个事务,其执行顺序如表 5 -7 所示。
则 “③ A = A - 5 , 写回”操作会被 “ A = A - 8 , 写回”操作覆盖掉,“③ A = A - 5 , 写回”将不起任何作用。
(2) 读 “脏数据”:一个线程的读被另一个线程的连续写破坏(覆盖)
事务 A 修改某一数据,并将其写回磁盘,事务 B 读取同一数据后,事务 A 由于某种原冈被撤销,这时事务 A 已修改过的数据恢复原值,事务 B 读到的数据就与数据库中的数据不一致,是不正确的数据,称 为 “脏数据”。例如,有 T 1、T 2 两个事务,其执行顺序如表5-8所示。则 T 2 中 “读 A =70”就是读的脏数据。
(3) 不可重复读:一个线程的连续读被另一个线程的写破坏(覆盖)
不可重复读是指事务 A 读取数据后,事务 B 执行了更新操作,事务 A 使用的仍是更新前的值,造成了数据不一致性。例如,有 T l 、 T 2 两个事务,其执行顺序如表5-9所示。
在表5-9屮, T 1 事务为了确保其重要计算无误,所以采用了验算的方式,两次独立取出数据并运算,最后进行验算(即比较两次运算结果是否相同)。
在此处,虽然两次计兑都没错,但由于在两次操作之间的时间间隔中, T 2 对数据进行了修改,导致验算结果不正确,这就是不可重复读问题。
3 . 封锁协议
处理并发控制的主要方法是采用封锁技术,主要有两种封锁,分 别 是 X 封 锁 和 S封锁。
( 1 ) 排他型封锁(X 封锁)。 => 互斥性
如果事务对数据对象 (可以是数据项、元组和数据集,以至整个数据库)实现了 X 封锁,那么只允许事务读取和修改数据 , 其他事 务要等事务解 除 X 封锁以后,才能对数据A 实现任何类型的封锁。可见,X 封锁只 允许一个事务独锁某个数据,具有排他性。
( 2 ) 共享型封锁(S 封锁)。=》共享性
X 封锁只允许一个事务独锁和使用数据,要求太严。需要适当从宽,例如,可以允许并发读,但不允许修改,这就产生了S 封锁的概念。S 封 锁的含义是,如果事务T 对数据A 实现了 S 封锁,那么允许事务T 读取数据A , 但不能 修改数据A ,在所有S 封锁解除之前,决不允许任何事务对数据A 实现X 封锁。 在多个事务并发执行的系统中,主要采取封锁协议来进行处理,常见的封锁协议 如下:
(1) •一级封锁协议。
事 务 T 在修改数据R 之前必须先对其加X 锁,直到事务结束 才释放。一级封锁协议可防止丢失修改,并保证事务T 是可恢复的,但不能保证p J重复 读和不读“脏数据”。
( 2 ) 二级封锁协议。
一级封锁协议加上事务T 在读取数据R 之前先对其加S 锁,读 完后即可释放S 锁。
二级封锁协议可防止丢失修改,还可防止读“脏数据”,但不能保 证可重复读。
( 3 ) 三级封锁协议。
一 级封锁协议加上事务T 在读取数据R 之前先对其加S 锁,直 到事务结束才释放。三级封锁协议可防止丢失修改、读 “脏数据”,且能保证可重复读。
( 4 ) 两段锁协议。
所有事务必须分两个阶段对数据项加锁和解锁。
其中扩展阶段是 在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁•,收缩阶段是在 释放一个封锁之后,事务不能再申请和获得任何其他封锁。
若并发执行的所有事务均遵 守两段封锁协议,则对这些事务的任何并发调度策略都是可串行化的。遵守两段封锁协 议的事务可能发生死锁。 显然,使用封锁技术来解决并发控制问题,存在一个封锁粒度问题。
所谓封锁粒度, 是指被封锁数据对象的大小,在关系数据库中封锁粒度有属性值、属性值集、元组、关 系、某索引项(或整个索引)、整个关系数据库、物 理 页 (块)等几种。封锁粒度小则并 发性高,但开销大;封锁粒度大则并发性低但幵销小,综合平衡照顾不N 需求,以合理 选取适当的封锁粒度是很重要的。
4 . 死锁问题
采用封锁的方法虽然可以有效防止数据的不一致性,但封锁本身也会产生一些麻 烦,最主要就是死锁问题。死锁是指多个用户申请不同封锁,由于申请者均拥有一部分封锁权,而又需等待另外用户拥有的部分封锁而引起的永无休止的等待。
数据库系统中的死锁与操作系统中的死锁是类似的,在此不再展开讨论,详细的请参考3.2.3节。
5.4.2 数据库性能优化
数据库是企业I T基础设施的核心部件之一,它并不是一个孤立的系统,而是与网络、 操作系统和存储等系统有着紧密的关联。要在某个应用系统中使用数据库技术,是一件非常容易的事情,但要将数据库与应用系统之间的配合性能调整到最佳状态,却不是一 件容易的事情,这是一个系统工程。
通常,对一个集中式数据库的性能进行优化,可以从硬件升级、数据库设计、检索数据库是企业I T 基础设施的核心部件之一,它并不是一个孤立的系统,而是与网络、 操作系统和存储等系统有着紧密的关联。要在某个应用系统中使用数据库技术,是一件 非常容易的事情,但要将数据库与应用系统之间的配合性能调整到最佳状态,却不是一 件容易的事情,这是一个系统工程。 通常,对一个集中式数据库的性能进行优化,可以从硬件升级、数据库设计、检索策略和查询优化等方面入手。有关分布式数据库的性能优化问题,将在5.6.3节中讨论。
1 . 硬件升级
要提升数据库的运行速度,最直接的方式就是硬件升级,涉及的硬件包括处理器、 内存、磁盘子系统和网络。
处理器的升级主要可以考虑用更高频率的处理器代替现有频率较低的处理器,也可 以将单处理器的计算机系统升级为多处理器系统。
内存的升级主要是容景的扩充,当容量扩充以后,数据库服务器可以将更多的数据 保存在缓冲区,以减少磁盘I/O 操作,从而提升数据库的整体性能。
磁盘子系统的性能提升主要体现在两个方面,
第一,采用高速磁盘系统替代速度较低的磁盘系统,以减少读盘等待时间,提高响应速度;
第二,合理分布磁盘I/O 到多个 设备上,以减少资源竞争,提高并行操作能力。
网络方面主要是对带宽的升级。
2 . 数据库设计
在数据库设计阶段,就可以着手考虑性能优化问题。
对数据库进行设计优化,主要可以从逻辑设计和物理设计两个方面入手。
根 据 5.2.3节的介绍,数据库的规范化程度越高,数据库中的冗余信息就越少。然而,同时又有新的问题引入,规范化使得关系模式不断被拆解,这样关系模式之间的结构变得越来越复杂,
在使用数据时频繁执行连接操作,而连接操作是最耗时间的,是数据库性能的制约因素。因此,从某种意义上来说,非规范化(反规范化)可以改善系统的性能。
在进行数据库设计时,可以考虑合理增加冗余属性,以提升系统性能,常用的措施如下:
( 1 ) 将常用的计算属性(例如,总计和最大值等)存储到数据库实体中。
( 2 ) 重新定义实体,以减少外部属性数据或行数据的开支。
( 3 ) 将关系进行水平或垂直分割, 以提升并行访问度。
数据库逻辑结构设计固然重要,但物理设计也不可忽视,将数据放在不同的物理位置,有时能对性能提升起到非常关键的作用。//公司的组织架构就是逻辑设计、办公室、分公司的地理位置就是物理设计。
物理设计可以遵循以下准则:
( 1 ) 与每个属性相关的数据类型应该反映数据所需的最小存储空间,特别是对于被索引的属性更是如此。例如,能使用smallint类型的就不要用integer类型,这样,索引字段可以以被更快地读取,而且可以在•一个数据页上放置更多的数据行,就相应地减少了I / O操作。
( 2 ) 将一个频繁使用的大关系分割开,并放在两个单独的智能型磁盘控制器的数据 库设备上,这样也可以提高性能。因为有多个磁头在查找,数据分离也能提高性能。
( 3 ) 将数据库中文本或图像属性的数据存放在一个个单独的物理设备上,也可以提高性能。如果使用专用的智能型控制器,就能进一步提高性能。
3 . Index索引优化策略
索引是提高数据库査询速度的利器,而数据库査询往往又是数据库系统中最频繁的操作,因此,索引的建立与选择对数据库性能优化具有重大意义。
索引的建立与选择可以遵循以下准则:
( 1 ) 建立索引时,应选用经常作为査询,而不常更新的属性。
避免对一个经常被更新的属性建立索引,因为这样会严重影响性能。
( 2 ) —个关系上的索引过多会影响U P D A T E 、I N S E R T 和 D E L E T E 的性能,因为关 系一旦进行更新,所有的索引都必须跟着做相应的调整。
( 3 ) 尽量分析出每个重要查询的使用频度,这样,可以找出使用最多的索引,然后 可以先对这些索引进行适当的优化。
( 4 ) 对于数据量非常小的关系不必建立索引,因为对于小关系而言,关系扫描往往 更快,而且消耗的系统资源更少。
4 . 查询优化
查询优化也称为应用程序优化,它是数据库性能优化的最后一个环节,同时,也是 最需要的一个环节。
查询语句的构造不当,可以使之前的优化功亏一篑。S Q L 语句优化 的策略很多,例如,建立物化视图或尽可能减少多表查询;以不相干子查询替代相干子 查询;只检索需要的属性;用带I N 的条件子句等价替换O R 了•句;经常提交(C O M M I T ), 以尽早释放锁等。
总之:避免冲突、封锁、死锁。
5.4.3 数据库的完整性
数据库的完整性是指数据库中数据的正确性和相容性。
数据库完整性由各种各样的完整性约束来保证,完整性约束可以通过D B M S 或应用程序来实现,基 于 D B M S 的完 整性约束作为关系模式的一部分存入数据库中。
1 . 完整性约束条件
保证数据完整性的方法之一是设置完整性检查(确保设置的数据是完整的),即对数据库中的数据设置一些约束条件,这是数据的语义体现。
完整性约束条件是指对数据库中数据本身的某些语法或语义限制、数据之间的逻辑约束,以及数据变化时应遵守的规则等。所有这些约束条件一 般均以谓词逻辑形式表示,即以具有真假值的原子公式和命题连接词(并且、或者、否 则)所组成的逻辑公式表示。完整性约束条件的作用对象可以是关系、元组或属性三种。 数据的完整性约束条件一般在关系模式中给出,并在运行时做检查,当不满足条件时立 即向用户通报,以便采取措施。 数据库中数据的语法、语义限制与数据之间的逻辑约束称为静态约束,它反映了数 据及其之间的固有逻辑特性,是最重要的一类完整性约束。静态约束包括静态属性级约 束 (对数据类型的约束、对数据格式的约束、对取值范围或取值集合的约束、对空值的 约朿以及其他约束)、静态元组约束和静态关系约束(实体完整性约束、参照完整性约束、函数依赖约束、统计约束)。
数据库中的数据变化应遵守的规则称为数据动态约束,它反映了数据库状态变迁的 约束。动态约束包括动态属性级约束(修改属性定义时的约束、修改属性值时的约束)、 动态元组约束和动态关系约束。 • 完整性控制机制应该具有定义功能和检查功能,定义功能提供定义完整性约束条件 的机制,检査功能检查用户发出的操作请求是否违背了完整性约束条件。如果发现用户 的操作请求违背了约束条件,则采取一定的动作来保证数据的完整性。
2 . 实体完整性
实体完整性要求主键中的任一属性不能为空,所谓空值是“不知道”或 “无意义” 的值。之所以要保证实体完整性,主要是因为在关系中,每个元组的区分是依据主键值的不同,若主键值取空值,则不能标明该元组的存在。例如,对于学生关系S (S n o , Snarne,S s e x ),其主键为S n o ,在插入某个元组时,就必须要求S n o 不能为空。更加严格的D B M S , 则还要求Sru)不能与已经存在的某个元组的S n o 相同。
3 . 参照完整性
若基本关系及中含有与另一基本关系S 的主键P K 相对应的属性组F K (F K 称为穴 的外键),则参照完整性要求,对及中的每个元组在F K 上的值必须是S 中某个元组的P K 值,或者为空值。参照完整性的合理性在于,/?中的外键只能对^中的主键引用,不 能是51中主键没有的值。例如,对于学生关系S (S n o , S n a m e , S s e x )和选课关系C (S n o ,
C n o , G r a d e ) 两个关系,C 中的S n o 是外键,它是S 的主键,若 C 中出现了某个S 中没 有的S n o , 即某个学生还没有注册,却已有了选课记录,这显然是不合理的。 在实际应用中,对于参照完整性,需要明确外键能否接受空值的问题,以及在被参 照关系中删除元组的问题。针对不同的应用,可以有不同的删除方式:
( 1 ) 级联删除。将参照关系中所有外键值与被参照关系屮要删除元组主键值相同的 元组一起删除。如果参照关系同时又是另一个关系的被参照关系,则这种删除操作会继 续级联下去。
( 2 ) 受限删除。这是一般D B M S 默认的删除方式。仅当参照关系中没有任何元组的 外键值与被参照关系中要删除元组的主键值相同时,系统j 可以执行删除操作,否则拒 绝执行删除操作。
( 3 ) 置空删除。删除被参照关系的元组,并将参照关系屮相应元组的外键值置为 空值。
同样,还需要考虑在参照关系中插入元组的问题,一般可以采用以下两种方式:
( 1 ) 受限插入。仅当被参照关系中存在相应的元组时,其主键值与参照关系插入元 组的外键值相同时,系统才执行插入操作,否则拒绝此操作。
( 2 ) 递归插入。首先向被参照:X •系中插入相应的元组,其主键值等于参照关系插入 元组的外键值,然后向参照关系插入元组。
4 . 用户定义的完整性
实体完整性和参照完整性适用于任何关系型D B M S 。除此之外,不同的数据库系统 根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性就是针对 某一具体数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。 ,如果在一条语句执行完后立即检查,称为立即执行约束;如果在整个事务执行结束 后再进行检查,则称延迟执行约束。完整性规则的五元组表示为(D , O , C ,P ), 其中Z) 表示约束作用的数据对象,O 表示触发完整性检査的数据库操作,^表示数据对 象必须满足的断言或语义约束,C 表示选择」作用的数据对象值的谓词,P 表示违反完 整性规则时触发的过程。
5 . 触发器
触发器是在关系型D B M S 中应用得比较多的一种完整性保护措施,其功能比完整性 约束要强得多。一般而言,在完整性约束功能中,袅系统检查出数据中有违反完整性约 束条件时,则仅给出必要提示以通知用户,仅此而已。而触发器的功能则不仅起到提示 作用,还会引起系统自动进行某呰操作,以消除违反完整性约束条件所引起的负面影响。 所谓触发器,其抽象的含义即是一个事件的发生必然触发(或导致)另外一些事件 的发生,其中前面的事件称为触发事件,后面的事件称为结果事件。触发事件一般即为 完整性约束条件的否定,而结果事件即为一组操作用以消除触发事件所引起的不良影响。 目前,数据库中事件一般表示为数据的插入、修改、删除等操作。触发器除了有完整性 保护功能外,还有安全性保护功能。
5.5.4 数据库的安全性
就整个信息系统的安全而言,数据的安全是最重要的。
数据库系统的安全性在技术 上依赖于两种方式,
一种是D B M S 本身提供的用户身份识别、视图、使用权限控制和审 计等管理措施,大型D B M S 均有此功能;
另一种就是靠应用程序來实现对数据库访问进行控制和管理,也就是说,数据的安全控制由应用程序里面的代码来实现。目前,一些 大型D B M S 都提供了一些技术手段来保证数据的安全,如表5-10所示。
的实施,将在 18.2.1节中详细介绍。
1 . 用户标识和鉴别
用户的身份认证是用户使用D B M S系统的第一个环节,是系统提供的最外层保护。
进行用户标识和鉴别的常用方式有口令认证和强身份认证。
(1) 口令认证。
口令认证是一种身份认证的蕋本形式,用户在建立与D B M S的访问
连接前,必须提供正确的用户账号和口令,D B M S与自身保存的用户列表中的用户标识
和口令比较,如果匹配则认证成功,允许用户使用数据库系统;如果不匹配,则返回拒
绝信息,这种认证判断过程往往是数据库登录的第一步。
(2) 强身份认证。
在网络环境下,客户端到D B M S服务器可能经过多个环节,在身 份认证期间,用户的信息和口令可能会经过很多不安全的节点(例如,路由器和服务器) ,而被信息的窃听者窃取。强身份认证过程使认证可以结合信息安全领域一•些更深入的技术保障措施,来强化用户身份的鉴别,例如,可以与数字证书、智能卡和用户指纹识别等多种身份识别技术相结合。有关这些技术的详细知识,将在 18.2.2节中介绍。
2 . 数据授权(不用数据访问需要不同的用户角色)
当用户通过身份认证以后,并不是所有的用户都能操作所有的数据,要分不同的用户角色来区别对待,例如,普通用户只能査看自己的个人信息,而D B A则可以查看所 有用户的信息。要达到这一效果,需要对不同用户角色进行不同级别的数据授权。
一般可以将权限角色分为三类:数据库登录权限类、资源管理权限类和D B A权限 类。有了数据库登录权限的用户才能进入D B M S,才能使用D B M S所提供的各类工具和实用程序。同时,数据对象的创建者(own e r)可以授予这类用户以数据查询、建立视图等权限。这类用户只能査阅部分数据库信息,不能改动数据库中的任何数据;具有资源管理权限的用户,除了拥有数据库登录权限类的用户权限外,还有创建数据库表、索引等数据对象的管理权限,可以在权限允许的范围内修改和查询数据库,还能将自己拥有的权限授予其他用户,讨以申请审计等;具有D B A权限的用户将具有数据库管理的全部权限,由于拥存非常大的权限,所以只有极少数用户属于这种角色。
当然,不同的 D B M S 可能对用户角色的定义不尽相同,权限划分的细致程度也远超 过上面三种基本的类型。同一类功能操作权限的用户,对数据库中的数据对象管理和使 用的范围也可能是不同的,因此, D B M S 除了要提供基于功能角色的操作权限控制外, 还提供了对数据对象的访问控制,访问控制可以根据对控制用户访问数据对象的范围(或称粒度)从大到小分为4个层次,分别是数据库级、关系级、元组级和属性级。
3 . 视图
视图可以被看成足虚拟关系或存储查询,可通过视图访问的数据不作为独特的对象存储在数据库内,数据库内存储的是 S E L E C T 语句。 S E L E C T 语句的结果集构成视图所返回的虚拟关系。用户可以用引用关系时所使用的方法,在 S Q L 语句中通过引用视图名称来使用虚拟关系。使用视图町以实现下列功能:
(1) 将用户限定在关系中的特定元组上。例如,只允许雇员看到工作跟踪表内记录其工作的行。
(2) 将用户限定在特定属性上。例如,对于那些不负责处理工资单的雇员,只允许他们看到雇员表中的姓名、工作电话和部门属性,而不能看到任何包含工资信息或个人信息的属性。
(3) 将多个关系中的属性连接起来,使它们看起来像一个关系。
(4) 聚合信息而非提供详细信息。例如,显示一个属性的和,或属性的最大值和最小值等。
4 . 审计与跟踪
如果身份认证是一种事前的防范措施,审计则是一种事后监督的手段。
跟踪也是D B M S 提供的监视用户动作的功能,然而,审计和跟踪是两个不同的概念,主要是两者的目的不同。
跟踪主要是满足系统调试的需要,捕捉到的用户行为记录往往只用于分析,而并不长久地保存,而审计作为一种安全检査的措施,会将系统的运行状况和用户访问数据库的行为以日志形式记录并保存下来,这种口志往往作为一种稽査用户行为的一种证据。
根据审计对象的区分,有两种方式的审计,即用户审计和系统审计。
用户(用户id为索引)审计时,D B M S 的审计系统记下所有对关系(或视图)进行访问的企图(包括成功的和不成功的)及每次操作的用户名、时间和操作代码等信息。这些信息一般都被记录在操作系统或D B M S 的曰志文件中,利用这些信息可以对用户进行审计分析;
系统(操作系统的命令为索引)审计由 D B A 进行,其审计内容主要是系统一级命令和数据对象的使用情况。
5. 4. 5. 备份与恢复技术
5.4.4节详细介绍了保证数据库安全性的技术和措施,但不管用多么高明的手段,总是难以避免安全事故的发生。安全事故的发生有可能是人为因素,也可能是由于硬件设备的故障,甚至是自然灾难。因此,需要备份与恢复技术来进一步保障数据的安全,即当数据被破坏后,在一定时间内将数据库调整到破坏前的状态。数据库备份有多种分类方式。按备份的实现方式,可分为物理备份与逻辑备份,而物理备份又可以分为冷备份与热备份•,按备份数据量情况,可分为完全备份、增量备份与差异备份。其中,完全备份是指将整个数据库中的数据进行备份,增量备份是指备份上一次备份(包括完全备份、增量备份和差异备份)后发生变化的数据,差异备份是指备份上一次完全备份后发生变化的所有数据。由于备份方式存在多样性,因此,制订一个合适的可操作的备份和恢复策略至关重要,其基本原则是保证数据丢失得尽量少或完全不丢失,且备份和恢复时间尽景短,保证系统最大的可用性。
1 . 物理备份
物理备份是在操作系统层面上对数据库的数据文件进行备份,可分为冷备份和热备份两种。
冷备份也称为静态备份,是将数据库正常关闭,在停止状态下,将数据库的文件全部备份(复制)下來。当数据库发生故障时,将数据文件复制回来进行恢复。冷备份是数据库备份中最快和最安全的方法。
热备份也称为动态备份,是利用备份软件,在数据库正常运行的状态下,将数据库中的数据文件备份出来。
冷备份与热备份的优缺点如表5-11所示。
为了提高物理备份的效率,通常将完全、增量和差异三种备份方式相组合。
一般来说,一个备份周期通常由一个完全备份和多个增量、差异备份组成。
由于增量或差异备份导出的数据少,所需要的时间也较少。
2 . 逻辑备份
逻辑备份是指利用 D B M S 自带的工具软件备份和恢复数据库的内容,例如 ,Oracle的导出工具为 exp , 导入工具为 i mp , 可以按照表、表空间、用户和全库4 个层次备份和恢复数据; Sybase 的全库备份命令是 d u m p database ,全库恢复命令是 load database ,还可利用 B C P 命令来备份和恢复指定表。在数据库容量不大的情况下,逻辑备份是一个非常有效的手段,既简单又方便,但现在随着数据量的越来越大,甚至高达 T B 级,利用逻辑备份来恢复数据库己力不从心,
速度很慢。针对大型数据库的备份和恢复,一般结合磁带库或光盘库,采用物理备份方式。
3 . 日志文件
事务日志是针对数据库改变所做的记录,它吋以记录针对数据库的任何操作,并将记录结果保存在独立的文件中。这种文件就称为日志文件。对于任何一个事务,事务曰志都有非常全面的记录,根据这些记录可以将数据文件恢复成事务前的状态。从事务动作开始,事务日志就处于记录状态,事务执行过程中对数据库的任何操作都记录在内,直到用户提交或回滚后才结束记录。
曰志文件是用来记录对数据库每一次更新活动的文件,在热备份方式中,必须建立日志文件,后援副本和日志文件综合起来才能有效地恢复数据库;
在冷备份方式中,也可以建立日志文件,当数据库毁坏后,重新装入后援副本,将数据库恢复到备份结束时刻的正确状态,然后利用日忐文件,将己完成的事务进行重做处理,对故障发生时尚未完成的事务进行撤销处理。这样,不必重新运行那些已完成的事务程序就可将数据库恢复到故障前某一时刻的正确状态。例如,在热备份期间的某时刻系统将数据 J =100备份到了磁带上,而在时刻/2,某一事务对 d 进行了修改使^=200。备份结束,后备副本上的 d 己是过时的数据了。为此,必须将备份期间各事务对数据库的修改活动登记下来,建立 U 志文件。
这样,后备副本加上 H 志文件就能将数据库恢复到某一时刻的正确状态。事务在运行过程中,系统将事务开始、事务结束(包括 C O M M I T 和 R O L L B A C K ),以及对数据库的插入、删除和修改等每个操作作为一个登记记录存放到日志文件中。每个记录包括的主要内容有执行操作的事务标识、操作类型、更新前数据的旧值(对插入操作而言此项为空值)、更新后的新值(对删除操作而言此项为空值)。登记的次序严格按并行事务操作执行的时间次序,同时遵循“先写日志文件”的规则。写一个修改到数据库中和写一个表示这个修改的□志记录到日志文件中是两个不同的操作,有可能在这两个操作之间发生故障,即这两个写操作只完成了一个,如果先写了数据库修改,而在
曰志记录中没有登记这个修改,则以后就无法恢复这个修改了。因此,为了安全,应该先写日志文件,即首先将修改记录写到日志文件上,然后再写数据库的修改。
4 . 数据恢复
将数据库从错误状态恢复到某一个已知的正确状态的功能,称为数据库的恢复。数据恢复的基本原理就是冗余,建立冗余的方法有数据备份和登录日志文件等。
可根据故障的不同类型,采用不同的恢复策略。
(1) 事务故障的恢复。
事务故障的恢复是由系统自动完成的,对用户是透明的(不需要 D B A 的参与)。
其步骤如下:反向扫描日志文件,查找该事务的更新操作;对该事务的更新操作执行逆操作;继续反向扫描円志文件,査找该事务的其他更新操作,并做同样处理;如此处理下去,直至读到此事务的开始标记,事务故障恢复完成。
(2) 系统故障的恢复。
系统故障的恢复在系统重新启动时自动完成,不需要用户干预。
其步骤如下:正向扫描日志文件,找出在故障发生前已经提交的事务,将其事务标识记入重做( R e d o ) 队列。同时找出故障发生时尚未完成的事务,将其事务标识记入撤销 ( U n d o ) 队列;对撤销队列中的各个事务进行撤销处理:反向扫描円志文件,对每个U n d o 事务的更新操作执行逆操作;对重做队列中的各个事务进行重做处理:正向扫描日志文件,对每个 R e d o 事务重新执行日志文件登记的操作。
(3) 介质故障与病毒破坏的恢复。
介质故障与病毒破坏的恢复步骤如下:装入最新的数据库后备副本,使数据库恢复到最近一次备份时的一致性状态•,从故障点开始反向
扫描日志文件,找出已提交事务标识并记入 R e d o 队列;从起始点幵始正向扫描日志文
件,根 据 R e d o 队列中的记录,重做己完成的任务,将数据库恢复至故障前某一时刻的
一致状态。
(4)有检査点的恢复技术。
检査点记录的内容可包括建立检查点时刻所有正在执行的事务清单,以及这些事务最近一个 H 志记录的地址。采用检查点的恢复步骤如下:从重新开始文件中找到最后一个检査点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录;由该检查点记录得到检查点建立时所有正在执行的事务清单队 列 (A ) ; 建立重做队列 (R ) 和撤销队列 (U ) , 将 A 队列放入 U 队列中, R 队列为空:从检査点开始正向扫描 U 志文件,若有新开始的事务1 ,则将 I 放入 U 队列。若有提交的事务丁2,则将丁2从1;队列移到 R 队列。直至日志文件结束;对 U 队列的每个事务
执行 U n d o 操作,对 R 队列的每个事务执行 R e d o 操作。
5.4.6 数据中心的建设
如果只是将数据备份在同一个地点,即.使备份再及时,也可能面临不可恢复的风险。
例如,2008年 5 月 12日 14时 28分,我国四川省汶川县发生里氏8.0级大地震,造成了
数万人死亡,无数的房屋化为灰烬。在这种情况下,即使进行了安全保障和数据备份,
也可能使数据完全丢失,因为在地震的瞬间,可以将业务数据连同备份的数据,包括一
切设备同时毁坏。在这种情况下,就需要数据中心了,数据中心可以实现异地备份。在
异地备份的架构中,一个数据中心被损毁,其他数据中心有完整的数据保存,可以保证
数据不丢失。
为了达到异地备份的效果,数据中心的选址一般会选一个国家内地理位置相对较远的地点,或是选择不同国家作为数据中心,例如,伊拉克由于长年战事,很多大的公司将数据中心设在美国、英国或德国等地。实际上,数据中心的功能,不仅限于异地备份。数据中心形式的数据库建设为用户构建了统一的集中运行平台,建立开放式多层架构体系,优化整合现有设备资源。这样,便于实施系统资源的统一管理和维护,提高了硬件设备的利用率,也提高了系统的可扩展能力,从而降低各类应用系统的建设成本。以信息数据库为核心的数据中心建设,可从以下几个方面着手:
(1) 构建专用存储系统,集中存储数据。
采用网络存储技术,构建专用、大容量存储系统,通过 K 域划分,满足各类数据的集中存储,保证存储系统的灵活性和可扩展性。有关网络存储技术的详细知识,将在6.2.4节中介绍。
(2) 构建统一的数据库集中运行平台,提高数据处理能力。
按 照 “运行可靠、性能优良、满足应用”的要求,建设计算机集群系统,采用并行运行和互为备份的集群技术,保证计算机高效和不间断运行。同时,通过分区技术,在计算机上构建不同应用数据库的运行区域,满足不同应用数据库系统的运行需要,使各类应用数据库既集中又相对独立地运行,以降低不同数据库之间的相互影响,提卨数据库处理能力。有关计算机集群
技术的详细知识,将 在 19.6节中介绍。
(3) 建立多种系统应用平台,提高集中运行平台的适应性。
按照各类应用系统所需的不同系统运行环境,建立与之相适应的多种系统运行平台,提供 U N I X 、 W i n d o w s 或Linux 平台上应用服务和 W e b 浏览等应用。通过共享统一的存储系统,建立主流数据库运行平台,提供数据库服务,为有关部门的不同应用系统提供相应的运行环境。
(4) 整合优化现有计算机设备资源,提高集中管理和应用的水平。
根据系统建设的整体框架要求,按照数据集中整合和应用的需要,对用户现有计算机设备资源进行调整,纳入统一、集中运行管理框架中。同时,按照设备集中管理的要求,在数据中心计算机房建成后,将用户各类服务器及相关设备集中起来,根据不同应用的要求进行整合优化,实行统一的运行与管理。
(5) 扩展数据备份系统,提高系统可靠性。
数据中心的数据是企业极其宝贵的重要资源,必须在安全上做到万无一失,且各类应用系统要求7 X 24小时不间断运行,要求有多层面的系统可靠性保障,所有层面要建立相应的容错机制,确保设备发生故障或升级维护时系统服务不中断;设备0 身必须具备容错能力,尽可能在设备一级就能屏蔽大多数故障。此外,构建存储系统的“快照”复制和磁带备份系统,包含专业的数据备份
系统、备份管理策略与手段,通过在现有备份系统基础上进行扩展,实现数据的快速备
份和统一的常规备份,以及高效的数据恢复,使集中运行平台具备高效、全面备份数据
的能力,保证数据的安全可靠。有关容错机制的详细知识,将 在 19.4节 和 19.5节中介绍。
(6) 建立集中运行管理机制,实现设备和系统资源的统一管理。
按照信息系统和数据集中运行的要求,建立设备和系统的集中运行管理机制,实现对集中设备和系统的性能监控、配置优化和维护服务的统一运行管理,确保设备和系统的高效、町靠和安全地
运行,提高对设备和系统的运行管理水平。
设计一个能高效、安全地运行,设备之间有一定冗余,应用之间共亨资源的数据中心,是一项复杂的任务,其中涉及数据库服务器、存储系统、负载均衡系统和应用服务器等的设计工作。在数据中心的设计中,需要遵循实用性与先进性、高性能与高负载能力、安全性与可靠性、灵活性与可扩展性、开放性与标准化、经济性与保护投资、集中运行与逐步过渡等原则。数据中心建设的一个核心任务就是容灾,有关容灾技术的详细知识,将 在 18.6节中介绍。