数据库速成第八章——数据库的管理

本文详细介绍了数据库管理的关键概念,包括事务的定义及其ACID特性,数据库的故障恢复机制,如事务故障、系统故障和介质故障的处理,以及并发控制的封锁技术,如活锁、死锁的预防。此外,还讨论了数据库的完整性,包括SQL中的完整性约束和触发器,以及数据库的安全性,如权限管理和数据加密。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、引言

二、事务的概念

1 定义

2 事务的ACID性质

三、数据库的故障恢复

1 恢复的定义 

2 恢复的实现方法

3 故障类型

3.1 事务故障(对数据库的影响最小)

3.2 系统故障

3.3 介质故障(对数据库的影响最大)

3.4 三种故障由谁恢复

4 故障恢复

4.1 事务故障的恢复

4.2 系统故障的恢复

4.3 介质故障的恢复

四、数据库的并发控制

1 并发操作带来的三个问题

1.1 丢失更新问题

1.2 不一致性分析问题(不可重复读)

1.3 读脏数据问题

2 解决问题的方法:封锁技术(Locking)

2.1 排他型封锁(又称X锁、写锁)

2.2 共享型封锁(又称S锁,读锁)

2.3 封锁的相容矩阵

3 活锁和死锁

3.1 活锁

 3.2 死锁

4 并发事务的可串行化调度

4.1 一些概念

4.2 可串行化的概念

4.3 两段封锁法

五、数据库的完整性

1 概念

2 SQL中的完整性约束

2.1 域约束

2.2 基本表约束

2.3 断言(Assertions)

3 触发器

3.1 触发器的结构

3.2 触发器实例

六、数据库的安全性

1 权限

2 安全性和授权

2.1 视图

2.2 SQL中的用户权限及操作

3 数据加密


一、引言

对数据库的管理主要通过四个方面实现:

  • 恢复
  • 并发控制
  • 完整性
  • 安全性

每一方面构成了DBMS的一个子系统。

二、事务的概念

1 定义

事务(Transaction)的定义:事务是由若干对数据库的操作组成的一个逻辑单位。

宏观上是由程序员写的一条或多条SQL语句的一次执行,微观上是对数据元素的一系列基本操作。

 需要提交和撤销。

且事务是数据库系统运行的最小单位。

事务以BEGIN TRANSACTION语句开始,以COMMIT或ROLLBACK语句结束。

假设银行数据库中有一转账事务T,从账号A转50元到账号B,其操作如下:

T: BEGIN TRANSACTION;     /*事务开始语句*/

read(A);    /*读取A账号中的总钱数*/
A:=A-50;
write(A);
if(A < 0)    ROLLBACK;    /*如果钱不够,则执行事务回退语句*/
else{
    read(B);
    B:=B+50;
    write(B);
    COMMIT;    /*事务提交语句*/
}

我们可以看到,ROLLBACK是执行失败的回退,COMMIT是执行成功的提交。

对数据库的访问建立在读和写两个操作的基础上。

读(read):把数据从磁盘中的数据库中读到内存的缓冲区中。

写(write):把数据从内存写回磁盘中。

2 事务的ACID性质

  1. 原子性(Atomicity):一个事务里面包含的所有操作不可分割,要么全部执行,要么什么都不做。
  2. 一致性(Consistency):数据库的一致性,即数据不会因为事务的执行而遭到破坏。
  3. 隔离性(Isolation):在多个事务并发执行时,无论这些事务执行的先后顺序如何,结果都应该是一样的。
  4. 持久性(Durability):一个事务对数据库的更新应永久地反映在数据库中。事务如果COMMIT,则对于数据库的影响应该是持久的。事务如果ROLLBACK,则不应该对数据库有影响。

三、数据库的故障恢复

1 恢复的定义 

数据库的可恢复性:系统能把数据库从被破坏、不正确的状态,恢复到最近一个正确的状态。

由恢复管理子系统来保持事务的原子性和持久性,确保数据不丢失、不破坏。

2 恢复的实现方法

基本原则:冗余,即数据的重复存储

实现冗余的两个方法:转储、建立日志

  • 转储

转储即周期性地对整个数据库进行复制,转储到磁盘或磁带中。

  • 建立日志

记录事务对数据库的每一次操作。以便有案可查。

 日志直接写入介质存储上,会保持正确性。

当事务对数据库进行操作时,先写运行日志,再与数据库缓冲区进行信息交换。(运行记录优先原则)

3 故障类型

3.1 事务故障(对数据库的影响最小)

某个事务自身运行错误所引起的故障。例如存款余额透支、库存量为负、并发事务发生死锁等。

事务故障仅仅影响单个事务

3.2 系统故障

由于掉电、非正常关机等所引起的故障。

系统故障影响正在运行的所有事务,并且主存内容丢失。

3.3 介质故障(对数据库的影响最大)

由于磁盘遭到损坏而产生的故障。

介质故障既影响内存又影响存储介质。

3.4 三种故障由谁恢复

事务故障和系统故障由系统自动进行。介质故障需要配合DBA来进行。

系统故障称为软故障,介质故障称为硬故障。

4 故障恢复

4.1 事务故障的恢复

事务故障可通过撤消事务来恢复。(事务故障只有UNDO)

重做事务可保证已提交事务的持久性,撤销事务则消除未提交事务的影响。

4.2 系统故障的恢复

检查点:在该时刻,DBMS强制使内存中的内容与介质数据库中的内容保持一致。

即:在检查点之前内存中的数据与介质中的数据是保持一致的。

共分为三种情况:(只用看事务的结束时刻位置,即线条的右末端)

  1. 在检查点之前结束的事务不需要恢复,因为已经写回DB。如图中的T1

  2. 在检查点之后,故障点之前结束的事务,需要重做(REDO)。从检查点开始重做。例如T2,T4.

  3. 在故障点之后结束的事务,需要撤销(UNDO)。例如T3,T5.

检查点方法的恢复算法:①建立重做队列和撤销队列。正向扫描日志文件。找出在故障发生前已经提交的事务进入重做队列;找出在故障发生时还未完成的事务,进入撤销队列。

② 对重做队列中的事务进行REDO处理,对撤销队列中的事务进行UNDO处理。

UNDO的方法:反射扫描日志文件,对该事务的更新操作执行逆操作【插入操作相当于做删除操作等】。直到读到此事务的开始标记。事务故障的恢复就完成了。

REDO的方法:正向扫描日志文件,对每一个重做事务重新操作。

4.3 介质故障的恢复

两个重要时刻:检查点和转储点

使用转储的副本(DB Backup Copies)进行恢复。用副本数据库替换原本的数据库。

由于介质故障影响全面,在用副本恢复后还需要依据运行日志进行恢复。

转储点的确定不能过频,也不能过疏。

四、数据库的并发控制

1 并发操作带来的三个问题

三个问题:

  1. 丢失更新问题:事务所作的更新操作因另一事务的操作而丢失。
  2. 不一致分析问题:事务从数据库中读取了处于不一致状态的数据。
  3. 读脏数据问题:一事务取用了别的事务未提交,然后被ROLLBACK的数据。

1.1 丢失更新问题

例子如图:

(这里每一个事务的操作步骤都是:查找,修改,写回)

1.2 不一致性分析问题(不可重复读)

 我们可以看到,事务Ti一共读取了两次数据库中的A和B,在读取的间隙被另一个事务Tj修改了值。因此事务Ti进行了不一致性的分析。

1.3 读脏数据问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@maplefalls

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值