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

目录

一.事务

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.mzph.cn/bicheng/31947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux操作系统篇:多线程

一. Linux中线程是怎么理解的 1.1 线程概念 在Linux中,线程是在进程“内部”执行的,线程是处于进程的进程地址空间中运行,线程用到的资源都是进程的资源,线程是执行进程的一部分代码,线程是最小的执行流&am…

Android记录3--ExpandableListView使用+获取SIM卡状态信息

布局文件&#xff1a; /SIM_Card_Demo/res/layout/inbox.xml <LinearLayout xmlns:android“http://schemas.android.com/apk/res/android” xmlns:tools“http://schemas.android.com/tools” android:layout_width“match_parent” android:layout_height“match_par…

【代码】python实现一个BP神经网络-原理讲解与代码展示

​ 本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 目录 一、BP神经网络原理回顾1.1 BP神经网络的结构简单回顾1.2.BP神经网络的训练算法流程 二、python实现BP神经网络代码2.1.数据介绍2.2.pytorch实现BP神经网络代码 在python中要如何使用代码实现一个BP神经网络呢…

使用Rsbuild构建基于Vue3+Vant4开发h5应用

目录 一、介绍 1.1 Vant介绍 1.2 Rsbuild介绍 1.3 Vue介绍 二、构建应用 1.第一步 2.第二步 3.第三步 4.第四步 5.第五步 6.在项目中使用 Vant4 组件 7.移动端适配Rem 8. 执行 cnpm run dev 启动项目 一、介绍 1.1 Vant介绍 Vant 是一个轻量、可定制的移动端组…

单机小游戏好上架的应用市场有哪些?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

Vue3中的常见组件通信(超详细版)

Vue3中的常见组件通信 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-model3. $refs4. 默认…

Mac电脑FTP客户端推荐:Transmit 5 for Mac 中文版

Transmit 5是一款专为macOS平台设计的功能强大的FTP&#xff08;文件传输协议&#xff09;客户端软件。Transmit 5凭借其强大的功能、直观易用的界面和高效的性能&#xff0c;成为需要频繁进行文件传输和管理的个人用户和专业用户的理想选择。无论是对于新手还是经验丰富的用户…

Starlink全系卫星详细介绍,波段频谱、激光星间链路技术、数据传输速率等等

Starlink全系卫星详细介绍&#xff0c;波段频谱、激光星间链路技术、数据传输速率等等。 Starlink是SpaceX公司开发的一个低轨道&#xff08;LEO&#xff09;卫星网络系统&#xff0c;旨在为全球用户提供高速宽带互联网服务。截至2024年6月&#xff0c;Starlink已经发射并运行…

终于找到了免费的云服务器

今天朋友推荐了一个免费的云服务器&#xff1a;“阿贝云” 我最喜欢的是它的"免费虚拟主机"“免费云服务器”&#xff0c;省了我好多钱&#xff0c;我的使用感受是用起来经济实惠省心&#xff0c;不要钱的东西谁不喜欢呢&#xff0c;对于普通开发者来说&#xff0c;…

长尾式差分放大电路调零

长尾式放大电路用了两个参数相同的三极管&#xff0c;但实际上并没有完全相同的三极管&#xff0c;所以为了提高差分放大电路的对称性(一边电流增加多少&#xff0c;另一边电流减小多少&#xff0c;即能在电阻Re上产生的压降不变(后面做虚地处理))&#xff0c;在下图中加入可调…

【Linux 杂记】TOP命令

top命令用于动态显示系统中正在运行的进程的详细信息&#xff0c;以及系统的整体资源使用情况。以下是其主要输出解释&#xff1a; Header 表头信息&#xff1a; top&#xff1a;当前时间和运行时间。Tasks&#xff1a;进程统计信息&#xff0c;如总进程数、运行中、睡眠中等。…

xocde编辑器支持修改为中文吗?不支持

xocde编辑器支持修改为中文吗&#xff1f; 不支持

rttys服务器和客户端

rttys服务器 1.下载 https://github.com/zhaojh329/rttys/releases2.解压运行 libev交叉编译 cd libev ./configure --hostarm-linux CCaarch64-poky-linux-gcc --prefix/home/michael/rtty_install make install DESTDIR/home/michael/rtty_installrtty客户端 1.git地…

RabbitMQ —— 理解及应用场景

一、MQ相关的概念 RabbitMQ 是一种分布式消息中间件&#xff0c;消息中间件也称消息队列MQ&#xff0c;那么什么是MQ呢&#xff1f;请继续阅读下文。 1.1、MQ的基本概念 什么是MQ MQ(message queue)&#xff0c;从字面意思上看就个 FIFO 先入先出的队列&#xff0c;只不过队列…

2024 年解锁 Android 手机的 7 种简便方法

您是否忘记了 Android 手机的 Android 锁屏密码&#xff0c;并且您的手机已被锁定&#xff1f;您需要使用锁屏解锁 Android 手机&#xff1f;别担心&#xff0c;您不是唯一一个忘记密码的人。我将向您展示如何解锁 Android 手机的锁屏。 密码 PIN 可保护您的 Android 手机和 G…

Node.js中基于node-schedule实现定时任务之详解

文章目录 一、定时任务二、node-schedule、1、安装2、引入3、基于Cron表达式的规则4、基于Date的规则5、基于RecurrenceRule的规则6、API7、状态监听 一、定时任务 实际工作中&#xff0c;可能会遇到定时清除某个文件夹内容&#xff0c;定时发送消息或发送邮件给指定用户&…

Django集成OpenAI

Django集成OpenAI 通过前面 django 框架的基本开发知识&#xff0c;我们现在可以开始在 django 上做稍微深一点当然应用开发了。 这一章开始编写怎么集成调用 openai &#xff0c;设置环境以及 openai 的基础知识。 大家都知道 ai 的多模态逐渐扩大&#xff0c;各种应用层出…

怎么采集阿里巴巴1688的商品或商家数据?

怎么使用简数采集器批量采集阿里巴巴1688的商品或商家相关信息呢&#xff1f; 简数采集器暂时不支持采集阿里巴巴1688的相关数据&#xff0c;谢谢。 简数采集器采集网络网页数据非常简单高效&#xff1a;输入要采集的网址&#xff0c;简数智能算法会自动提取出网页上的关键信…

Charles抓取安卓应用https包演示

一、准备软件 夜神安卓模拟器 (yeshen.com) Charles (charlesproxy.com) 二、配置抓包 2.1 Charles安装PC根证书 记住这里的ip端口 三、安卓模拟器配置 3.1 配置安卓客户端网络代理 填写上文的ip端口&#xff0c;保存 3.2 安装根证书 3.2.1 导出根证书 linux主机执行 op…

推荐4款实用工具,非常好用,建议收藏

PDFREAL PDFReal 是一个功能强大的在线PDF编辑工具&#xff0c;提供多种实用的PDF处理功能。用户可以在一个网站上完成包括PDF合并、PDF拆分、PDF压缩、PDF保护、PDF解锁等多种操作。此外&#xff0c;PDFReal 还支持将文本转换为PDF、将图片转换为PDF、添加水印、提取页面内容等…