数据库恢复技术

事务

含义:用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位

地位:恢复和控制并发的基本单位

区分事务和程序,一个程序中包含多个事务

定义事务

事务的开始与结束可以由用户显式控制

若用户没有显式地定义事务,则由数据库管理系统按默认规定自动划分事务

语句

begin transaction;

commit;提交,提交事务的所有操作,将事务中所有对数据库的更新写回到磁盘上的物理数据库中,正常结束

rollback;回滚,将事务中对数据库的所有已完成的操作全部撤销,回滚到事务开始时的状态,异常结束

ACID 特性

原子性 A

事务是数据库的逻辑工作单位,事务中包括的诸操作,要么都做,要么都不做

一致性 C

正确性

事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态

当数据库只包含成功事务提交的结果时,数据库处于一致性状态

隔离性 I

一个事务的执行不能被其他事务干扰

持续性 D

也称永久性

一个事务一旦提交,其对数据库中数据的改变就应该是永久性的

故障

各类故障对数据库的影响由两种可能性,一是数据库本身被破坏,二是数据库没有被破坏,但数据可能不正确,由于事务的运行被非正常终止造成的

恢复的基本原理:冗余,即数据库中任何一部分被损坏或不正确的数据可根据存储在系统别处的冗余数据重建

数据库恢复

定义:把数据库从错误状态恢复到某一已知的正确状态

恢复子系统是数据库管理系统的一个重要组成部分

数据库系统所采用的恢复技术是否行之有效,是衡量系统性能优劣的重要指标

恢复的实现技术

恢复机制涉及的两个关键问题:如何建立冗余数据,如何利用这些冗余数据实施数据库恢复

建立冗余数据最常用的技术:数据转储和登记日志文件

数据转储

地位:数据库恢复采用的基本技术

定义:数据库管理员定期地将整个数据库复制到磁带、磁盘或其他存储介质上保存起来的过程

后备副本 / 后援副本

当数据库遭到破坏后可以将后备副本重新装入,但重装后备副本只能将数据库恢复到转储时的状态,想要恢复到故障发生时的状态,必须重新运行自转储以后的所有更新事务

系统在 Ta 时刻停止运行事务,进行数据转储,在 Tb 时刻转储完毕,得到 Tb 时刻的数据库一致的副本

转储状态
  • 静态转储:在系统中无运行事务时进行转储操作,静态转储得到的一定是一个数据一致性的副本 静态转储简单,但转储必须等待正运行的用户事务结束才能进行,新的事务必须等待转储结束才能执行,这会降低数据库的可用性
  • 动态转储:转储期间允许对数据库进行存取或修改 必须把转储期间各事务对数据库的修改活动登记下来,建立日志文件,后援副本加上日志文件就能把数据库恢复到某一时刻的正确状态【后援副本不记录转储期间对数据库进行的存取或修改】
转储方式
  • 海量转储:每次转储全部数据库
  • 增量转储:每次只转储上一次转储后更新过的数据

从恢复角度看,使用海量转储得到的后备副本进行恢复会方便些

若数据库很大,事务处理十分频繁,使用增量转储方式更有效

日志文件

定义:记录事务对数据库的更新操作的文件

格式

不同数据库系统采用的日志文件格式不完全一样,主要有两种格式

以记录为单位的日志文件

日志文件中需要登记的内容:

  • 各个事务的开始标记
  • 各个事务的结束标记
  • 各个事务的所有更新操作

以上均作为日志文件中的一个日志记录

每个日志记录的内容:

  • 事务标识(标明是哪个事务)
  • 操作的类型(插入、删除或修改)
  • 操作对象(记录内部标识)
  • 更新前数据的旧值(对插入操作而言,此项为空值)
  • 更新后数据的新值(对删除操作而言,此项为空值)
以数据块为单位的日志文件

日志记录的内容:

  • 事务标识
  • 被更新的数据库

由于将更新前的整个块和更新后的整个块都放入日志文件中,故操作类型和操作对象等信息不必放入日志记录中

