第七章 系统实现技术本章重要概念(一)
( 1) 系统目录及其和 DBMS各子系统的联系 。
( 2) 事务的定义,COMMIT和 ROLLBACK的语义,
事务的 ACID性质,事务的状态变迁图 。
( 3) 存储器类型,稳定存储器的实现,数据传送过程 。
( 4)恢复的定义、基本原则和实现方法,故障的类型,检查点技术,REDO和 UNDO操作,运行记录优先原则。
本章重要概念(二)
( 5) 并发操作带来的三个问题,X锁,PX协议,
PXC协议,S锁,PS协议,PSC协议,活锁,
饿死和死锁,并发调度,串行调度,并发调度的可串行化,两段封锁法,SQL中事务的存取模式和隔离级别 。
( 6) 完整性的定义,完整性子系统的功能,完整性规则的组成 。 SQL中的三大类完整性约束,
SQL3中的触发器技术 。
( 7)安全性的定义、级别,权限,SQL中的安全性机制,几种常用的安全性措施,自然环境的安全性。
主要内容和学习要求
7.1 系统目录 (理解)
7.2 事务 (综合应用)
7.3 数据库的恢复 (理解)
7.4 数据库的并发控制 (了解)
7.5 并发事务的可串行化和可恢复性(了解)
7.6 数据库的完整性 (理解)
7.7 数据库的安全性 (理解)
小结系统目录
什么是系统目录
系统目录的重要性
系统目录的内容
元数据
RDBMS系统目录的存储内容
关系名,属性名,属性域(数据类型)
各种约束,主键,辅助键,外键,空值 /非空值
视图的外部级描述,存储结构和索引的内部级描述
安全性和授权规则
数据完整性规则注意:这些数据都以表格的形式存在某些 RDBMS的系统目录内容
REL_AND_ATTR_CATALOG
REL_NAME ATTR_NAME ATTR_TYPE MEMBER_OF_PK MEMBER_OF_FK FK_RELATION
关系名属性名属性类型主键 外键 外键关系
RELATION_KEYS
REL_NAME KEY_NUMBER MEMBER_ATTR
(a)存储键信息的目录关系
RELATION_INDEXES
REL_NAME INDEX_NAME MEMBER_ATTR INDEX_TYPE ATTR_NO ASC_DESC
(b)存储索引信息的目录关系
VIEW_QUERIER VIEW_ATTRIBUTES
VIEW_NAME QUERY VIEW_NAME ATTR_NAME ATTR_NUM
(c)存储视图信息的目录关系系统目录的扩充 ER图属性键视图属性视图关系关系基本关系索引属性名键类型
d
数据类型键编号关系名查询索引类型 属性序号索引名属性名
K_A
R_I
R_F
I_A
K_I
R_A
R_K
V_A
外键系统目录和 DBMS各子系统的联系
DDL编译程序
DML优化程序
DML命令的外部级到概念级映象
DML编译程序
DML分析校验程序
DBMS
处理和检查三级模式两级映象检查查询涉及的关系名属性名等将查询涉及的概念模式转换成内模式,
产生访问计划根据物理结构优化查询执行方案将查询中的视图由外部级导到概念级映象处理和检查权限授权和安全程序主要内容
7.1 系统目录
7.2 事务
7.3 数据库的恢复
7.4 数据库的并发控制
7.5 并发事务的可串行化和可恢复性
7.6 数据库的完整性
7.7 数据库的安全性
小结事务
定义事务 (transaction)是构成单一逻辑工作单元的操作集合
性质
原子性 (Atomicity):事务 是一个不可分割的工作单元
一致性 (Consistency),即数据不会应事务的执行而遭受破坏
隔离性 (Isolation),在多个事务并发执行时,系统应保证与这些事务先后单独执行时的结果一样
持久性 (Durability),一个事务一旦完成全部操作后,它对数据库的所有更新应永久地反映在数据库中例子:事务及其性质问题,设银行数据库中有一转账事务 T,从账号 A转一笔款子( $50)
到账号 B。
相应的事务:
T,read( A) ;
A:=A–50;
write( A) ;
read( B) ;
B:=B + 50;
write( B),
原子性( A,B同时被修改或同时保持原值)
一致性( A+B的值不变)
隔离性
持久性事务提交和事务撤销
事务的所有操作都完成了,则事务提交
(COMMIT),否则事务撤销 (ROLLBACK)
BEGIN TRANSACTION标志事务开始执行
BEGIN TRANSACTION和 COMMIT或
ROLLBACK一起保证了事务的四个性质
对数据库访问的两个基本操作:读和写,
但完成写操作后,数据可能暂时放在内存中,而非直接写进数据库。
主要内容
7.1 系统目录
7.2 事务
7.3 数据库的恢复
7.4 数据库的并发控制
7.5 并发事务的可串行化和可恢复性
7.6 数据库的完整性
7.7 数据库的安全性
小结存储器类型
易失性存储器( volatile storage)
内存,cache存储器
非易失性存储器( nonvolatile storage)
磁盘和磁带
稳定存储器( stable storage)
这是一个理论上的概念。存储在稳定存储器中的信息是决不会丢失的。
稳定存储器 的实现
数据备份
数据银行块和块的操作
块、物理块和缓冲块
块的操作
input( A),把物理块 A的内容传送到内存的缓冲块中 。
Output( B):把缓冲块 B的内容传送到磁盘中恰当的物理块中
B
内存
A
B
磁盘
input( A)
output( B)
图 7.5 块操作数据访问
write( X)
xi
包含 x的块 Bx存在,read( X)事务系统开始请求 read(X)
事务工作区分配
X
磁盘缓冲区扫描内存磁盘包含 x的块 Bx存在,Input(B)
恢复和原子性的联系银行转账系统
A=2000 B=1000
事务
A=A-100
B=B+100
Output( A) Output( B)
断电或其他故障假设没有事务的原子性,那么重新启动事务时要么 A因为再执行一遍而为 1800,
要么 B因从未执行而保持原值恢复的基本原则和实现方法
基本原则,,冗余,,即数据库重复存储
具体实现方法
平时做好两件事:转储和建立日志
周期地(比如一天一次)对整个数据库进行拷贝,转储到另一个磁盘或磁带一类存储介质中。
建立日志数据库。记录事务的开始、结束及数据每一次插入、删除和修改前后的值,并写到,日志,库中。
一旦发生数据库故障,分两种情况进行处理
如果数据库已被破坏,则装入 last数据库备份,再利用日志库将这两个数据库状态之间的所有更新重新做一遍。
如果数据库未被破坏,但某些数据不可靠,则撤消所有不可靠的修改,把数据库恢复到正确的状态。
故障类型和恢复方法
事务故障
可以预期的事务故障,如存款余额透支等
非预期事务故障,如运算溢出、数据错误、
死锁等
系统故障硬件故障、软件错误或掉电等等
介质故障 (硬故障 )
磁盘物理故障或遭受病毒破坏检查点方法
什么是检查点方法
检查点方法的恢复算法
根据日志文件建立事务重做队列和事务撤销队列
对 重做队列中的事务进行 REDO处理,对撤消队列中的事务进行
UNDO处理
-----------
----
----
----
----
----
----
--
事务检查点故障点时间检查点
T1
T3
T2
T5
T4
事务 T1不必恢复 ;事务 T2和事务 T4必须重做( REDO) ;事务 T3和事务 T5必须撤消( UNDO)
SQL对事务的支持
无 begin transaction
Commit
Rollback
游标主要内容
7.1 系统目录
7.2 事务
7.3 数据库的恢复
7.4 数据库的并发控制
7.5 并发事务的可串行化和可恢复性
7.6 数据库的完整性
7.7 数据库的安全性
小结并发操作带来的问题 1---丢失更新时间 更新事务 T1 数据库中 A的值 更新事务 T2
T0 100
t1 FIND A
t2 FIND A
t3 A:=A-30
t4 A:=A*2
t5 UPD A
t6 70 UPD A
t7 200
图 7.10 在时间 t7丢失了事务 T1的更新
( FIND表示从 DB中读值,UPD表示把值写回到 DB)
并发操作带来的问题 2---读脏数据时间 更新事务 T1 数据库中 A的值 读事务 T2
t0 100
t1 FIND A
t2 A:=A-30
t3 UPD A
t4 70 FIND A
t5 *ROLLBACK*
t6 100
图 7.11 事务 T2在时间 t4读了未提交的 A值( 70)
时间 更新事务 T1 数据库中 A的值 更新事务 T2
t0 100
t1 FIND A
t2 A:=A-30
t3 UPD A
t4 70 FIND A
t5 A:=A*2
t6 UPD A
t7 140
t8 *ROLLBACK*
t9 100
图 7.12 事务 T2在时间 t4读了未提交的 A值,并在时间 t8丢失了自己的更新并发操作带来的问题 3---错误求和时间 读事务 T1 数据库中 A,B,C的值 更新事务 T2
t0 40,50,30
t1 FIND A
t2 SUM:=A
t3 FIND B
t4 SUM:=SUM+B
t5 FIND C
t6 C:=C-10
t7 UPD C
t8 40,50,20 FIND A
t9 A:=A+10
t10 UPD A
t11 50,50,20 COMMIT
t12 FIND C
t13 SUM:=SUM+C
事务T
1
进行了不一致的分析解决方法
封锁技术
时标
X锁和 S锁
X锁定义
操作
XFIND R
XRELEASE R
PX协议,
任何企图更新记录 R的事务必须先执行,XFIND R‖操作,以获得对 R的 X锁,才能读或写记录 R;
如果未获准 X锁,那么这个事务进入等待队列,一直到获准 X锁,
事务才能继续做下去。
PXC协议
X锁的解除操作应该合并到事务的结束( COMMIT或 ROLLBACK)操作中
S锁定义
操作
SFIND R
UPDX R
SRELEASE R
PS协议任何要更新记录 R的事务必须先执行
,SFIND R‖操作,以获得对 R的 S
锁。当事务获准对 R的 S锁后,若要更新记录 R必须用,UPDX R‖操作,这个操作首先把 S锁升级为 X
锁,若成功则更新记录,否则这个事务进入等待队列
PSC协议
S锁的解除操作应该合并到事务的结束例:使用 X锁封锁解决数据丢失时间 更新事务 T1 数据库中 A的值 更新事务 T2
t0 100
t1 XFIND A
t2 XFIND A(失败)
wait(等待)
t3 A:=A-30 wait
t4 wait
t5 UPD A wait
t6 70 wait
t7 COMMIT(包括解锁) wait
t8 XFIND A(重做)
t9 A:=A*2
t10 UPD A
t11 140 COMMIT(包括解锁)
例:使用 S锁封锁解决数据丢失时间 更新事务 T1 数据库中 A的值 更新事务 T2
t0 100
t1 SFIND A
t2 SFIND A
t3 A:=A-30
t4 A:=A*2
t5 UPDX A(失败)
t6 wait UPDX A(失败)
t7 wait Wait
t8 wait Wait
封锁的相容矩阵注:
① N=NO,不 相 容 的 请 求
Y=YES,相容的请求
② X,S,-:分别表示 X锁,
S锁,无锁
③ 如果两个封锁是不相容的,
则后提出封锁的事务要等待 。
X S —
X
S

