数据库讲解---(数据库保护)【上】
一.事务
1.1事务的概念【重要】
事务:“将一组数据库操作打包起来形成一个逻辑独立的单元,这个工作单元不可分割,其中包含的数据要么全部都发生,要么全部都不发生”。
在SQL中,界定事务的语句有三条:
- BEGIN TRANSCATION //开始一个事务,事务开始标记
- COMMIT //提交当前事务,成功结束标记
- ROLLBACK //撤销(回滚)当前事务,失败结束标记
1.2事务的特性【重要】
一个逻辑独立的工作单元要成为事务,必须满足4个特性:“原子性”、“一致性”、“隔离性”、“持久性”,简称“ACID特性”。
1.2.1原子性(Atomicity)
原子性,指事务的不可分割性,组成事务的所有操作要么全部被执行,要么全部不执行。
1.2.2一致性(Consistency)
一致性,是指在事务执行之前和执行之后数据库都必须处于一致性状态,即事务的执行使得数据库从一个一致性状态转变到另一个一致性状态。
通俗来说就是使数据库满足完整性约束。
例如:“银行的一个账户存款与取款之差应该等于余额,如果存款或者取款时不修改余额,就会造成数据库处于不一致状态”。
1.2.3隔离性(Isolation)
隔离性,是指多个事务并发执行时必须相互独立,不能相互干扰。
并发执行的事务不必关心其它事务执行如何。
1.2.4持久性(Durability)
持久性,也称持续性,是指已经提交的事务对数据库的改变应该是永久的、持续存在的、即便以后系统发生故障,事务的这种影响也不应该丢失。
二.数据库恢复
数据库恢复是指:“把数据库从一个错误状态恢复到某一已知的正确状态(即一致状态或完整状态)”
DBMS的恢复机制根据数据库错误类型,有两种处理方法:
- 未完成事务:撤销未完成事务对数据库的一切影响,保证事务的原子性。
- 已提交事务:恢复事务对数据库的更新影响,保证事务的持久性。
2.1数据库系统的故障
数据库系统中可能发生的故障大致有四类:“事物内部故障”、“系统故障”、“介质故障”、“计算机病毒”。
2.1.1事务内部故障
事物内部故障,指在事务内部操作执行过程中可能发生的故障,可以分为:“预期故障”、“非预期故障”。
- 预期故障,即在程序中程序员应该预先估计到并加以处理的错误。
- 非预期故障,即在程序运行中发生的无法预估并能预处理的错误。
2.1.2系统故障
系统故障,又称软故障,指造成系统停止运转并要求系统重新启动的事件。
造成系统故障的原因可能有:“CPU故障”、“操作系统故障”、“突然断电”等。
2.1.3介质故障
介质故障,又称硬故障,指在数据库系统运行过程中,因“磁盘损坏”、“磁头碰撞”、“强磁场干扰”等导致数据库的数据库部分或全部丢失的一类故障(外力因素/物理层次)。
2.1.4计算机病毒
计算机病毒,指一组能够自我复制传播的计算机指令或者程序代码,能够破坏计算机功能或破坏数据,影响计算机包括数据库系统的使用。
2.2数据库恢复的实现技术
数据库恢复的基本原理是建立“冗余”,即在数据库正常运行时重复存储一些数据和信息,保证有足够的信息用于故障恢复。
通常数据库系统中利用“数据转储”和“日志文件”两种方法来建立冗余数据。
2.2.1通过数据转储建立冗余
数据转储就是由DBA(数据库管理员)定期地将整个数据库复制到磁盘或另一个磁盘上面的过程,转储的数据库叫作“数据库副本”或“后备副本”、“后援副本”。
当数据库发生故障时,就可以将最近的后备副本或重新装入,把数据库恢复起来。
显然,此时数据库只能恢复到最近转储时的状态。

转储按照存储状态可以分为:“静态转储”、“动态转储”。
- 静态转储:静态转储是在系统中没有事务运行的时候进行的转储操作,缺点是效率低。
- 动态转储:动态转储允许对数据库进行存取或更新,即存储和用户事务可以并发执行,缺点是没办法保证副本和数据库的一致性。
转储按照存储方式可以分为:“海量转储”、“增量转储”。
- 海量转储:转出全部数据库内容
- 增量转储:只转储更新过的数据
数据的“增量转储”和“海量转储”也可以分别在“动态”和“静态”两种状态下进行,因此数据转储的方法可以分为4类:“动态海量转储”、“动态增量转储”、“静态海量转储”、“静态增量转储”。
2.2.2通过日志文件建立冗余
日志文件是用来记录事务对数据库所做的每一次更新活动的文件。
每一次更新活动的内容作为一条日志记录,写入日志文件,也成为登记日志。
一条日志记录的主要内容包括:“事务标识”、“操作类型”、“对象标识”、“前像”、“后像”。

