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

目录

一.事务

1.1事务的概念【重要】

1.2事务的特性【重要】

1.2.1原子性(Atomicity)

1.2.2一致性(Consistency)

1.2.3隔离性(Isolation)

1.2.4持久性(Durability)

二.数据库恢复

2.1数据库系统的故障

2.1.1事务内部故障

2.1.2系统故障

2.1.3介质故障

2.1.4计算机病毒

2.2数据库恢复的实现技术

2.2.1通过数据转储建立冗余

2.2.2通过日志文件建立冗余

2.3故障恢复

2.3.1事务内部故障的恢复

2.3.2系统故障的恢复

2.3.3介质故障的恢复

2.3.4检查点技术

一.事务

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按一定时间间隔在日志文件中设置一个检查点

设置检查点需要执行以下操作:

  • 暂停事务的执行,在日志文件中写一条检查点开始记录。
  • 将上一个检查点之后已提交的事务留在内存工作区,所有更新的数据写入数据库(即磁盘上)
  • 在日志文件中写入一个检查点结束记录。

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

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

相关文章

甘肃的千层烤馍:传统面点的魅力绽放

千层烤馍,作为甘肃美食文化的重要象征,以其独特的外形和丰富的口感,吸引着众多食客。它的外观犹如一件精美的艺术品,层层叠叠,金黄酥脆,散发着诱人的香气。 在甘肃平凉地区制作千层烤馍&#xff0c…

详解|什么样的SSL证书能助力企业通过等保与密评?

企业在过等级保护(简称“等保”)与密码评测(简称“密评”)的时候,SSL证书作为网络安全的基础组件之一,其选择与部署对于企业顺利通过等保测评与密评至关重要。那什么样的SSL证书能够有效助力企业达成这一目…

gbase8s之Encoding or code set not supported

如图发生以下错误: 解决办法:在url里加上ifx_use_strenctrue 就可以了 参数解释:

镜像发布至dockerHub

1、login 没有账号的话去注册一个 https://hub.docker.com docker login 输入账号密码和账号2、修改镜像名格式 可以直接招我的修改 格式为你的 hub名/镜像名 3、推送

与大模型交手近 1500 天,智源仍在坚持原始创新

前言 2024 上半年, OpenAI 的成果从世界模拟器 Sora,到首个实现多模态 in 到多模态 out 的 GPT-4o ,仍在强势推进着迈向 AGI 的节奏。面对技术上的差距,追赶 OpenAI ——是这场人工智能革命浪潮发展至今, AI 界仍在追…

密码CTF(5)

一、[安洵杯 2020]密码学?爆破就行了——sha256掩码爆破 1.题目: #!/usr/bin/python2 import hashlib from secret import SECRET from broken_flag import BROKEN_FLAGflag d0g3{ hashlib.md5(SECRET).hexdigest() } broken_flag d0g3{71b2b5616…

解决virtualbox虚拟机与主机之间复制粘贴

1、在VirtualBox管理器中设置共享粘贴板和拖放方向为双向 2、在存储中设置使用主机输入输出(I/O)缓存。 3、在存储→控制器:SATA→***.vdi下勾选固态驱动器 4、在虚拟机→设备→安装增强功能 如果上述操作重启虚拟机后,还不行&am…

揭秘Xinstall如何助力App推广,提升用户量与转化率双指标!

在移动互联网时代,App的推广与运营成为了每个开发者必须面对的重要课题。然而,推广效果的评估和优化往往令众多开发者头疼不已。今天,我们将为您揭秘一款能够解决这一痛点的利器——Xinstall,带您一起探讨它如何助力App推广&#…

深度神经网络一

文章目录 深度神经网络 (DNN)1. 概述2. 基本概念3. 网络结构 深度神经网络的层次结构详细讲解1. 输入层(Input Layer)2. 隐藏层(Hidden Layers)3. 输出层(Output Layer)整体流程深度神经网络的优点深度神经…

项目实践---Windows11中安装Zookeeper/Hadoop/Hive的部分问题解决

一.Hadoop与Hive兼容版本选择 正常来说,Hadoop与Hive版本不兼容会出现很多问题导致hive安装失败,可以先确定HIve的版本,比如:要用Hive3.1.2版本,该如何确定使用Hadoop的版本呢,需要我们在hive源码中找到对…

C盘满了怎么清理?一招让你远离C盘空间不足的烦恼

C盘满了怎么清理?一招让你远离C盘空间不足的烦恼,当C盘空间满了时,会给我们来一系列烦恼和潜在问题。比如:系统运行缓慢、程序崩溃或无法安装、启动时间变长、系统不稳定、文件管理困难、游戏卡顿、电脑卡顿、系统故障等问题&…

「漏洞复现」真内控国产化开发平台 preview 任意文件读取漏洞

0x01 免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删…

Python基础用法 之 输入 与 输出

1.输入 (1)什么是输入? 输入:获取键盘的输入信息。 (2)语法 变量 input(给使⽤者的提示信息,即告诉别⼈输入什么内容) (3)注意事项 代码从上到下执⾏, 当代码执⾏遇到 input 的时候…

【产品经理】订单处理8-智能分仓

在电商ERP系统中,通常智能分仓策略是系统中最重要的功能之一,大公司若仓库较多时,智能分仓策略中也会加入大数据团队,通过算法来计算最优仓库。 本次讲解的智能分仓适用于中小公司,适合拥有2个以上10个以下仓库的公司…

ServBay 下一代Web开发环境

ServBay是一个集成式、图形化的本地化Web开发环境。开发者通过ServBay几分钟就能部署一个本地化的开发环境。解决了Web开发者(比如PHP、Nodejs)、测试工程师、小型团队安装和维护开发测试环境的问题,同时可以快速的进行环境的升级以及维护。S…

如何将现有系统逐步优化成微服务设计

目录 基础服务改造核心步骤准备阶段实施阶段 基础服务设计 本文诞生于学习架构实践专栏后的深思以及总结,结合公司之前“大泥球”的架构风格,改造服务设计的思维。 改造公司系统服务主要原因:1、代码类似“屎山”,牵一发而动全身&…

Virtualbox主机和虚拟机之间文件夹共享及双向拷贝

在VirtualBox这样的虚拟化环境中,实现主机与虚拟机之间的文件夹共享与双向文件传输是一个常见的需求。下面,我们将详细讲解如何在VirtualBox中实现这一功能。 一、安装与准备 首先,确保你已经安装了VirtualBox,并在其上成功创建…

Python学习打卡:day12

day12 笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了 目录 day1292、全国疫情地图构建数据整理获取数据数据整体结构(全国)省数据结构获取每个省份的确诊数据上述代码执行后输出&…

JavaScript的学习之旅之基本数据类型

目录 一、字面量(常量)和变量 二、标识符 三、数据类型 1.String类型 2.Number类型 四、布尔值类型 五、Null和Undefined类型 一、字面量(常量)和变量 字面量:不可变的数据,一般位于等式的右边 变量&…

vue生成二维码跳转到小程序

参考 https://blog.csdn.net/qq_51678620/article/details/121397610 https://blog.csdn.net/blue__k/article/details/125410448 this.$nextTick(()>{// new qrcode(this.$refs.qrCodeDiv, {// text: "https://www.aiitss.cn/member?id"id,//二维码链接&…