要想数据库中的数据达到应用的要求,必须对其进行各种控制,这就是DBMS的控制功能,包括并发控制,性能优化,数据完整性和安全性,以及数据备份与恢复等问题。这些技术虽然给人们的感觉是边缘性技术,但对DBMS的应用而言,却是至关重要的。
一.并发控制
在多用户共享系统中,许多事务可能同时对同一数据进行操作,称为并发操作。此时,DBMS的并发控制子系统负责协调并发事务的执行,报纸数据库的完整性不受破坏,同时避免用户得到不正确的数据。
1.事务的基本概念
DBMS的基本工作单位是事务,事务的用户定义的一个数据库操作序列,这些操作序列要么不做,要么全做,是一个不可分割的逻辑工作单位,事务具有以下特色:
(1)原子性。事务的数据库的逻辑工作单位,事务的原子性保证事务包含的一组更新操作是原子不可分的。
(2)一致性。一致性是指使数据库从一个一致性状态变到另一个一致性状态。
(3)隔离性。隔离性是指一个事务的执行不能被其它事务干扰,即一个事务内部的操作及使用的数据对并发的其它事务是隔离的,并发执行的各个事务之间不能相互干扰。
(4)持久性。持久性也称为永久性,是指事务一旦提交,改变就是永久性的,无论发生何种故障,都不应该对其有任务影响。
2.数据不一致问题
数据库的并发操作会带来一些数据不一致的问题,例如丢失修改,读脏数据和不可重复读等。
(1)丢失修改。事务A与事务从数据库中读入同一数据并修改,事务B的提交结构破坏了事务A提交的结构。
(2)读脏数据。事务A修改某一数据,并将其写回磁盘,事务B读取同一数据后,事务A由于某种原因被撤销,这时事务A已经修改过的数据恢复原值,数据B读到的数据就与数据库中的数据不一致,是不正确的数据。
(3)不可重复读。不可重复读是指事务A读取数据之后,事务B执行了更新操作,事务A使用的仍然是更新前的值,造成了数据的不一致。
3.封锁协议
处理并发控制的主要方法是采取封锁技术,主要有两种封锁,X封锁(排他型封锁),S封锁(共享型封锁)。
在多个事务并发执行的系统中,主要采取封锁协议来进行处理,常见的封锁协议如下:
(1) 一级封锁协议。事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。一级封锁协议可防止丢失修改,并保证事务T 是可恢复的,但不能保证可重复读和不读"脏数据"。
( 2 ) 二级封锁协议。一级封锁协议加上事务T 在读取数据R 之前先对其加S 锁,读完后即可释放S 锁。二级封锁协议可防止丢失修改,还可防止读"脏数据",但不能保证可重复读。
( 3 ) 三级封锁协议。 一 级封锁协议加上事务T 在读取数据R 之前先对其加S 锁,直到事务结束才释放。三级封锁协议可防止丢失修改、读 "脏数据",且能保证可重复读。
( 4 ) 两段锁协议。所有事务必须分两个阶段对数据项加锁和解锁。其中扩展阶段是在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁,收缩阶段是在释放一个封锁之后,事务不能再申请和获得任何其他封锁。若并发执行的所有事务均遵守两段封锁协议,则对这些事务的任何并发调度策略都是可串行化的。遵守两段封锁协议的事务可能发生死锁。
4 .死锁问题
采用封锁的方法虽然可以有效防lh数据的不一致性,但封锁本身也会产生一些麻烦,最主要就是死锁问题。死锁是指多个用户申请不同封锁,由于申请者均拥有一部分 封锁权,而又需等待另外用户拥有的部分封锁而引起的永无休止的等待
二.数据库性能优化
通常,对一个集中式数据库的性能进行优化,可以从硬件升级、数据库设计、检索策略和查询优化等方面入手。
1.硬盘升级
要提升数据库的运行速度,最直接的方式就是硬件升级,涉及的硬件包括处理器,内存,磁盘子系统和网络。
2.数据库设计
在数据库设计阶段,可以着手考虑性能优化问题。对数据库进行设计优化,主要从逻辑设计和物理设计两方面入手。
逻辑设计方面:
(1)将常用的计算属性(例如,总计和最大值等)存储到数据库实体中。
(2)重新定义实体,以减少外部属性数据或行数据的开支。
(3)将关系进行水平或垂直分割,以提升并行访问度。
物理设计方面:
(1)与每个属性相关的数据类型应该反映数据所需的最小存储空间,特别是对于被索引的属性更是如此。
(2)将一个频繁使用的大关系分割开,并放在两个单独的智能型磁盘控制器的数据库设备上,这样也可以提高性能。因为有多个磁头在查找,数据分离也能提高性能。
(3)将数据库中文本或图像属性的数据存放一个单独的物理设备上,也可以提高性能。如果使用专用的智能型控制器,就能进一步提高性能。
3.索引优化策略
索引是提高数据库查询速度的有效武器,而数据库查询往往又是数据库系统中最频繁的操作,因此,索引的建立与选择对数据库性能优化很重要。建立索引的原则:
(1)建立索引时,选择经常作为查询而不更新的属性。避免对一个经常被更新的属性建立索引。
(2)一个关系上的索引过多会影响更新、插入和删除的性能,所有的索引都必须跟着做相应的调整。
(3)尽量分析出每个重要查询的使用频度,找出使用最多的索引,然后可以对这些索引进行适当的优化。
(4)对于数据量小的关系不必建立索引。
4.查询优化
(1)建立物化视图或尽可能减少多表查询;
(2)以不相干的子查询替代想干子查询;
(3)只检索需要的属性;
(4)用待IN的条件子句等价替换OR子句;
(5)经常提交COMMIT尽早释放锁。
三.数据库的完整性
数据库的完整性是指数据库数据的正确性和相容性。数据库完整性由各种各样的完整性约束来保证。
1.完整性约束条件
保证数据完整的方法之一是设置完整性检查,即对数据库中的数据设置一些约束条件,这是数据的语义体现。
2.实体完整性
实体完整性要求主键中的任意属性不能为空。
3.参照完整性
若基本关系及中含有与另一基本关系S 的主键PK相对应的属性组FK(FK 称为R的外键),则参照完整性要求,对及中的每个元组在F K 上的值必须是S 中某个元组的PK 值,或者为空值。
4.用户定义的完整性
用户定义的完整性就是针对某一具体数据库的约束条件,反应某一具体应用所涉及的数据必须满足的语义要求。
5.触发器
触发器是在关系型DBMS中应用比较多的一种完整性保护,其功能比完整性约束要强得多。
四.数据库的安全性
数据库系统的安全性在技术上依赖于两种方式,一种是DBMS本身提供的用户身份识别、视图、使用权限控制和审计等管理措施,大型DBMS均有此功能;另一种就是靠应用程序来实现对数据库访问进行控制和管理。
1.用户标识和鉴别
(1)口令验证
(2)强身份认证
(3)数据授权
当用户通过身份认证以后,并不是所有的用户都能操作所有的数据,要分不同的用户角色来区别对待。一般可以将权限角色分为三类:数据库登录权限类、资源管理权限类和DBA。
2.视图
视图可以被看成足虚拟关系或存储查询,可通过视图访问的数据不作为独特的对象存储在数据库内,数据库内存储的是select语句。
3.审计与追踪
如果身份认证是一种事前的防范措施,审计则是一种事后监督的手段,跟踪也是DBMS提供的监视用户操作的功能。
五.备份与恢复技术
需要备份与恢复技术来进一步保障数据的安全,即当数据被破坏后,在一定时间内将数据库调整到破坏前的状态。
数据库备份有多种分类方式。按备份的实现方式,可分为物理备份与逻辑备份,。
1.物理备份
物理备份又可以分为冷备份与热备份;按备份数据量情况,可分为完全备份、增量备份与差异备份。其中,完全备份是指将整个数据库中的数据进行备份,增量备份是指备份上一次备份(包括完全备份、增量备份和差异备份)后发生变化的数据,差异备份是指备份上一次完全备份后发生变化的所有数据。
2.逻辑备份
逻辑备份是指利用DBMS自带的工具软件备份和恢复数据库的内容。逻辑备份是一个非常有效的手段,既简单又方便,但现在随着数据量的越来越大,甚至高达TB级,利用逻辑备份来恢复数据库己力不从心, 速度很慢。
3.日志文件
日志文件是用来记录对数据库每一次更新活动的文件。对于任何一个事务,事务日志都有非常全面的记录,根据这些记录可以将数据文件恢复成事务前的状态。从事务动作开始,事务日志就处于记录状态,事务执行过程中对数据库的任何操作都记录在内,直到用户提交或回滚后才结束记录。
4.数据恢复
将数据库从错误状态恢复到某一个已知的正确状态的功能,称为数据库的恢复。数据恢复的基本原理就是冗余,建立冗余的方法有数据备份和登录日志文件等。可根据故障的不同类型,采用不同的恢复策略。