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

数据库讲解---(数据库保护)【上】

一.事务

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事务内部故障

事物内部故障,指在事务内部操作执行过程中可能发生的故障,可以分为:“预期故障”、“非预期故障”。

  1. 预期故障,即在程序中程序员应该预先估计到并加以处理的错误。
  2. 非预期故障,即在程序运行中发生的无法预估并能预处理的错误。

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产品“零距离”体验 您是否对金仓数据库充满好奇&#x1f9d0…...

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深度游&#xff…...

红队内网攻防渗透:内网渗透之内网对抗:隧道技术篇防火墙组策略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。 系统要求 在开始安装之…...

勒索病毒猖狂,请提前做好安全防护,德迅卫士保护你的安全

随着互联网的飞速发展,网络安全问题日益凸显。其中,勒索病毒作为一种极具危害性的网络安全威胁,已经引起了广泛关注。为了帮助大家更好地预防和应对勒索病毒攻击,我们特地为您精心准备了这份超实用的勒索病毒自救预防指南。让我们…...

Pycharm怎么默认终端连接远程服务器

因为经常需要从宿舍到学校内通勤,期间所有连接都会中断,所以每次开SSH特别麻烦,每次终端自动切换到本地: 每次都得点一下Start SSH Session 想要默认终端连接远程服务器,需要点File->Setting->Tools->SSH T…...

CTFHUB-SSRF-端口扫描

已经提示我们需要扫描8000~9000的端口 ?urlhttp://127.0.0.1:8000/flag.php 访问用burp抓包爆破 通过Burp扫描8000-9000端口开放的web服务,发现8718开放web服务...

日期工具类:获取 当前周 | 上一周 | 下一周 的第一天(周一)和最后一天(周天)

问题背景 获取 当前周 | 上一周 | 下一周 的第一天(周一)和最后一天(周天)。 例如: 输入:2024-6-21, current 输出:{"firstDay": "2024-6-17","lastDay": "2024-6-23"}输入:2024-6-21, last 输出:{"firstDay": …...

大数据学习-Hadoop

介绍 是 Apache 的顶级开源项目,一个分布式框架,主要功能: 分布式大数据存储——HDFS 组件分布式大数据计算——MapReduce 组件分布式资源调度——YARN 组件 可以通过它来构建集群,完成大数据的存储和计算 学习起来相对简单&…...

visualbox搭建linux环境双网卡配置

文章目录 1. 双网卡模式简介2. 网络模式配置2.1 virtualBox说明2.2 host-only网络模式配置2.3 NAT网络模式配置 3. 虚拟主机网络设置3.1 网卡一设置3.2 网卡二设置 4. 网卡配置5. ssh访问 本篇的目的是为了搭建本地的linux测试环境用。 1. 双网卡模式简介 双网卡网络模式简介 …...

一分钟了解Galaxybase银河图数据库先锋版升级功能!

Galaxybase 银河图数据库是一款创邻科技自主研发的商用图数据库,具有高性能、高可用、企业级安全等特性,支持大规模数据查询实时返回,快速挖掘关联关系,发现深层商业洞见,可广泛应用于金融、能源、电信、政企等行业中的…...

C++并发之协程实例(二)(计算斐波那契序列)

目录 1 协程2 实例-计算斐波那契序列2.1 斐波那契序列2.2 代码 3 运行 1 协程 协程(Coroutines)是一个可以挂起执行以便稍后恢复的函数。协程是无堆栈的:它们通过返回到调用方来暂停执行,并且恢复执行所需的数据与堆栈分开存储。这允许异步执行的顺序代码…...

云邮件推送服务如何配置?有哪些优势特点?

云邮件推送的性能怎么优化?如何选择邮件推送服务? 云邮件推送服务是一种基于云计算的邮件发送解决方案,能够帮助企业和个人高效地发送大规模邮件。AokSend将详细介绍如何配置云邮件推送服务,以便你能够充分利用其优势。 云邮件推…...

QT 数值型坐标轴有那些?(QValueAxis)

在Qt中,QValueAxis类用于表示数值型坐标轴,它本身没有直接的子类,但它是从QAbstractAxis这个抽象类继承而来的。QAbstractAxis是定义坐标轴属性和行为的基类,而QValueAxis则在此基础上提供了针对数值数据的具体实现。 Qt的图表模…...

桐庐县网站建设/武汉 网络 推广

2010年1月12日上午8:43分,百度无法访问????被黑了?8:47分,验证百度贴吧、百度知道等均无法打开。8:52分,尝试ping百度域名,竟然正常……8:56分,听同事说广州有…...

全面的手机网站建设/小黄豆crm

缓存穿透 缓存穿透 :缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库,失去了缓存保护后端存储的意义。 解决方案 缓存空值 如果访问数据库后还未命中,则把一…...

有没有专做零食批发的网站/南宁百度网站推广

声明使用JDK8测试; 参考官网配置,网址如下: http://www.mybatis.org/mybatis-3/zh/configuration.html aggressiveLazyLoading 在mybatis版本小于3.4.1时候,默认是true开启状态,懒加载要有效果需要手动关闭&#xff1…...

上海公司企业网站怎么做/steam交易链接在哪

编辑.转到引用 Shift F12 显示代码中所选内容的引用。 编辑.转到定义 F12 显示代码中所选内容。 编辑.Ctrl减号、CTRL SHIFT 减号 通过Ctrl减号你可以快速的返回到函数的调用处 编辑.向下调大控件大小 Ctrl Shift 向下键 在设计图面上,以 1 为增量&#xf…...

asp网站部署 iis7/关键词推广seo怎么优化

那就先上几幅图吧。深圳40年灯光秀的照片吧。 每一张照片都是分为上下2个部分是吧。上面的部分,是一个一个立起来的高楼。如果你在深圳,在莲花山,很容易就能看出来。腾讯大厦就在那里。下面是显示的画面,是实际上播出的画面。我们…...

山西网站开发公司/湖南seo优化哪家好

单元格合并着实让人为难! 使用的dev 的GridControl控件,实现数据绑定很方便,但是在网上查怎么都没有找到如何实现单元格的合并。所以只好作罢。 然后计划采用FlexCell,但是是付费的。使用了一下和Excel差类似,实现的样…...