当前位置: 首页 > news >正文

数据库的安全与保护(终)

四、数据库的并发控制

事务的串行执行和并发执行。

在多个事务并发执行时,事务相互之间可能有干扰,破坏 了事务的隔离性。

DBMS的并发控制子系统负责协调并发事务的执行,保证数 据库的一致性不受破坏。同时避免用户得到不正确的数据。

1、事务并发操作带来的问题

1、丢失更新问题

例:A的初值为100,事务 T1对A减30,事务T2对 A加倍。

2、不一致分析问题

例:事务T1对A减30,事务 T3读A。

3、依赖于未提交更新问题

例:事务T1对A减30,但未提交, 事务T4读未提交的A值,而T1 做ROLLBACK操作。

这些问题都需要并发控制子系统来解决。

两种主要解决技术:

封锁(locking)技术

时标(timestamping)技术

2、排它型封锁(X封锁)

X封锁 含义:

如果事务Ti对某个数据(可以是数据项、记录、数据 集、以及整个数据库)实现X封锁,那么其它事务要等Ti 解除X封锁以后,才能对这个数据进行封锁。

记为:LOCK_X(R)

3、活锁和死锁

活锁

如果事务T1封锁了数据对象R后,事务T2也请求封锁R, 于是T2等待。接着T3也请求封锁R。T1释放R上的锁后,系统 首先批准了T3的请求,T2只得继续等待。接着T4也请求封锁 R。T3释放R上的锁后,系统又批准了T4的请求……,T2有可 能就这样永远等待下去,这就是活锁。

死锁

如果事务T1封锁了数据A,事务T2封锁了数据B。之后T1又 申请封锁数据B,因T2已封锁了B,于是T1等待T2释放B上的锁。 接着T2又申请封锁A,因T1已封锁了A,T2也只能等待T1释放A 上的锁。这样就出现了T1在等待T2,而T2又在等待T1的局面, T1和T2两个事务永远不能结束,形成死锁。

死锁

事务依赖图判断系统中是否存在死锁问题

解决方法:选择一个事务做回退操作。

4、由ROLLBACK引起的丢失更新问题

一个事务在做ROLLBACK操作时,将另外事务的更新丢失。

PXC协议: PX协议+下面规则

规则:X封锁必须保留到事务终点(COMMIT和ROLLBACK)。

5、共享型封锁(S封锁,shared lock)

X封锁数据由一个事务独锁,效率低下。

S封锁 允许并发读,不允许并发修改。

S封锁

含义: 如果事务Ti对某数据有一个S封锁,那么其 它事务Tj也能对这个数据实行S封锁。但是对这数据 的所有S封锁都解除之前决不允许任何事务对这数据 有X封锁。

记为:LOCK_S(R)

UNLOCK解除S封锁的操作,未必要等提交后才能解除, 因为被S封锁的数据不可能是未提交的修改。(允许 并发读,不允许并发修改。) 在并发操作时,一个事务如果不对数据实行封锁,就 进行读操作,也会因为其它事务的更新操作而产生错 误。例如:T1对A、B、C求和,T2对C值减10,对A值 加10。

有了S封锁之后,后来申请X封锁的一些事务,若并不 需要对封锁的数据进行修改,可改为申请S封锁。如 果要对数据进行更新,可以先申请S封锁,在写回时 将S封锁升级为X封锁。 优点:减少X封锁,增加了并发的可能性。 缺点:增加了死锁的机会。

PS协议

主要内容:

任何要更新记录R的事务必须先执行 LOCK_S(R) 操作,以获得对该记录的寻址能力并对它 取得S封锁。如果未获准S封锁,事务进入等待状态, 一直到获准S封锁,事务才能继续下去。在事务获准 对记录R的S的封锁后,记录R在修改前必须把S封锁升 级为X封锁。

PSC协议: PS协议+下面规则

规则:S封锁必须保留到事务终点(COMMIT和ROLLBACK)。

6、基于时标的并发控制

不采用封锁技术,因此不会产生死锁的调度。

时标/时戳

在事务Ti运行时,都有唯一的时间标记,简 称时标或时戳,用TS(Ti)表示。

事务开始运行的系统时间(称为启动时间) 或

每个事务与一个逻辑编号相联系

如果两个事务Ti和Tj的时标分别为TS(Ti)和 TS(Tj),并且有TS(Ti)<TS(Tj),则称Ti是年长的事务, Tj是年轻的事务。

事务的时标决定了可串行化的顺序。

原则:如果TS(Ti)<TS(Tj),那么系统必须保证产生 的调度应该等价于先Ti后Tj的串行调度。

对于每个数据项Q,系统记载两个时标值:

