软考数据库---1.事务管理

目录

    • 1.1 事物的基本概念
    • 1.2 数据库的并发控制
      • 1.2.1 事务调度概念
      • 1.2.2 并发操作带来的问题
      • 1.2.3 并发控制技术
      • 1.2.4 隔离级别:
    • 1.3 数据库的备份和恢复
      • 1.3.1 故障种类
      • 1.3.2 备份方法
      • 1.3.3 日志文件
      • 1.3.4 恢复

1.1 事物的基本概念

●概念:一个操作序列,要么都做,要么都不做,是不可分割的逻辑工作单位。

●定义语句:
BEGINTRANSACTION/ENDTRANSACTION:事务开始/事务结束。
ROLLBACK:事务回滚,表示事务非成功地结束。
COMMIT:事务提交,表示事务成功地结束。

●ACID特性
原子性:事务是原子的,要么做,要么都不做。
一致性:事务执行的结果必须保证数据库从一个一致性状态变到另一个一致性状态。
隔离性:事务相互隔离。当多个事务并发执行时,任一事务的更新操作直到其成功提交的整个过程,对其它事物都是不可见的。
持久性:一旦事务成功提交,即使数据库崩溃,其对数据库的更新操作也永久有效。

●状态
活动状态:事务的初始状态,事务执行时处于这个状态。
部分提交状态:当操作序列的最后一条语句自动执行后,事务处于部分提交状态。部分提交状态并不等于事务成功执行。
失败状态:由于错误使得事务不能继续正常执行,事务就进入了失败状态。
中止状态:事务回滚并且数据库已被恢复到事务开始执行前的状态。
提交状态:当事务成功完成后,称事务处于提交状态。
在这里插入图片描述

1.2 数据库的并发控制

1.2.1 事务调度概念

调度:事务的执行次序。

串行调度:多个事务依次串行执行,且只有当一个事务的所有操作都执行完后才执行另一个事务的所有操作。
并行调度:利用分时的方法同时处理多个事务。

调度错误的定义是结果算错了才叫错,并行的结果要和任意串行结果一致。—>可串行化的调度
多个事务的并发执行是正确的, 当且仅当其结果与某一次序串行地执行它们的结果相同, 称这种调度策略是可串行化的调度。
可串行性是并发事务正确性的准则。 即: 一个给定的并发调度, 当且仅当它是可串行化的才认为是正确调度

错误的调度及产生错误的原因:丢失修改/不可重复读/读脏数,破坏了事务的隔离性

1.2.2 并发操作带来的问题

丢失修改、不可重复读、读脏数据,幻读。
幻读是按照相同条件查询,两次查到不一样。
不可重复读是两个查询同数据,读取数据不一样。
都是违反了隔离性

1.2.3 并发控制技术

封锁(X锁、S锁)、三级封锁协议、两阶段封锁协议。
X锁(排它锁):工作类流程和串行调度一样
S锁(共享锁):只读不改
三级封锁协议:
在这里插入图片描述
两阶段封锁协议:
在这里插入图片描述
加锁阶段(Growing Phase):事务开始后,可以对任何数据项加锁(读锁或写锁),但不能释放任何锁。
解锁阶段(Shrinking Phase):事务提交(COMMIT)时,释放所有锁;事务回滚(ROLLBACK)时,也必须释放已获取的所有锁。
满足两段锁协议—>可串行化—>并发事务正确执行–x->不能保证不发生死锁

1.2.4 隔离级别:

1、READ UNCOMMITTED(读未提交):可避免丢失修改。
2、READ COMMITTED<读已提交):可避免丢失修改、读脏数据。
3、REPEATABLE READ(可重复读):可避免丢失修改、读脏数据,不可重复读。
4、SERIALIZABLE(串行化):最高级别,可避免丢失修改、读脏数据、不可重复读、幻读。

幻读:事务A查询得到N条数据,然后事务B又插入了M条数据,或者改变了这N条数据之外的N条符合事务A搜索条件的数据,导致事务A再次搜索发现有N+W条数据了,就产生了幻读。

1.3 数据库的备份和恢复

1.3.1 故障种类

1、 事务故障: 是由于程序执行错误而引起事务非预期的、 异常终止的故障。 通常有如下两类错误引起事务执行失败:
(1) 逻辑错误。 如非法输入、 找不到数据、 溢出、 超出资源限制等原因引起的事务执行失败。
(2) 系统错误。 系统进入一种不良状态(如死锁) , 导致事务无法继续执行

2、 系统故障(通常称为软故障):是指硬件故障、 软件(如DBMS、 OS或应用程序) 漏洞的影响, 导致丢失了内存中的信息, 影响正在执行的事务, 但未破坏存储在外存上的信息。

3、 介质故障(通常称为硬故障):是指外存故障,例如磁盘损坏、磁头碰撞,瞬时强磁场干扰等。