作用
  1. 事务故障恢复和系统恢复必须用日志文件
  2. 在动态转储方式中必须建立日志文件,后备副本和日志文件结合起来才能有效地恢复数据库
  3. 在静态转储方式中也可以建立日志文件,当数据库毁坏后可重新装入后援副本把数据库恢复到转储结束时刻的正确状态,然后利用日志文件把已完成的事务进行重处理,把故障发生时尚未完成的事务进行撤销处理

登记日志文件

为保证数据库是可恢复的,登记日志文件时必须遵循的两条规则:

  • 登记的次序严格按并发事务执行的时间次序
  • 必须先写日志文件,后写数据库

恢复策略

事务故障的恢复

事务故障是指事务在运行至正常终止点前被终止,此时恢复子系统应利用日志文件撤销此事务已对数据库进行的修改

事务故障的恢复由系统自动完成,对用户透明

系统的恢复步骤
  1. 反向扫描日志文件,查找该事务的更新操作
  2. 对事物的更新操作执行逆操作,即将日志记录中”更新前的值“写入数据库 【记录中是插入操作,相当于做删除操作;记录中是删除操作,则做插入操作;记录中是修改操作,则相当于用修改前值代替修改后值】
  3. 继续反向扫描日志文件,查找事务的其他更新操作,并做同样处理
  4. 如此处理下去,直至读到此事务的开始标志,事务故障恢复完成

系统故障的恢复

系统故障造成数据库不一致状态的原因有两个,一是未完成事务对数据库的更新可能已写入数据库,二是已提交事务对数据库的更新可能还留在缓冲区没来得及写入数据库,因此恢复操作是要撤销故障发生时未完成的事务,重做已完成的事务

系统故障的恢复是由系统在重新启动时自动完成的,不需要用户干预

系统的恢复步骤
  1. 正向扫描日志文件,找出在故障发生前已经提交的事务,将其事务标识记入重做队列;同时找出故障发生时尚未完成的事务,将其事务标识记入撤销队列
  2. 对撤销队列中的各个事务进行撤销处理

进行撤销处理的方法是:反向扫描日志文件,对每个撤销事务的更新操作执行逆操作,即将日志记录中”更新前的值“写入数据库

  1. 对重做队列中的各个事务进行重做处理

进行重做处理的方法是:正向扫描日志文件,对每个重做事务重新执行日志文件登记的操作,即将日志记录中”更新后的值“写入数据库

介质故障的恢复

发生介质故障后,磁盘上的物理数据和日志文件被破坏,这是最严重的一种故障,恢复方法是重装数据库,然后重做已完成的事务

介质故障的恢复需要数据库管理员介入,但数据库管理员只需要重装最近转储的数据库副本和有关的各日志文件副本,然后执行系统提供的恢复命令即可,具体的恢复操作仍由数据库管理系统完成

系统的恢复步骤
  1. 装入最新的数据库后备副本(离故障发生时刻最近的转储副本),使数据库恢复到最近一次转储时的一致性状态
  2. 装入相应的日志文件副本(转储结束时刻的日志文件副本),重做已完成的事务

具有检查点的恢复技术

检查点记录的内容

  • 建立检查点时刻所有正在执行的事务清单
  • 这些事务最近一个日志记录的地址

动态维护日志文件

动态维护日志文件的方法是,周期性地执行建立检查点、保存数据库状态的操作

具体步骤
  1. 将当前日志缓冲区中的所有日志记录写入磁盘的日志文件上
  2. 在日志文件中写入一个检查点记录
  3. 将当前数据缓冲区的所有数据记录写入磁盘的数据库中
  4. 把检查点记录在日志文件中的地址写入一个重新开始文件

恢复子系统可以定期或不定期地建立检查点,保存数据库状态。检查点可以按照预定的一个时间间隔建立,也可以按照某种规则建立检查点

使用检查点方法可以改善恢复效率

系统使用检查点方法进行恢复

具体步骤
  1. 从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录
  2. 由该检查点记录得到检查点建立时刻所有正在执行的事务清单 active-list