- 事务标识:唯一地标识执行更新操作的事务。
- 操作类型:“start”、“commit”、“rollback”、“update”、“insert”、“delete”。
- 对象标识:唯一地标识更新操作所针对的数据对象。
- 前像:数据对象在更新操作执行之前的旧值
- 后像:数据对象在更新操作执行之后的新值
事务执行过程中,如果发生如下事件,或者操作,就在日志文件中写一个日志记录。
- 事务T开始:日志记录为(T,start,,,)
- 事务T修改对象A:日志记录为(T,update,A,前像,后像)
- 事务T插入对象A,日志记录为(T,insert,A,,后像)
- 事务T删除对象A,日志记录为(T,delete,A,前像,)
- 事务T提交,日志记录(T,commit,,,)
- 事务T回滚,日志记录(T,rollback,,,)
登记日志时,必须遵循如下两条原则:
- 登记的次序必须严格按照并发事务执行的时间次序。
- 必须先写日志文件,然后写数据库,并且日志文件不能和数据库放在同一物理磁盘上。
2.3故障恢复
不同的故障需要采用不同的策略恢复:
2.3.1事务内部故障的恢复
事务内部故障,必定发生在当前事务提交之前,这时应撤销(UNDO)事务对数据库的一切更新影响。
故障恢复由DBMS自动完成,步骤如下:
- 反向扫描日志文件,查找该事务的更新操作。
- 若查到是更新操作,则将日志文件“前像”写入数据库;若是插入操作,则将数据对象删去;若是删除操作,则做插入操作,插入数据对象的值为日志记录中的“前像”。
- 继续反向扫描日志文件,找出其他的更新操作,并做同样的处理,直至找到该事务的start标记为止。
2.3.2系统故障的恢复
系统故障会使主存中的数据丢失,此时已提交事务对数据库的更新可能还驻留在内存工作区而未写入数据库,为保证已提交事务的更新不会丢失,需要重做(REDO)已提交事务;
此外,对未提交的事务还必须撤销所有对数据库的更新。
系统故障恢复由DBMS自动完成,步骤如下:
- 从头扫描日志文件,找出在故障发生前已提交的事务(即有satrt记录和commit记录的事务),将其计入重做(REDO)队列。同时找出尚未完成的事务(即只有start记录,而没有commit或rollback的记录),将其计入(UNDO)队列。
- 对REDO队列中每个事务进行REDO操作,即正向扫描日志文件,根据登入日志文件中日志记录次序,重新执行登记操作。
- 对UNDO队列中咩个食无进行UNDO操作,即反向扫描日志文件,根据登入日志文件中相反次序,对每个更新操作执行你操作。
2.3.3介质故障的恢复
发生介质故障后,磁盘以及磁盘上的数据均可能被破坏。
这时恢复的方法是“重装数据库”,重做已经完成的事务,具体措施如下:
- 必要时更换磁盘,修复系统,重新启动系统。
- 装入最近的数据库后备副本,使数据库恢复到最近一次转储时的可用状态。
- 装入日志文件副本,根据日志文件重做最近一次转储之后提交的所有事务。
2.3.4检查点技术
如果日志文件很大(几GB),那么系统在执行恢复操作时,要遍历一个庞大的日志文件,容易造成系统宕机,因此引入“检查点技术”,可减少系统故障恢复时扫描日志记录的数目。
检查点,是数据库的一个内部事件,在系统运行过程中,DBMS按一定时间间隔在日志文件中设置一个检查点。
设置检查点需要执行以下操作:
- 暂停事务的执行,在日志文件中写一条检查点开始记录。
- 将上一个检查点之后已提交的事务留在内存工作区,所有更新的数据写入数据库(即磁盘上)
- 在日志文件中写入一个检查点结束记录。
相关文章:
数据库讲解---(数据库保护)【上】
一.事务 1.1事务的概念【重要】 事务:“将一组数据库操作打包起来形成一个逻辑独立的单元,这个工作单元不可分割,其中包含的数据要么全部都发生,要么全部都不发生”。 在SQL中,界定事务的语句有三条: B…...
【Android】【Compose】Compose的简单介绍
前言 Jetpack Compose 是谷歌推出的用于构建现代化 Android 应用界面的工具包。它采用了声明式的方式来定义用户界面,与传统的 XML 布局和视图层次结构相比,Compose 提供了更直观、更简洁的方式来创建和管理界面组件。 需求配置 Android 版本要求 An…...
对接钉钉Stream模式考勤打卡相关事件的指南
钉钉之前的accessToken是公司级别的,现在的accessToken是基于应用的,接口的权限也是基于应用的。所以第一步是在钉钉开放平台(https://open-dev.dingtalk.com/)创建一个应用。 创建好应用之后,因为我们后续还需要调用钉…...
CRMEB PRO企业微信通讯录配置
企业微信通讯录配置 登录企业微信管理后台 企业微信 1、点击【管理工具】找到【通讯录同步】点击进入 2、点击【开启API接口同步】 进入设置【通讯录同步】页面后,权限一栏,勾选【API编辑通讯录】勾选【开启手动编辑】; 3、点击下图箭头所…...
直播新篇章 | 金仓数据库“零距离”探索与知识挑战双重奏
KING大咖成就计划 全新进阶!!!携手知识竞答挑战赛震撼来袭~为您带来一场别开生面的金仓数据库探索之旅与知识竞答盛宴! 直 播 活 动 01 大咖引领,KING BASE产品“零距离”体验 您是否对金仓数据库充满好奇🧐…...
List的介绍
1. 什么是List List是一个接口,继承自Collection。 Collection也是一个接口,该接口中规范了后序容器中常用的一些方法。 Iterable也是一个接口,表示实现该接口的类是可以逐个元素进行遍历。 2. 常见接口介绍 List中提供了好的方法&#x…...
Uniapp获取具体地理位置
使用uniapp自带uni.getLocation获取当前定位经纬度 再调用高德逆地理编码API,查到具体位置信息 https://restapi.amap.com/v3/geocode/regeo?location${longitude},${latitude}&key${key}&extensionsall 但是个人申请的key,有配额限制 最多每…...
Kafka基础教程
Kafka基础教程 资料来源:Apache Kafka - Introduction (tutorialspoint.com) Apache Kafka起源于LinkedIn,后来在2011年成为一个开源Apache项目,然后在2012年成为一流的Apache项目。Kafka是用Scala和Java编写的。Apache Kafka是基于发布-订…...
视频智能分析平台智能边缘分析一体机安防监控平台打手机检测算法工作原理介绍
智能边缘分析一体机的打手机检测算法是一种集成了计算机视觉和人工智能技术的先进算法,专门用于实时监测和识别监控画面中的打手机行为。以下是关于该算法的详细介绍: 工作原理 1、视频流获取: 智能边缘分析一体机首先通过连接的视频监控设…...
辅助构造函数相关学习以及php实现
https://mp.weixin.qq.com/s/J9hgLTxYi7ZJdFVG2VszQg 对这个文章进行摘要生成 ### 总体概要 文章阐述了在对象创建过程中,辅助构造函数(或称为“多个”构造函数)的重要性,它们为代码增加了功能性逻辑,并允许根据需求调…...
Linux中nginx.conf如何配置【搬代码】
Nginx 是一个独立的软件。 它是一款高性能的 Web 服务器、反向代理服务器和负载均衡器等,具有强大的功能和广泛的应用场景。它通常需要单独进行安装和配置来发挥其作用。 下载网址:http://nginx.org/en/download.html nginx.conf写法: #配置…...
Django REST framework序列化器详解:普通序列化器与模型序列化器的选择与运用
系列文章目录 Django入门全攻略:从零搭建你的第一个Web项目Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解Django ORM深度游ÿ…...
红队内网攻防渗透:内网渗透之内网对抗:隧道技术篇防火墙组策略ICMPDNSSMB协议出网判断C2上线解决方案
红队内网攻防渗透 1. 内网隧道技术1.1 学隧道前先搞清楚的知识1.2 常用的隧道技术1.3 判断协议出网的命令1.4 C2上线-开防火墙入站只80&出站只放ICMP1.4.1 icmp隧道上线CS后门1.4.1 icmp隧道上线MSF后门1.5 C2上线-开防火墙入站只80&出站只放DNS1.5.1 DNS隧道上线CS后门…...
【Autoware】Autoware.universe安装过程与问题记录
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Autoware.universe安装过程与问题记录。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下…...
JavaScript的学习之旅之基本数据类型
目录 一、字面量(常量)和变量 二、标识符 三、数据类型 1.String类型 2.Number类型 四、布尔值类型 五、Null和Undefined类型 一、字面量(常量)和变量 字面量:不可变的数据,一般位于等式的右边 变量&…...
oracle开放某些视图给特定用户,查询报视图不存在问题
以sysdba身份登录到Oracle数据库。 创建新用户。例如,创建一个名为new_user的用户,密码为password: CREATE USER new_user IDENTIFIED BY password;为新用户分配表空间和临时表空间。例如,将表空间users和临时表空间temp分配给新…...
es 更新索引mapping和setting
1.关闭索引 curl -X POST "localhost:9200/your_index_name/_close"2.修改setting 配置 无法更新一些默认数据,按照需求构建,我这边是构建增加了分词器 "settings": {"index": {"creation_date": "1718850346547…...
广告联盟流量变现app开发
广告联盟流量变现App的开发是一个涉及多个方面的综合性项目。以下是一个简要的开发流程和相关考虑因素: 市场分析与定位: 首先,需要对目标用户群体进行深入研究,了解他们的需求和偏好1。分析当前市场上的竞争对手和流行的广告模式…...
【Python高级编程】pickle`文件处理:序列化与反序列化
使用pickle模块可以在Python中方便地序列化和反序列化Python对象。以下是一个例子,展示了如何处理pickle文件,包括如何保存数据到pickle文件和从pickle文件加载数据。假设我们有一些数据需要保存并在之后加载。 示例代码 保存数据到 pickle 文件 impo…...
如何在 Linux 上安装 Docker Desktop
如何在 Linux 上安装 Docker Desktop Docker 是一个用于开发、部署和运行应用程序的开放平台。Docker Desktop 是 Docker 在 macOS 和 Windows 上的官方客户端,现在也支持 Linux 系统。本文将详细介绍如何在 Linux 上安装 Docker Desktop。 系统要求 在开始安装之…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
