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

news2024/10/8 12:01:47

目录

一.事务

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.coloradmin.cn/o/1860566.html

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

相关文章

基于轨迹加权的混合离线强化学习数据集

写在前面: 这篇论文阅读已经同步到我的博客网站,若需更优的阅读体验,请前往https://mainjaylai.github.io/Blog/blog/paper/trajectory-dataset进行浏览 摘要 大多数离线强化学习(RL)算法通过最大化目标策略的期望性…

基因检测2 - 脆性X综合征

1. 脆性X综合征 脆性X综合征(Fragile X syndrome, FXS)遗传性智力障碍和孤独症谱系障碍(Autism spectrum disorder, ASD)最常见的单基因病(发病率仅次于唐氏综合征Down syndrome, DS),为X连锁不…

总结一些LLM算法岗遇到的八股

总结一些我被问到的题和常见的题目,答案有不对的欢迎指出。 Batch Norm和Layer Norm的定义及区别? BN 批量归一化:以进行学习时的mini-batch为单位,按mini-batch进行正规化。具体而言,就是进行使数据分布的均值为0、…

C语言入门课程学习笔记9:指针

C语言入门课程学习笔记9 第41课 - 指针:一种特殊的变量实验-指针的使用小结 第42课 - 深入理解指针与地址实验-指针的类型实验实验小结 第43课 - 指针与数组(上)实验小结 第44课 - 指针与数组(下)实验实验小结 第45课 …

工信部中小企业局一行莅临盘古信息调研指导

近日,中小企业数字化转型城市试点调研交流活动在广东东莞举行,工业和信息化部中小企业局副局长商超,广东工业和信息化厅二级巡视员张振祥,工业和信息化部中小企业局创业创新处处长李海涛,东莞市委常委、副市长刘光滨&a…

canvas如何让单行文本用...省略