这里建立两个事务队列:

    1. undo-list:需要执行 undo 操作的事务集合
    2. redo-list:需要执行 redo 操作的事务集合

把 active-list 暂时放入 undo-list 队列,redo 队列暂为空

  1. 从检查点开始正向扫描日志文件
    1. 如有新开始的事务 Ti ,把 Ti 暂时放入 undo-list 队列
    2. 如有提交的事务 Tj,把 Tj 从 undo-list 队列移到 redo-list 队列,直到日志文件结束
  1. 对 undo-list 中的每个事务执行 undo 操作,对 redo-list 中的每个事务执行 redo 操作

数据库镜像

许多数据库管理系统提供数据库镜像功能用于数据库恢复

数据库镜像通过复制数据实现,频繁地复制数据会降低系统运行效率

在实际应用中用户只选择对关键数据和日志文件进行镜像,而不是对整个数据库进行镜像

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

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

相关文章

景联文科技加入中国人工智能产业发展联盟(AIIA),与行业各方共促AI产业发展

近日,景联文科技加入中国人工智能产业发展联盟(AIIA),与行业各方共同挖掘人工智能数据的更多价值,破解中国人工智能AI数据短缺难题。 中国人工智能产业发展联盟(简称AIIA)是在国家发改委、科技部…

PostgreSQL 机器学习插件 MADlib 安装与使用

MADlib 一个可以在数据库上运行的开源机器学习库,支持 PostgreSQL 和 Greenplum 等数据库;并提供了丰富的分析模型,包括回归分析,决策树,随机森林,贝叶斯分类,向量机,风险模型&#…

逐帧动画demo

用这一张图实现一个在跑的猎豹的动画 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X…

RabbitMq防止消息丢失

RabbitMq防止消息丢失 消息的传递路径出现消息丢失的位置解决 消息的传递路径 消息发送方 --> MQ --> 消息消费方 出现消息丢失的位置 消息发送方: 消息传输过程中丢失MQ: MQ收到消息后,存在内存中,还未被消费就宕机了,导致数据丢失消息消费方: 消息到达消费方后, 服务…

创建maven的 java web项目

创建maven的 java web项目 创建出来的项目样子 再添加java和resources文件夹 一定要如图有文件夹下有图标才代表被IDEA识别&#xff0c;不让是不行的 没有的话在File——ProjectStructure中进行设置

【KCC@南京】KCC南京数字经济-开源行

一场数字经济与开源的视听盛宴&#xff0c;即将于11月26日&#xff0c;在南京举办。本次参与活动的有&#xff1a; 庄表伟&#xff08;开源社理事执行长、天工开物开源基金会执行副秘书长&#xff09;、林旅强Richard&#xff08;开源社联合创始人、前华为开源专家&#xff09;…

Linux SSH免密登录

目录 简介 创建Linux用户和用户组 配置LINUX静态IP 编辑IP映射 SSH免密登录配置 登录测试 简介 SSH&#xff08;Secure shell&#xff09;是可以在应用程序中提供安全通信的一个协议&#xff0c;通过SSH可以安全地进行网络数据传输&#xff0c;它的主要原理是利用非对称加密…

Web后端开发_01

Web后端开发 请求响应 SpringBoot提供了一个非常核心的Servlet 》DispatcherServlet&#xff0c;DispatcherServlet实现了servlet中规范的接口 请求响应&#xff1a; 请求&#xff08;HttpServletRequest&#xff09;&#xff1a;获取请求数据响应&#xff08;HttpServletRe…

数据结构 顺序表和链表

1.线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串.. 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直线…

手机厂商参与“百模大战”,vivo发布蓝心大模型

在2023 vivo开发者大会上&#xff0c;vivo发布自研通用大模型矩阵——蓝心大模型&#xff0c;其中包含十亿、百亿、千亿三个参数量级的5款自研大模型&#xff0c;其中&#xff0c;10亿量级模型是主要面向端侧场景打造的专业文本大模型&#xff0c;具备本地化的文本总结、摘要等…

