数据库第八章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
事务T1: 读B; A=B+1; 写回A; 事务T2: 读A; B=A+1; 写回B; 设A,B初值均为2, 按T1-T2次序串行的执行它们时,结果是A=3, B=4. 若按T2-T1次序串行的执行它们时,结果是A=4, B=3. 1.串行调度 2. 可串行化
8.3.5 两段锁协议
一.基本概念 二. 两段锁协议规定所有的事务应遵循的规则: 1.在对任何数据进行读写之前,事务首先要获得对该数据的封锁. 2. 在释放一个封锁之后,事务不在获得任何其他封锁.
S
S#
SN
SD
I. TYPE. I.
CHAR CHAR CHAR
I. LENGTH. I.
5
20
15
I. KEY.
I.
K
NK
NK
图8-6
2. 对于其它的约束条件则在关系名下输入: I. CONSTR (<条件表>) I.
条件表可以包括I.(插入),D.(删除),U.(更新)中的任何一个或全部.
3.举例
三.建立不同的约定,形成不同级别的封锁协议
表 8-5 不同级别的封锁协议
X锁
S锁
一致性保证
立 结 立 结 不丢失 事务可 不读 可重复 即 束 即 束 修改 恢复 ‘脏’ 读
数据
1
√
√
√
2
√√
√
√
√
√
√
√
√
√
√
四.封锁尺度(granularity)
8.3.3 活锁和死锁
一.活锁产生的原因和解决方法 1.活锁产生的原因 2.避免活锁的方法
SC
S# C# G
I.AUTR(I.). WP I. N C
>90
8.2 完 整 性
数据库的完整性是指数据的正确性和相容性.
8.2.1 完整性约束条件
一.值的约束和结构约束 1.关于对数据值的约束 这类约束条件是指对数据取值类型、范围、精度等的规定。
2.关于数据之间联系的约束 同一关系的不同属性之间可以有一定的联系,从而应满足一定 的约束条件. 不同的关系之间也可以有联系,因而不同关系的属性之 间也可满足一定的约束条件.
(b) 不能重复读
T1
T2
①读C=100
C=C*2 写回C
②
读C=200
③ ROLLBACK C恢复为100
(c) 读脏数据
图8-10
8.3.2 封锁(Locking)
一.基本的封锁类型 1.排它锁(Exclusive locks),简记为X锁 2.共享锁(Share locks),简记为S锁
可以用相容矩阵(图8-11)来表示这些控制方式.
除开用子模式外,DBTG系统还提供了一整套以存取控制锁与 存取控制码为基础的安全设施。
1. 存取控制锁子句格式
ACCESS CONTROL LOCK [FOR || 某些 DML 语句|| ]IS
literal-1
literal-2
lock-name-1
OR lock-name-2
……
PROCEDURE db-proc-1
S
S# SN SA SD
I.AUTR(P.).WP I. N A M D
b. 将对关系S的四种存取权限授予用户WP.
S
S# SN
I.AUTR.WP I.
NA
SA SD MD
c. 任意一个学生可以读SC关系中关于自己的元组.
SC
S# C# G
I.AUTR(P.). Z I. Z
CZ GZ
d. 用户可以插入成绩在90分以上的SC元组.
二. QBE系统
QBE系统可授予用户四种权限,即插入(I)、删除(D)、更新(U)和 检索(P).系统同样用表格的形式规定安全性约束条件.某一关系的所 有者在关系框架中输入一个元组.
1. 授权格式: I . AUTR (<表>), <名字> I .
2.举例: a. 将检索关系S的权限授予用户WP.
关系 S 关系 S 关系 C SC.G SC.S# SC.C# ……
SELECT UPDATE ALL UPDATE SELECT SELECT ……
3.依赖于数据对象的内容的授权
用户名 WANGPIN ZHANGMIN ZHANGMIN ……
表 8-3
数据对象名 允许的操作类型
关系 S
SELECT
比标准的SELECT语句有两点扩充. 例1. 每当在学生选课SC表中加入一个记录时,保证C#与课程表 C中的某个C#相同,S#与学生表S中的某个S#相同.
在SC表对应的块上定义一个pre-insert触发器.
SELECT ‘X’
FROM S,C
WHERE S.S# =:SC.S# AND C.C# =:SC.C#;
一、静态转储 二、动态转储
8.4.3 日志文件
日志文件是用来记录对数据库每次更新活动的文件. 一. 登记日志文件 “先写日志文件”,然后写数据库的原则. 二. 事务恢复
那么在用户程序中就要提供相同的KEY值: PROCEDURE DIVISION. DECLARATIVE S ……USE FOR ACCESS CONTROL ON ERASE FOR S. MOVE ‘ENRMT’ TO DB-ACCESS-CONTROL-KEY END DECLARATIVE S. …… MOVE ‘S5’ TO SNO IN S. FIND ANY S. ERASE S ……
(1). 在执行插入、更新操作时要保证所有学生年龄不小于15岁.
S
S# SN SA SD
I. CONSTR(I.U.) I.
≥15
图8-7
(2). 所插入的学生选课元组中学生所选的课程必须为学校开设 的课程.
SC
S# C#
G
I. CONSTR(I.) I.
ALL.CX
C
C#
CN PC#
ALL.CX
图8-8
二. 静态约束和动态约束 1.静态约束 2.动态约束
三. 立即执行约束和延时执行约束 1.立即执行约束 2.延时执行约束
完整性的实现应包括两个方面,一是系统要提供定义完整性约束 条件的功能,二是提供检查完整性约束条件的方法.
8.2.2 两个系统的完整性方法
一. QBE系统
1. 定义关系S中各属性值的类型、长度,定义关系的码是哪个 (些)属性:
8.4 恢 复
8.4.1 故障的种类
一.事务内部的故障
事务故障意味着事务没有达到预期的终点,因此数据 库可能处于不正确状态.系统就要滚回此事务,即撤销该事 务已经作出的任何对数据库的修改,使得该事务好象根本 没有启动一样.
二.系统范围内的故障
三.介质故障
四.计算机病毒
8.4.2 转储和恢复
转储是数据库恢复中采用的基本技术。所谓转储,即DBA定期 将数据库复制的磁带或另一个磁盘上保存起来的过程。
T1 T2 X
S
—
X
N
N
Y
S
N
Y
Y
—
Y
Y
Y
图8-11 封锁类型的相容矩阵
二.利用封锁机制解决事务并发操作带来的相关问题 1.封锁机制执行并发控制时的约定 (1).事务T在读、写数据对象R时首先要发出Slock或Xlock请求, 事务T获得所要的锁后才能读、写R. (2).事务T结束时才释放锁. 2.利用封锁机制解决图8-10中的三个问题.(图8-12)
例2. 只能删除没有选课的学生. 在S表对应的块上定义一个pre-delete触发器: SELECT ‘X’ FROM SC WHERE SC.S# =:S.S#
例3. 计算机系的学生年龄在16岁到25岁之间. 在S表对应块的年龄字段上定义一个post-change触发器: SELECT ‘X’ FROM DUAL WHERE :S.SD =‘CS’ AND :S.SA BETWEEN 16 AND 25;
PROCEDURE db-proc-2
2. 有关说明:
(1).格式中的DML语句按条目而异。如:
①对于域来说DML语句为READY;
②对于记录பைடு நூலகம்DML语句为STORY;
③对于系则DML语句为CONNECT,DISCONNECT。
(2). LOCK 有三种形式
3.存取控制码的作用 KEY值是在用户程序中给出的. 如在模式中对记录S有如下规定: RECORD NAME IS S. ….. ACCECC CONTROL LOCK FOR ERASE IS ‘ENRMT’. …….
关系 S
UPDATE
关系 C
ALL
……
……
存取谓词 SD=‘CS’ SN=‘ZHANGMIN’ 空 ……
8.1.2 两个系统的安全性方法
一. DBTG 系统
DBTG系统向用户提供了子模式,所有用户程序通过子模式 存取数据库数据。由于子模式只是模式的一部分,所以它自动地将 存取的对象限制在一定范围内,从而提供了安全性。
例如: T1的封锁序列是: S lock A…S lock B…X lock C…Un lock B…Un lock A…Un lock C;
T2的封锁序列是: S lock A…Un lock A…S lock B…X lock C…Un lock C…Un lock B;
定理: 若所有事务均遵守两段协议,则这些事务的所有 交叉调度都是可串行化的.
二. ORACLE 系统
ORACLE系统中实现完整性控制的两个途径 1. 字段的有效性说明 2. 定义触发器
(1)触发器的三个级别 (2)触发的五种事件
①.进入时 ②.查询 ③.修改 ④.退出 ⑤.按键
(3). 触发器中所用的SELECT语句格式 SELECT 目标列 [INTO :[块名.]字段] FROM 表名 [WHERE 子句] [GROUP BY 子句]
二.产生死锁的原因及解决方法 1.产生死锁的原因 2.解决死锁的方法 (1).要求每个事务一次就将所有要使用的数据全部加锁,否则
就不能执行. (2).预先规定一个封锁顺序,所有的事务都必须按这个顺序对
数据执行封锁. (3).诊断死锁,解除死锁.
注意时间
8.3.4 可 串 行 性
计算机系统对并行操作的调度是随机的,不同的调度会 产生不同的结果.哪个结果是正确的呢?
第八章 数据库保护
数据保护主要包括:数据的安全性、完整性、并发控制和数据 库恢复。
8.1 安 全 性
数据库的安全性是指保护数据库以防止不合法的使用所造成的 数据泄露、更改或破坏。系统安全保护措施是否有效是数据库系统 的主要性能指标之一。
8.1.1 安全性控制的一般方法
用户 用户标识和鉴定
DBMS 存取控制
图 8-1
OS
DB
操作系统安全保护 密码存储
一. 用户标识和鉴定 1. 用一个户用名或者用户标识符号来标明用户身份. 2. 口令(Password). 3. 计算结果.
二.存取控制
1.用户权限
2. 与数据无关的授权定义
表8-2 一个可能的授权定义表的形式
用户名
数据对象名 允许的操作类型
WANGPIN ZHANGMIN ZHANGMIN ZHANGMIN ZHANGMIN ZHANGMIN ……
8.3 并 发 控 制
8.3.1 基本概念
一. 事务的概念 二. 数据一致性级别的概念
T1
T2
T1 T2
①读A=16
②
读A=16
③A=A-1 写回A=15
④
A=A-1
写回A=15
(a) 丢失修改
①读A=50
读B=100
求和=150
②
读B=100
求B=B*2
写回B
③读A=50
读B=200
求和=250
8.3.5 两段锁协议
一.基本概念 二. 两段锁协议规定所有的事务应遵循的规则: 1.在对任何数据进行读写之前,事务首先要获得对该数据的封锁. 2. 在释放一个封锁之后,事务不在获得任何其他封锁.
S
S#
SN
SD
I. TYPE. I.
CHAR CHAR CHAR
I. LENGTH. I.
5
20
15
I. KEY.
I.
K
NK
NK
图8-6
2. 对于其它的约束条件则在关系名下输入: I. CONSTR (<条件表>) I.
条件表可以包括I.(插入),D.(删除),U.(更新)中的任何一个或全部.
3.举例
三.建立不同的约定,形成不同级别的封锁协议
表 8-5 不同级别的封锁协议
X锁
S锁
一致性保证
立 结 立 结 不丢失 事务可 不读 可重复 即 束 即 束 修改 恢复 ‘脏’ 读
数据
1
√
√
√
2
√√
√
√
√
√
√
√
√
√
√
四.封锁尺度(granularity)
8.3.3 活锁和死锁
一.活锁产生的原因和解决方法 1.活锁产生的原因 2.避免活锁的方法
SC
S# C# G
I.AUTR(I.). WP I. N C
>90
8.2 完 整 性
数据库的完整性是指数据的正确性和相容性.
8.2.1 完整性约束条件
一.值的约束和结构约束 1.关于对数据值的约束 这类约束条件是指对数据取值类型、范围、精度等的规定。
2.关于数据之间联系的约束 同一关系的不同属性之间可以有一定的联系,从而应满足一定 的约束条件. 不同的关系之间也可以有联系,因而不同关系的属性之 间也可满足一定的约束条件.
(b) 不能重复读
T1
T2
①读C=100
C=C*2 写回C
②
读C=200
③ ROLLBACK C恢复为100
(c) 读脏数据
图8-10
8.3.2 封锁(Locking)
一.基本的封锁类型 1.排它锁(Exclusive locks),简记为X锁 2.共享锁(Share locks),简记为S锁
可以用相容矩阵(图8-11)来表示这些控制方式.
除开用子模式外,DBTG系统还提供了一整套以存取控制锁与 存取控制码为基础的安全设施。
1. 存取控制锁子句格式
ACCESS CONTROL LOCK [FOR || 某些 DML 语句|| ]IS
literal-1
literal-2
lock-name-1
OR lock-name-2
……
PROCEDURE db-proc-1
S
S# SN SA SD
I.AUTR(P.).WP I. N A M D
b. 将对关系S的四种存取权限授予用户WP.
S
S# SN
I.AUTR.WP I.
NA
SA SD MD
c. 任意一个学生可以读SC关系中关于自己的元组.
SC
S# C# G
I.AUTR(P.). Z I. Z
CZ GZ
d. 用户可以插入成绩在90分以上的SC元组.
二. QBE系统
QBE系统可授予用户四种权限,即插入(I)、删除(D)、更新(U)和 检索(P).系统同样用表格的形式规定安全性约束条件.某一关系的所 有者在关系框架中输入一个元组.
1. 授权格式: I . AUTR (<表>), <名字> I .
2.举例: a. 将检索关系S的权限授予用户WP.
关系 S 关系 S 关系 C SC.G SC.S# SC.C# ……
SELECT UPDATE ALL UPDATE SELECT SELECT ……
3.依赖于数据对象的内容的授权
用户名 WANGPIN ZHANGMIN ZHANGMIN ……
表 8-3
数据对象名 允许的操作类型
关系 S
SELECT
比标准的SELECT语句有两点扩充. 例1. 每当在学生选课SC表中加入一个记录时,保证C#与课程表 C中的某个C#相同,S#与学生表S中的某个S#相同.
在SC表对应的块上定义一个pre-insert触发器.
SELECT ‘X’
FROM S,C
WHERE S.S# =:SC.S# AND C.C# =:SC.C#;
一、静态转储 二、动态转储
8.4.3 日志文件
日志文件是用来记录对数据库每次更新活动的文件. 一. 登记日志文件 “先写日志文件”,然后写数据库的原则. 二. 事务恢复
那么在用户程序中就要提供相同的KEY值: PROCEDURE DIVISION. DECLARATIVE S ……USE FOR ACCESS CONTROL ON ERASE FOR S. MOVE ‘ENRMT’ TO DB-ACCESS-CONTROL-KEY END DECLARATIVE S. …… MOVE ‘S5’ TO SNO IN S. FIND ANY S. ERASE S ……
(1). 在执行插入、更新操作时要保证所有学生年龄不小于15岁.
S
S# SN SA SD
I. CONSTR(I.U.) I.
≥15
图8-7
(2). 所插入的学生选课元组中学生所选的课程必须为学校开设 的课程.
SC
S# C#
G
I. CONSTR(I.) I.
ALL.CX
C
C#
CN PC#
ALL.CX
图8-8
二. 静态约束和动态约束 1.静态约束 2.动态约束
三. 立即执行约束和延时执行约束 1.立即执行约束 2.延时执行约束
完整性的实现应包括两个方面,一是系统要提供定义完整性约束 条件的功能,二是提供检查完整性约束条件的方法.
8.2.2 两个系统的完整性方法
一. QBE系统
1. 定义关系S中各属性值的类型、长度,定义关系的码是哪个 (些)属性:
8.4 恢 复
8.4.1 故障的种类
一.事务内部的故障
事务故障意味着事务没有达到预期的终点,因此数据 库可能处于不正确状态.系统就要滚回此事务,即撤销该事 务已经作出的任何对数据库的修改,使得该事务好象根本 没有启动一样.
二.系统范围内的故障
三.介质故障
四.计算机病毒
8.4.2 转储和恢复
转储是数据库恢复中采用的基本技术。所谓转储,即DBA定期 将数据库复制的磁带或另一个磁盘上保存起来的过程。
T1 T2 X
S
—
X
N
N
Y
S
N
Y
Y
—
Y
Y
Y
图8-11 封锁类型的相容矩阵
二.利用封锁机制解决事务并发操作带来的相关问题 1.封锁机制执行并发控制时的约定 (1).事务T在读、写数据对象R时首先要发出Slock或Xlock请求, 事务T获得所要的锁后才能读、写R. (2).事务T结束时才释放锁. 2.利用封锁机制解决图8-10中的三个问题.(图8-12)
例2. 只能删除没有选课的学生. 在S表对应的块上定义一个pre-delete触发器: SELECT ‘X’ FROM SC WHERE SC.S# =:S.S#
例3. 计算机系的学生年龄在16岁到25岁之间. 在S表对应块的年龄字段上定义一个post-change触发器: SELECT ‘X’ FROM DUAL WHERE :S.SD =‘CS’ AND :S.SA BETWEEN 16 AND 25;
PROCEDURE db-proc-2
2. 有关说明:
(1).格式中的DML语句按条目而异。如:
①对于域来说DML语句为READY;
②对于记录பைடு நூலகம்DML语句为STORY;
③对于系则DML语句为CONNECT,DISCONNECT。
(2). LOCK 有三种形式
3.存取控制码的作用 KEY值是在用户程序中给出的. 如在模式中对记录S有如下规定: RECORD NAME IS S. ….. ACCECC CONTROL LOCK FOR ERASE IS ‘ENRMT’. …….
关系 S
UPDATE
关系 C
ALL
……
……
存取谓词 SD=‘CS’ SN=‘ZHANGMIN’ 空 ……
8.1.2 两个系统的安全性方法
一. DBTG 系统
DBTG系统向用户提供了子模式,所有用户程序通过子模式 存取数据库数据。由于子模式只是模式的一部分,所以它自动地将 存取的对象限制在一定范围内,从而提供了安全性。
例如: T1的封锁序列是: S lock A…S lock B…X lock C…Un lock B…Un lock A…Un lock C;
T2的封锁序列是: S lock A…Un lock A…S lock B…X lock C…Un lock C…Un lock B;
定理: 若所有事务均遵守两段协议,则这些事务的所有 交叉调度都是可串行化的.
二. ORACLE 系统
ORACLE系统中实现完整性控制的两个途径 1. 字段的有效性说明 2. 定义触发器
(1)触发器的三个级别 (2)触发的五种事件
①.进入时 ②.查询 ③.修改 ④.退出 ⑤.按键
(3). 触发器中所用的SELECT语句格式 SELECT 目标列 [INTO :[块名.]字段] FROM 表名 [WHERE 子句] [GROUP BY 子句]
二.产生死锁的原因及解决方法 1.产生死锁的原因 2.解决死锁的方法 (1).要求每个事务一次就将所有要使用的数据全部加锁,否则
就不能执行. (2).预先规定一个封锁顺序,所有的事务都必须按这个顺序对
数据执行封锁. (3).诊断死锁,解除死锁.
注意时间
8.3.4 可 串 行 性
计算机系统对并行操作的调度是随机的,不同的调度会 产生不同的结果.哪个结果是正确的呢?
第八章 数据库保护
数据保护主要包括:数据的安全性、完整性、并发控制和数据 库恢复。
8.1 安 全 性
数据库的安全性是指保护数据库以防止不合法的使用所造成的 数据泄露、更改或破坏。系统安全保护措施是否有效是数据库系统 的主要性能指标之一。
8.1.1 安全性控制的一般方法
用户 用户标识和鉴定
DBMS 存取控制
图 8-1
OS
DB
操作系统安全保护 密码存储
一. 用户标识和鉴定 1. 用一个户用名或者用户标识符号来标明用户身份. 2. 口令(Password). 3. 计算结果.
二.存取控制
1.用户权限
2. 与数据无关的授权定义
表8-2 一个可能的授权定义表的形式
用户名
数据对象名 允许的操作类型
WANGPIN ZHANGMIN ZHANGMIN ZHANGMIN ZHANGMIN ZHANGMIN ……
8.3 并 发 控 制
8.3.1 基本概念
一. 事务的概念 二. 数据一致性级别的概念
T1
T2
T1 T2
①读A=16
②
读A=16
③A=A-1 写回A=15
④
A=A-1
写回A=15
(a) 丢失修改
①读A=50
读B=100
求和=150
②
读B=100
求B=B*2
写回B
③读A=50
读B=200
求和=250