N N Y
N Y Y
Y Y Y
T2
T1
封锁的粒度
封锁对象的大小称为封锁的粒度
( granularity)
封锁的对象
逻辑单元,属性值、属性值集合、元组、关系、索引项、整个索引、整个数据库
物理单元,页(数据页或索引页)、块
封锁粒度与系统并发度和并发控制开销密切相关。粒度越大,系统中能被封锁的对象就越少,
并发度就越小,但同时系统的开销也就越小;
相反,粒度越小,并发度越高,系统开销越大封锁带来的问题 1---(活锁)
T1
XFIND A
T2
XFIND A
T3
XFIND A
A
A已被封锁,
不成功,等待
A刚被释放,成功时间点
A刚被 T2释放,成功
……
T1永远等待活锁!
解决方法:先来先服务封锁带来的问题 2---饿死事务序列
A1
A2
A3
A4
A5

资源 A
T2
T2永远不能封锁解决方法,改变授权方式:
当事务 T2中请对数据项 Q加 S锁时,授权加锁的条件是:
① 不存在在数据项 Q上持有 X锁的其他事务;
② 不存在等待对数据项 Q加锁且先于 T2申请加锁的事务每一个事务均请求
A的 S锁,成功后一段时间释放请求 A
的 X锁封锁带来的问题 3---死锁时间 事务 T1 事务 T2
t0 XFIND A
t1 XFIND B
t2 XFIND B
t3 wait XFIND A
t4 wait wait
死锁若事务依赖图有环则可能死锁
T1
T2
T3
T4
图 7.20 事务的无环依赖图
T1
T2
T3
T4
图 7.21 事务的有环依赖图并发操作的调度
事务的调度,事务的执行次序称为,调度,
串行调度,如果多个事务依次执行,则称为事务的串行调度( Serial Schedule)
并发调度,如果利用分时的方法,同时处理多个事务,则称为事务的并发调度( Concurrent Schedule)
可串行化,如果一个并发调度的执行结果与某一串行调度的执行结果等价,那么这个并发调度称为
,可串行化的调度,,否则是不可串行化的调度两段封锁协议
在对任何一个数据进行读写操作之前,事务必须获得对该数据的封锁;
在释放一个封锁之后,事务不再获得任何其他封锁
遵守该协议的事务分为两个阶段:获得封锁阶段,也称为,扩展,阶段;释放封锁阶段,也称为,收缩,阶段
如果所有的事务都遵守,两段封锁协议,,则所有可能的并发调度都是可串行化的
SQL中事务的存取模式
READ ONLY(只读型),事务对数据库的操作只能是读操作。定义这个模式后,表示随后的事务均是只读型。
READ WRITE(读写型),事务对数据库的操作可以是读操作,也可以是写操作。定义这个模式后,
表示随后的事务均是读写型。在程序开始时默认这种模式
这两种模式可用下列 SQL语句定义:
SET TRANSACTION READ ONLY
SET TRANSACTION READ WRITE
SQL中事务的隔离级别
SERIALIZABLE(可串行化),允许事务并发执行,但须保证并发调度可串行化,是默认级别。
REPEATABLE READ(可重复读),只许事务读已提交的数据,
且两次读之间不许其他事务修改此数据。事务可以不可串行化。
READ COMMITTED(读提交数据),允许事务读已提交的数据,
但不要求,可重复读,。
READ UNCOMMITTED(可以读未提交数据),允许事务读已提交或未提交的数据。
上述四种级别可以用下列 SQL语句定义:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
主要内容
7.1 系统目录
7.2 事务
7.3 数据库的恢复
7.4 数据库的并发控制
7.5 并发事务的可串行化和可恢复性
7.6 数据库的完整性
7.7 数据库的安全性
小结完整性子系统和完整性规则
数据库的完整性
完整性子系统的主要功能
监督事务的执行,并测试是否违反完整性规则
若有违反现象,则采取恰当的操作,譬如拒绝操作、报告违反情况、改正错误等方法来处理
完整性规则
什么时候使用规则进行检查(称为规则的,触发条件,)
要检查什么样的错误(称为,约束条件,或,谓词,)
如果查出错误,应该怎么办(称为,ELSE子句,,即违反时要做的动作)
SQL中的完整性约束 1---域约束和断言
域约束用,CREATE DOMAIN‖语句定义新的域,并且还可出现 CHECK子句
断言
如果完整性约束牵涉面较广,与多个关系有关,或者与聚合操作有关,那么 SQL2提供,断言,
( Assertions)机制让用户书写完整性约束
CHECK ASSERTION <断言名 >
CHECK( <条件 >)
DROP ASSERTION <断言名 >
定义一个新的域 COLOR,可用下列语句实现:
CREATE DOMAIN COLOR CHAR( 6) DEFAULT
ˊˊ
CONSTRAINT V_COLORS
CHECK( VALUE IN ( ˊ Redˊ,ˊYellowˊ,
ˊBlueˊ,ˊ Greenˊ,ˊˊ )) ;
每位教师开设的课程不能超过 10门 。
CREATE ASSERTION ASSE1 CHECK ( 10 >= ALL
( SELECT COUNT ( C# ) FROM C GROUP BY
TNAME)) ;
SQL中的完整性约束 2---基本标的约束
候选键的定义
UNIQUE( 〈 列名序列 〉 )或 PRIMARY KEY( 〈 列名序列 〉 )
外键的定义
FOREIGN KEY( 〈 列名序列 〉 ) REFERENCES <参照表 > [( <列名序列 >) ][ ON DELETE <参照动作
> ][ ON UPDATE <参照动作 > ]
―检查约束,的定义
CHECK( 〈 条件表达式 〉 )
关于外键约束完整性的补充
删除参照表中元组时的考虑
NO ACTION
CASCADE方式
RESTRICT方式
SET NULL方式
SET DEFAULT方式
修改参照表中主键值时的考虑、
NO ACTION
CASCADE方式
RESTRICT方式
SET NULL方式
SET DEFAULT方式关于数据库完整性的例子学生关系 S( S#,SNAME,AGE,SEX,SDEPT)
选课关系 SC( S#,C#,GRADE)
课程关系 C( C#,CNAME,CDEPT,TNAME)
在教学数据库中,要求 S中的元组满足条件:男生年龄在 15~35
岁之间,女生年龄在 15~30岁之间 。对应的语句为:
CHECK( AGE >= 15 AND
( (SEX =ˊ 男 ˊ AND AGE <=
35) OR (SEX =ˊ 女 ˊ AND
AGE <= 30)));
CREATE TABLE SC( S# CHAR( 4),C#
CHAR4),GRADE SMALLINT,PRIMARY KEY
( SNO,NO),
CHECK( S# IN( SELECT S# FROM S)),
CHECK( C# IN( SELECT C# FROM C)))
① 在 SC中插入一个元组,若 C#值在 C中不存在,
则系统将拒绝这个插入操作。
② 在 SC中插入一个元组,若 S#值在 S中不存在,
则系统将拒绝这个插入操作。
③ 在 S中删除一个元组,这个操作将与关系 SC中的检查子句无关。若此时 SC中存在被删学生的选课元组时,SC将违反检查子句中条件。
SQL3的触发器
什么是触发器
触发器的组成
事件:插入、删除、修改等操作,引发触发器的操作
条件:引发触发器的条件
动作:引发触发器后的工作触发器的命名动作时间 触发事件 目标表名旧值和新值的别名表动作间隔尺寸触发动作 动作时间条件动作体
SQL3的触发器实例
下面是应用于选课关系 SC的一个触发器。这个触发器规定,在修改关系 SC的成绩值时,要求修改后的成绩一定不能比原来的低,否则就拒绝修改
CREATE TRIGGER TRIG1 AFTER UPDATE OF GRADE ON SC
REFERENCING
OLD AS OLDTUPLE
NEW AS NEWTUPLE
FOR EACH ROW
WHEN ( OLDTUPLE.GRADE > NEWTUPLE.GRADE)
UPDATE SC SET GRADE = OLDTUPLE.GRADE
WHERE C# = NEWTUPLE.C#
主要内容
7.1 系统目录
7.2 事务
7.3 数据库的恢复
7.4 数据库的并发控制
7.5 并发事务的可串行化和可恢复性
7.6 数据库的完整性
7.7 数据库的安全性
小结数据库安全性级别
什么是数据库的安全性
安全性级别
环境级:计算机系统的机房和设备应加以保护,防止有人进行物理破坏。
职员级:工作人员应清正廉洁,正确授予用户访问数据库的权限。
OS级:应防止未经授权的用户从 OS处着手访问数据库。
网络级:由于大多数 DBS都允许用户通过网络进行远程访问,
因此网络软件内部的安全性是很重要的。
DBS级,DBS的职责是检查用户的身份是否合法及使用数据库的权限是否正确。
(1)读权限:允许用户读数据,但不能改数据。
⑵ 插入权限:允许用户插入新数据,但不能改数据。
⑶ 修改权限:允许用户改数据,但不能删除数据。
⑷ 删除权限权限
访问数据的权限
索引( Index)权限:
允许用户创建和删除索引。
资源( Resourse)权限:
允许用户创建新的关系。
修改( Alteration)权限:允许用户在关系结构中加入或删除属性。
撤消( Drop)权限:
允许用户撤消关系。
DBA
U1
U2
U3
权限的授予和回收
DBA
U1 U4
U2 U5
U3
权限转授图一个用户拥有权限的充分必要条件是在权限图中从根结点到该用户结点存在一条路经
DBA
U1
U2
U3
DBA
U1
U2
U3
DBA
U1
U2
U3
SQL中的安全性机制
视图
SQL2中的用户权限及其操作
用户权限,SELECT INSERT DELETE
UPDATE REFERENCES USAG
授权语句
GRANT <权限表 > ON <数据库元素 > TO <用户名表 >
[WITH GRANT OPTION]
回收语句
REVOKE <权限表 > ON <数据库元素 > FROM <用户名表 > [RESTRICT | CASCADE]
SQL中的权限操作实例
GRANT SELECT,UPDATE ON S TO WANG WITH
GRANT OPTION
GRANT INSERT ( S#,C#) ON SC TO LOU
WITH GRANT OPTION
GRANT REFERENCES ( CNO) ON C TO BAO
WITH GRANT OPTION
GRANT USAGE ON DOMAIN AGE TO CHEN
REVOKE SELECT,UPDATE ON S FROM WANG
CASCADE
REVOKE GRANT OPTION FOR REFERENCES ( C#)
ON C FROM BA
常用的安全性措施
强制存取控制
用户i
只能查看比它级别低或同级的数据;
用户i
只能修改和它同级的数据
统计数据库的安全性
一个查询查到的记录个数至少是n;
两个查询查到的记录的



数目至多是
m
数据加密法
普通加密法
明键加密法
自然环境的安全性主要内容
7.1 系统目录
7.2 事务
7.3 数据库的恢复
7.4 数据库的并发控制
7.5 并发事务的可串行化和可恢复性
7.6 数据库的完整性
7.7 数据库的安全性
小结小结
事务以及事务的四个性质
数据库数据的恢复原理、常用技术、故障类型和恢复方法
检查点技术
封锁操作以及封锁带来的问题
并发操作和可串行化
数据库的完整性以及 SQL中相应的语句本章的重点篇幅
( 1) 教材中 P261 的图 7.7。 ( 检查点技术 )
( 2) 并发操作带来的四个问题,封锁带来的三个问题,并发调度的可串行化 。
( 教材 P265-276)
( 3) SQL中完整性约束的实现:断言 ( 教材 P290) 。
( 4) 安全性中的授权语句 ( 教材 P298) 。