数据可视化模板案例:制造业提高生产力的关键

一、模板背景 在这个信息爆炸的时代&#xff0c;数据对于企业的成功至关重要。制造业作为全球经济的重要组成部分&#xff0c;如何有效利用数据提高生产效率、降低成本、优化决策&#xff0c;已成为行业关注的焦点。 二、方案思路 配⾊ - 科技蓝&#xff0c;贴合⼯业主题。 …

AI大模型低成本快速定制秘诀:RAG和向量数据库

文章目录 1. 前言2. RAG和向量数据库3. 论坛日程4. 购票方式 1. 前言 当今人工智能领域&#xff0c;最受关注的毋庸置疑是大模型。然而&#xff0c;高昂的训练成本、漫长的训练时间等都成为了制约大多数企业入局大模型的关键瓶颈。 这种背景下&#xff0c;向量数据库凭借其独特…

三国杀中的概率学问题3——王荣

前言 本文是三国杀中的概率学问题系列文章中的一篇&#xff0c;将详细讨论王荣吉占的期望摸牌数问题。并加上连续情形作为拓展。 值得说明的是&#xff0c;本文的思路受到了一篇文章的启发&#xff0c;在此特别鸣谢&#xff0c;这是文章的链接。 王荣吉占的期望摸牌数 王荣的…

深入了解JVM和垃圾回收算法

1.什么是JVM&#xff1f; JVM是Java虚拟机&#xff08;Java Virtual Machine&#xff09;的缩写&#xff0c;是Java程序运行的核心组件。JVM是一个虚拟的计算机&#xff0c;它提供了一个独立的运行环境&#xff0c;可以在不同的操作系统上运行Java程序。 2.如何判断可回收垃圾…

HarmonyOS开发(一):开发工具起步

1、DevEco Studio 工具下载地址&#xff1a;HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 DevEco Studio基础配置 Node.jsOhpm 这两个都可以在进入IDE时在工具上选择下载安装 2、HelloWorld工程 打开DevEco,那么会进入欢迎页&#xff0c;点击Create Project---…

数字三角形模型 笔记

方格取数 走两次的最大值 f[k][i1][i2]来表示 k i1 j1 i2 j2; 每一个状态可由四种状态转换来&#xff0c;分别为 第一条路走下&#xff0c;第二条路走下 第一条路走下&#xff0c;第二条路走右 第一条路走右&#xff0c;第二条路走下 第一条路走右&#xff0c;第二条…

ChatGPT重磅升级 奢侈品VERTU推出双模型AI手机

2023年11月7日,OpenAI举办了首届开发者大会,CEO Sam Altman(山姆奥尔特曼)展示了号称“史上最强”AI的GPT-4 Turbo。它支持长达约10万汉字的输入,具备前所未有的长文本处理能力,使更复杂的互动成为可能。此外,GPT-4 Turbo还引入了跨模态API支持,可以同时处理图片、视频和声音,从…

Layer 2 真的为以太坊扩容了吗?

构建一个安全、对用户友好的去中心化网络的愿景&#xff0c;依赖于关键基础设施的发展。这个愿景由一个共享的经济框架支持&#xff0c;得到了亿万人的拥护。Layer 2 的扩展解决方案在构建这一基础和增强以太坊的能力方面起着至关重要的作用。这些项目相互协作&#xff0c;形成…

Arduino ESP8266使用AliyunIoTSDK.h连接阿里云物联网平台

文章目录 1、AliyunIoTSDK简介2、相关库安装3、阿里云创建产品&#xff0c;订阅发布4、对开源的Arduino ESP8266源代码修改5、使用阿里云点亮一个LED灯6、设备向阿里云上传温度数据7、项目源码 1、AliyunIoTSDK简介 AliyunIoTSDK是arduino的一个库&#xff0c;可以在arduino的…

基于若依的ruoyi-nbcio流程管理系统增加流程设计器支持自定义表单的选择与处理

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 因为之前不支持在流程设计器进行自定义业务表单的关联选择&#xff0c;所以这部分实现这个。 1、前端 对…