1.3.2 备份方法

静态转储:是指在转储期间不允许对数据库进行任务存取、修改操作。用来恢复
动态转储:是在转储期间允许对数据库进行存取、修改操作,转储和用户事务可并行执行。
海量转储:是指每次转储全部数据库。
增量转储:是指每次只转储上次转储后更新过的数据。

1.3.3 日志文件

日志文件是用来记录事务对数据库的更新操作的文件。
数据库镜像。 为了避免磁盘介质出现故障影响数据库的可用性, 许多DBMS提供数据库镜像功能用于数据库恢复

1.3.4 恢复

UNDO:撤销事务,将未完成的事务撤消,使数据库回复到事务执行前的正确状态。
撤销事务的过程: 反向扫描日志文件(由后向前扫描) , 查找事务的更新操作; 对该事务的更新操作执行逆操作, 用日志文件记录中更新前的值写入数据库, 插入的记录从数据库中删除, 删除的记录重新插入数据库中; 继续反向扫描日志文件, 查找该事务的其它更新操作并执行逆操作直至事务开始标志。
REDO:重做事务,将已经提交的事务重新执行。
重做事务的过程: 从事务的开始标志起, 正向扫描日志文件, 重新执行日志文件登记的该事务对数据库的所有操作, 直至事务结束标识。

检查点机制(CHECKPOINT): 在日志中设置检查点, 当发生故障需要利用日志文件恢复时, 反向扫描日志文件, 找到检查点, 确认检查点时刻正在执行的事务(活动事务) , 即检查点前有事务开始标志但没有事务结束标志。
对于检查点后提交的事务, 执行REDO(重做)
对于检查点后未提交的事务, 执行UNDO(撤销)

(1) 事务故障的恢复: 事务故障是事务在运行至正常终止点(SUMMIT或ROLLBACK) 前终止, 日志文件只有该事务的开始标识而没有结束标识。
恢复:撤销(UNDO)
具体做法:
1、 反向扫描日志文件, 查找该事务的更新操作。
2、 对事务的更新操作执行逆操作。
3、 继续反向扫描日志文件, 查找该事务的其他更新操作, 并做同样的处理, 直到事务的开始标志。
注: 事务故障的恢复是由系统自动完成的, 对用户是透明的。
(2) 系统故障的恢复: 系统故障会使数据库的数据不一致:
一是未完成的事务对数据库的更新可能已经写入数据库;
二是已提交的事务对数据库的更新可能还在缓冲区没来得及写入数据库。
恢复:
1、 未完成的事务(UNDO)
2、 已经提交 commit 的事务(REDO)
(3) 介质故障的恢复: 介质故障时数据库遭到破坏, 需要重装数据库, 一般需要DBA的参与, 装载故障前最近一次的备份和故障前的日志文件副本,
恢复:
1、 未完成的事务(UNDO)
2、 已经提交 commit 的事务(REDO)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/533503.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AiChat是什么?

AIChat是一款功能强大的聚合AI大模型智能聊天助手,为用户提供自动化的客服和聊天机器人服务。无论是需要为企业提供更好的客户体验,还是为个人用户提供高效便捷的服务,AIChat都是最佳选择。本文将详细介绍AIChat的特点和优势。 Aichat简介&am…

学习R语言第二天

R语言可以做什么 1.数据分析 R语言如何使用 1. 请看我的操作方式 2. 如何获取当前路径 -- 获取当前路径 > getwd() [1] "E:/R/RWorkSpace/day01" -- 修改当前路径 > setwd(dir "E:/R") > getwd() [1] "E:/R" 3.查看当下数据值的信…

HCIP课后习题之一

1、路由协议用工作机制上分为那几种?分别是? A:两种。分别是静态路由和动态路由(可分为IGP和EGP) 2、IGP和EGP协议有哪些? A:IGP: RIP、OSPF、ISIS、EIGRP EGP: BGP 3、路由优先级的用途&…

机器人坐标系转换之从世界坐标系到局部坐标系

三角函数实现 下面是代码c和python实现&#xff1a; #include <iostream> #include <cmath>struct Point {double x;double y; };class RobotCoordinateTransform { private:Point origin; // 局部坐标系的原点在世界坐标系中的坐标public:RobotCoordinateTransfo…

zabbix企业级监控平台

zabbix部署 安装源 重新创建纯净环境&#xff0c;利用base克隆一台虚拟机server1 给server1做快照&#xff0c;方便下次实验恢复使用 进入zabbix官网https://www.zabbix.com rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm …

C++:构造函数、析构函数、拷贝构造函数

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《C&#xff1a;构造函数、析构函数、拷贝构造函数》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 如果本篇文章对你有帮助&#xff0c;还请各位点点赞…

c++的学习之路:16、list(3)