W_timestamp(Q) 成功执行write(Q)操作的最年轻事务的时标

R_timestamp(Q) 成功执行read(Q)操作的最年轻事务的时标

时标顺序协议

思想:

a、所有物理更新推迟到COMMIT时候,因此,未提交的修改 实际上根本没有建立。

b、如果一个事务要求查看被较年轻事务更新了的记录,或 者要求更新被较年轻事务查看过和更新过的记录,就会发 生冲突。通过重新启动发出请求的事务解决。

事务Ti执行read(Q)

i. 如果TS(Ti)<W_timestamp(Q)拒绝Ti的read(Q)操 作,并重新启动Ti。

ii. 如果TS(Ti)>=W_timestamp(Q),执行read(Q),并且 置R_timestamp(Q)的值为其和TS(Ti)中的大者。

iii.否则,执行write(Q) ,并置W_timestamp(Q)的置 为TS(Ti)。

五、数据库的恢复

数据库系统运行时,可能会出现各种故障,导致可 能丢失数据。 DBMS的恢复子系统要保证事务的原子性和持久性。

1、数据库遭遇的故障

❖ 事务故障

➢ 逻辑错误:数据输入错、溢出等

➢ 系统错误:系统进入错误的状态(如死锁)

❖ 系统故障

➢ 软件、硬件故障,引起内存信息丢失,但未破 坏外存中的数据

❖ 磁盘故障

➢ 磁盘损坏

常用恢复技术:

数据转储

DBA定期将整个数据库复制到磁带或另一个磁盘上保存 起来的过程。

静态转储  在系统重无运行事务时进行的转储操作。

动态转储 在转储期间允许对数据库进行存取和修改。

基于日志的恢复

日志

记载数据库修改信息的数据结构,称为“日志” (log)。

日志文件

日志文件是日志记录的集合(汇集)。

日志记录的形式

❑ 表示事务Ti执行开始

❑ 表示事务Ti对数据项Xj执行写 操作,写前值为V1,写后值为V2

❑ 表示Ti执行提交操作

❑ 表示Ti中止执行

使用日志的恢复技术

推迟数据库的修改

把事务的所有写操作推迟到事务局部提交后进行。

在事务局部提交后,根据日志记录中对数据库的修 改信息实施被推迟的写操作,以保证事务的原子性。

(在事务未完成前系统发生故障,或事务异常中止 时,修改的信息只写入日志,尚未写到磁盘,此时可忽 略日志中的信息。)

即时的数据库修改

允许事务在未做完情况下立即执行写操作,把新 的值写到磁盘上。

由活动事务写的数据修改称为“未提交的修改”。 在系统故障或事务故障时,系统根据日志记录中 的旧值替换新值。

http://www.dtcms.com/a/533087.html

相关文章:

  • AI 应用层革命(四)——人机共生的哲学与终极形态
  • 工程建设业主官方网站做视频网站的备案要求
  • 设计模式-适配器模式(Adapter)
  • 为什么建设法律法规网站东莞网站制作公司
  • 成品网站w灬源码伊甸如何选择网站托管公司
  • Lamda表达式
  • 面经分享--招银云创汇总
  • IDEA Debug高阶技巧
  • 备案做电影网站怎么自己制作一个网站
  • 腾讯云部署gitlab
  • 杭州蚂蚁 做网站的公司html官方下载
  • 构建AI智能体:七十五、用扣子平台创建工作流:从自动化到智能化的进阶之路
  • 高通AR1平台的智能眼镜全检系统
  • 搜索引擎推广的基本方法有海南搜索引擎优化
  • 做推广效果哪个网站好十堰哪家网站制作公司技术好
  • 爬完数据就完了?用 Pandas 做数据清洗与预处理
  • nestjs 架构篇:控制器、服务、数据访问
  • 【STM32】CLion STM32开发环境搭建
  • 电子商务网站开发系统平台湖北建设厅网站查询
  • 如何网站建设团队盲盒怎么制作教程
  • 网站建设北京贵金华竞价排名 金华企业网站建设
  • 腾讯微信山东区建站推广中心网站建设与管理 自考
  • 从 Thread 到 Executor 框架
  • 万字细啄常见排序算法
  • 大连网站设计收费标准海口网站建设咨询
  • 网站如何做3d产品展示做软件的公司网站有哪些
  • 装修网站制作dede电影网站源码
  • 公司网站建网电脑版微信登录入口
  • Linux C/C++ 学习日记(35):协程(五):同步、多线程、多协程在IO密集型场景中的性能测试
  • PantherX2 debain/armbian 命令无法安装Jellyfin10.11的解决办法