let strWidth ctx.measureText(this.data.name).width; const ellipsis "..." const ellipsisWidth ctx.measureText(ellipsis).width; if(strWidth<120 || 120<ellipsisWidth) {ctx.fillText("测试:"this.data.name, 190*dpr,590*dpr); }else {va…

(上位机APP开发)调用华为云属性修改API接口修改设备属性

一、功能说明 通过调用华为云IOT提供的属性修改API接口,给设备下发属性修改消息。 API接口地址:https://support.huaweicloud.com/api-iothub/iot_06_v5_0034.html 此接口支持在线调试:https://console.huaweicloud.com/apiexplorer/#/openapi/IoTDA/doc?api=UpdatePrope…

基于Java微信小程序火锅店点餐系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…

基于电商模式的性能测试(2) —— 使用Jmeter参数化功能+JSR223 PreProcessor+JSON Extractor完成注册登录的数据驱动

1、前置条件 此例使用的是GitHub上一个开源的电商项目mall&#xff0c;需要的可以去GitHub上下载部署&#xff0c;有详细的部署教程&#xff1a; GitHub地址&#xff1a;github.com/macrozheng/…部署教程&#xff1a;macrozheng.github.io/mall-learni… 2、场景抽离 首先要…

全国首场以AI数字内容风控为主题的大会正式官宣,首批演讲嘉宾和议题揭晓!

曾经我们感叹的“AI迎来了iPhone时刻”&#xff0c;如今已变成“iPhone迎来了AI时刻”。前段时间&#xff0c;苹果全球开发者大会的召开&#xff0c;以及闻声而起的资本市场&#xff0c;无一不再次佐证了AI的无穷想象。 从OpenAI直播演示GPT-4o和谷歌的I/O开发者大会2024&…

Qt开发 | Qt界面布局 | 水平布局 | 竖直布局 | 栅格布局 | 分裂器布局 | setLayout使用 | 添加右键菜单 | 布局切换与布局删除重构

文章目录 一、Qt界面布局二、Qt水平布局--QHBoxLayout三、Qt竖直布局四、Qt栅格布局五、分裂器布局代码实现六、setLayout使用说明七、布局切换与布局删除重构1.如何添加右键菜单2.布局切换与布局删除重构 一、Qt界面布局 Qt的界面布局类型可分为如下几种 水平布局&#xff08;…

【ai】tx2 nx :安装torch、torchvision for yolov5

torchvision 是自己本地构建的验证torchvision nvidia@tx2-nx:~/twork/03_yolov5/torchvision$ nvidia@tx2-nx:~/twork/03_yolov5/torchvision$ python3 Python 3.6.9 (default, Mar 10 2023, 16:46:00) [GCC 8.4.0] on linux Type "help", "copyright",…

乐鑫ESP32-WROOM-32E模组设备低功耗控制方案,启明云端乐鑫代理商

在数字化浪潮的推动下&#xff0c;物联网&#xff08;IoT&#xff09;正迅速成为我们日常生活的一部分。而在这个领域中&#xff0c;ESP32-WROOM-32E模组以其卓越的性能和多功能性&#xff0c;成为了开发者和制造商的选择。 ESP32-WROOM-32E模组集成了ESP32-D0WD-V3芯片&#…

迁移学习——CycleGAN——循环一致性对抗网络

CycleGAN 1.导入需要的包2.数据加载&#xff08;1&#xff09;to_img 函数&#xff08;2&#xff09;数据加载&#xff08;3&#xff09;图像转换 3.随机读取图像进行预处理&#xff08;1&#xff09;函数参数&#xff08;2&#xff09;数据路径&#xff08;3&#xff09;读取文…

NAS安全存储怎样实现更精细的数据权限管控?

NAS存储&#xff0c;即网络附属存储&#xff08;Network Attached Storage&#xff09;&#xff0c;是一种专用数据存储服务器&#xff0c;其核心特点在于将数据存储设备与网络相连&#xff0c;实现集中管理数据的功能。 NAS存储具有以下明显优势&#xff0c;而被全球范围内的企…

vncsever ,window 远程ubuntu远程界面安装方式,VNC Viewer安装教程+ linux配置server 操作

linux 端安装 # 安装VNC 服务器软件 sudo apt install autocutsel # 剪切黏贴操作支持的包 sudo apt-get install tightvncserver # 安装的是 VNC 服务器软件,用于远程桌面访问 # 安装Xfce桌面环境 sudo apt-get install xfce4 xfce4-goodies #安装的是 XFCE 桌面环境和其…

EXCEL表格怎么批量删除日期后的时间?

竞价师最近有点忙了&#xff0c;因为百度新出来一个“线索有效性诊断”功能 一、下载电话、表单、咨询表格 二、选中整列 三、选中ctrlf 进行替换&#xff0c;日期输入空格&#xff0c;时间输入*&#xff0c;替换为空即可&#xff01; 四、整列单元格格式“日期”拉倒底部&…

正则表达式以及文本三剑客grep、sed、awk

正则表达式匹配的是文本内容&#xff0c;文本三剑客都是针对文本内容。 grep&#xff1a;过滤文本内容 sed&#xff1a;针对文本内容进行增删改查 awk&#xff1a;按行取列 一、grep grep的作用使用正则表达式来匹配文本内容 1、grep选项 -m&#xff1a;匹配几次之后停止…

知识付费小程序源码系统 构建知识交易新平台 带完整的安装代码包+搭建部署教程

系统概述 随着互联网技术的不断发展&#xff0c;人们获取信息的方式发生了巨大改变。传统的知识传播方式已经无法满足人们日益多样化的需求&#xff0c;知识付费逐渐成为一种趋势。同时&#xff0c;移动互联网的普及使得小程序成为人们生活中不可或缺的一部分&#xff0c;利用…

拓扑排序-体育课测验(二)

目录 一、问题描述 二、解答思路 三、代码实现 四、刷题链接 一、问题描述 二、解答思路 拓扑排序&#xff1a; 1.设置一个入度数组&#xff0c;构建图的邻接矩阵的同时对入度数组进行初始化 2.执行结点个数次的循环&#xff0c;每次循环都统计入度数组中的入度为0的结点P&…