上章有一些东西当时没学到&#xff0c;这里学到了将在补充&#xff0c;文章末附上代码&#xff0c;思维导图。 目录 一、赋值重载 二、带模板的创建 三、析构函数 四、代码 五、思维导图 一、赋值重载 这里的赋值重载就是直接利用交换函数进行把传参生成的临时数据和需要…

Vue 读取后台二进制文件流转为图片显示

Vue 读取后台二进制文件流转为图片显示 后台返回格式 <img :src"payImg" id"image" style"width: 150px;height: 150px;" alt"">axios写法 重点 responseType: ‘blob’ &#xff0c; 使用的是res中的data blob this.$axios.…

Linux之线程互斥与同步

1.线程互斥相关概念 临界资源&#xff1a;多线程执行流共享的资源就叫做临界资源 。 临界区&#xff1a;每个线程内部&#xff0c;访问临界自娱的代码&#xff0c;就叫做临界区。 互斥&#xff1a;任何时刻&#xff0c;互斥保证有且只有一个执行流进入临界区&#xff0c;访问临…

【Locust分布式压力测试】

Locust分布式压力测试 https://docs.locust.io/en/stable/running-distributed.html Distributed load generation A single process running Locust can simulate a reasonably high throughput. For a simple test plan and small payloads it can make more than a thousan…

Ubuntu-22.04安装VMware虚拟机并安装Windows10

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、VMware是什么&#xff1f;二、安装VMware1.注册VMware账号2.下载虚拟机3.编译vmmon&vmnet4.加载module5.安装bundle 三、安装Windows101.基础配置2.进阶…

Java基础_15集合及其方法

今天的内容 1.集合 1.集合【重点】 1.1为什么使用集合 集合和数组是一样的都是用来存储数据的&#xff01;&#xff01;&#xff01; 真实的开发的时候&#xff0c;使用的是集合不是数组&#xff0c;为啥&#xff1f; 数组存数据: ​ 1.数组的容量是固定的 ​ 2.数组封装的方法…

Dude, where’s that IP? Circumventing measurement-based IP geolocation(2010年)

下载地址:https://www.usenix.org/legacy/event/sec10/tech/full_papers/Gill.pdf 被引次数:102 Gill P, Ganjali Y, Wong B. Dude, Wheres That {IP}? Circumventing Measurement-based {IP} Geolocation[C]//19th USENIX Security Symposium (USENIX Security 10). 2010.…

基于springboot实现常州地方旅游管理系统项目【项目源码+论文说明】

基于springboot实现旅游管理系统演示 摘要 随着旅游业的迅速发展&#xff0c;传统的旅游信息查询方式&#xff0c;已经无法满足用户需求&#xff0c;因此&#xff0c;结合计算机技术的优势和普及&#xff0c;针对常州旅游&#xff0c;特开发了本基于Bootstrap的常州地方旅游管…

IDM激活步骤-亲测可用

前言&#xff1a;我试了3种方法&#xff0c;仅以下方法激活成功&#xff0c;其他都是30天试用 使用步骤&#xff1a; 1.从官网下载IDM并安装&#xff1a;https://www.internetdownloadmanager.com/ 2.下载激活工具&#xff1a;https://wwif.lanzouw.com/iSY2N16s81xi &#…

Python测试框架之pytest详解

前言 Python测试框架之前一直用的是unittestHTMLTestRunner&#xff0c;听到有人说pytest很好用&#xff0c;所以这段时间就看了看pytest文档&#xff0c;在这里做个记录。 官方文档介绍&#xff1a; Pytest is a framework that makes building simple and scalable tests e…

生成式AI对UiPath来说是机遇还是挑战?

企业争相通过技术革新来领跑市场&#xff0c;机器人流程自动化&#xff08;RPA&#xff09;技术更是将企业的效率和成本控制推向了新的高度。但当人工智能&#xff08;AI&#xff09;的最新进展——生成式AI登上舞台时&#xff0c;它不仅带来了变革的可能&#xff0c;还提出了一…

创建网络名称空间后的Linux幕后工作解析

Linux网络名称空间&#xff08;Network Namespace&#xff09;是一种强大的虚拟化技术&#x1f310;&#xff0c;允许用户隔离网络设备、IP地址、路由表等网络资源。这项技术在容器化和虚拟化领域发挥着关键作用&#xff0c;是构建现代云基础设施的基石之一⛅。当你创建一个新的…

lovesql 手工sql注入

1.页面 2.万能密码登录成功 我还傻乎乎的以为密码就是flag 但不是 3. 继续注入 判断列数 确定了只有三列 开始尝试联合注入 4.使用联合注入之前先判断显示位 5.之后一步一步的构造&#xff0c;先得到当前数据库名 利用database&#xff08;&#xff09; 再得到库里有哪些表 …

第6章 6.2.3 : readlines和writelines函数 (MATLAB入门课程)

讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 在MATLAB的文本数据处理任务中&#xff0c;导入和导出文件是常…