数据库系统概论——数据库恢复技术

文章目录

  • 数据库恢复技术
    • 事务的基本概念
      • 什么是事务
      • 如何定义事务:
      • 事务的特性
    • 数据库恢复概述
    • 故障的种类
    • 恢复的实现技术
    • 恢复策略
      • 事务故障的恢复
      • 系统故障的恢复
      • 介质故障的恢复

数据库恢复技术

事务的基本概念

什么是事务

  • 事务使用户定义的一个数据库操作序列,这些操作要么全做,要么一个都不做,是一个不可分割的工作单位。
  • 事务和程序是两个概念
  1. 在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。
  2. 一个程序通常包含多个事务。
  • 事务时数据库恢复和并发控制的基本单位。

如何定义事务:

--显示定义方式begin transaction sql 语句1sql 语句2…… commit
--隐式定义begin transaction sql 语句1sql 语句2…… rollback

事务的特性

事务具有四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持续性(Durability ),我们经常称之为ACID特性。

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

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

  • 隔离性
    对并发执行而言,一个事务的执行不能被其他事务干扰。
    一个事务内部的操作及使用的数据对其他并发事务是隔离的。
    并发执行的各个事务之间不能互相干扰。

  • 持续性
    也称永久性
    一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
    接下来的其他操作或故障不应该对其执行结果有任何影响。

数据库恢复概述

故障是不可避免的:

  • 计算机硬件故障
  • 系统软件和应用软件的错误
  • 操作员的失误
  • 恶意的破坏

故障的影响:

  • 造成运行事务非正常中断,影响数据库中数据的正确性。
  • 破坏数据库,使数据库中全部或部分数据丢失。

数据库管理系统对故障的对策

  • DBMS提供恢复子系统。
  • 保证故障发生后,能把数据库中的数据从错误状态+ 恢复到某一已知的正确状态。
  • 保证事务ACID。

恢复技术是衡量系统优劣的重要指标。

故障的种类

(1) 事务内部的故障
某个事务在运行过程中由于种种原因未运行至正常终止点就夭折了。
(2) 系统故障
造成系统停止运转的任何事件,使得系统要重新启动。
(3) 介质故障
介质故障又称为硬故障,这类故障使存储在外存中的数据部分丢失或全部丢失。

各类故障,对于数据库的影响有两种可能性:

  • 一是数据库本身被破坏
  • 二是数据库没有被破坏,但是数据可能不准确。

恢复的实现技术

恢复操作的基本原理:冗余

  • 利用存储在系统其它的房的冗余数据来重建数据库中已经被破坏或不正确的那部分数据。

恢复机制涉及的关键问题

  1. 如何建立冗余数据
    (1) 数据转储
    (2) 登录日志文件
  2. 如何利用这些冗余数据实施数据库恢复。

1. 数据转储
概念:转储是指DBA通过DBMS的恢复子系统,将整个数据库复制到磁带或另一个磁盘上保存起来的过程,这些备用的数据称为后备副本或后援副本。

如何使用?

  • 数据库遭到破坏后可以将后备副本重新装入。
  • 但重装后备副本只能将数据库恢复到转储时的状态。

转储方法:
(1) 静态转储与动态转储

  • 静态转储:在系统中无运行事务时进行转储,转储开始时数据库处于一致性状态,转储期间不允许对数据库的任何存取、修改活动。
  • 动态转储:转储操作与用户事务并发进行转储期间允许对数据库进行存取或修改。

(2) 海量转储与增量转储

  • 静态转储:在系统中无运行事务时进行转储,转储开始时数据库处于一致性状态,转储期间不允许对数据库的任何存取、修改活动。
  • 动态转储:转储操作与用户事务并发进行转储期间允许对数据库进行存取或修改。

在这里插入图片描述

2. 登录日志文件

  1. 什么是日志文件

日志文件(log)是用来记录事务对数据库的更新操作的文件。

  1. 不同数据库系统采用的日志文件格式不完全一样,概括起来日志文件主要又两种格式。
  • 以记录为单位的日志文件。
  • 以数据块为单位的日志文件。
  1. 以记录为单位的日志文件,日志文件中需要登记的内容包括:
  • 各个事务的开始标记(begin transaction)
  • 各个事务的结束标记(commit或rollback)
  • 各个事务的所有更新操作

这里每个事务开始的标记、每个事务的结束标记和每个更新操作均作为日志文件中的一个日志记录 (log record)。

4. 以记录为单位的日志文件,每条日志记录的内容

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

日志文件的用途

  1. 事务故障恢复和系统故障恢复必须用日志文件。
  2. 在动态转储方式中必须建立日志文件,后援副本和日志文件综合起来才能有效地恢复数据库。
  3. 在静态转储方式中,也可以建立日志文件。

恢复策略

事务故障的恢复

  • 事务故障:事务在运行至正常终止点前被中止。
  • 恢复方法
    • 由恢复子系统应利用日志文件撤消(UNDO)此事务已对数据库进行的修改。
  • 事务故障的恢复由系统自动完成,不需要用户干预。

事务故障的回复步骤
(1) 反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。
(2)对该事务的更新操作执行逆操作。即将日志记录中“更新前的值”写入数据库。

  • 插入操作,“更新前的值”为空,则相当于做删除操作。
  • 删除操作,“更新后的值”为空,则相当于做插入操作。
  • 若是修改操作,则用修改前的值代替修改后的值。

(3) 继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。
(4) 如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了

系统故障的恢复

  • 系统故障造成数据库不一致状态的原因。

    • 一些未完成事务对数据库的更新已写入数据库。
    • 一些已提交事务对数据库的更新还留在缓冲区没来得及写入数据库
  • 恢复方法

    • Undo 故障发生时未完成的事务。
    • Redo 已完成的事务。
  • 系统故障的恢复由系统在重新启动时自动完成,不需要用户干预。

介质故障的恢复

  • 恢复步骤
    (1) 装入最新的后备数据库副本,使数据库恢复到最近一次转储时的一致性状态
    • 对于静态转储的数据库副本,装入后数据库即处于一致性状态。
    • 对于动态转储的数据库副本,还须同时装入转储时刻的日志文件副本,利用与恢复系统故障相同的方法(即redo+undo),才能将数据库恢复到一致性状态。

(2) 装入有关的日志文件副本(转储结束时刻的日志文件副本),重做已完成的事务。
+ 首先扫描日志文件,找出故障发生时已提交的事务的标识,将其记入重做队列。
+ 然后正向扫描日志文件,对重做队列中的所有事务进行重做处理。即将日志记录中“更新后的值”写入数据库。

介质故障的恢复需要DBA介入

  • DBA的工作

    • 重装最近转储的数据库副本和有关的各日志文件副本。
    • 执行系统提供的恢复命令。
  • 具体的恢复操作仍由DBMS完成。

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

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

相关文章

kotlin类

一、定义 1、kotlin中使用关键字class 声明类,如果一个类没有类体,也可以省略花括号, 默认为public 类型的: // 这段代码定义了一个公开的、不可被继承的Test类 class Test{} // 没有类体,可以省略花括号 class Test 底层代码&…

2024最新IDEA插件开发+发布全流程 SelectCamelWords[选中驼峰单词](idea源代码)

2024最新IDEA插件开发(发布)-SelectCamelWords[选中驼峰单词](idea源代码) 参考文档 Jetbrains Idea插件开发文档: https://plugins.jetbrains.com/docs/intellij/welcome.html代码地址:https://github.com/yangfeng…

Mybatis框架的缓存

Mybatis框架的缓存 一.为什么使用缓存 缓存(cache)的作用是为了减去数据库的压力,提高查询性能。缓存实现的 原理是从数据库中查询出来的对象在使用完后不要销毁,而是存储在内存(缓存) 中,当再次需要获取…

windows-docker-本地部署-前端

前置条件 docker已有需要打包的文件也已经写好了 打包镜像 ip地址修改 需要根据自身修改的文件 .env.local文件存放你前端访问的端口 172.24.240.1:这部分是自己电脑的ip 如何查看本机ip,使用IPV4的地址。 #本地 #API_HOST_URLhttp://172.24.240.1:8091打包文…

Excel导出实例

在上一节的基础上&#xff0c;本文演示下如何导出excel数据。 Excel导出操作演示 继承ocean-easyexcel SDK <dependency><groupId>com.angel.ocean</groupId><artifactId>ocean-easyexcel</artifactId><version>1.0.0</version> …

架构设计 - 网站性能优化之静态资源CDN配置

摘要: web 应用业务缓存通常3级: 一级缓存:JVM 本地缓存 二级缓存:Redis集中式缓存 三级缓存:Nginx Proxy Cache 缓存 或 Nginx Lua 缓存 四级缓存:静态资源CDN缓存 页面静态化 本文主要分享 怎样通过CDN缓存静态资源的方式 提高系统性能和响应速度。 WEB应用通过CD…

【机器学习】正则卷积群理论及Python代码实现

1. 引言 1.1.卷积神经网络CNN 卷积神经网络&#xff08;CNN&#xff09;的数学模型是深度学习中用于处理图像和其他高维数据的关键组成部分。那么&#xff0c;CNN究竟是什么呢&#xff1f; 总结起来&#xff0c;CNN网络主要完成以下操作&#xff1a; 卷积操作&#xff08;Co…

无线麦克风一拖二哪个牌子好,揭秘目前音质最好的麦克风

在自媒体的世界里&#xff0c;无线领夹麦克风已经成了一种标准配置&#xff0c;它受到广大视频创作者的青睐。无论是刚刚踏入短视频领域的新手&#xff0c;还是已经拥有丰富经验的资深博主&#xff0c;都深知一款好的领夹麦克风对于提升视频音频质量的重要性。它不仅能帮助创作…

SQLCMD完全指南:掌控 SQL Server

SQL Server 拥有被广泛认可的一流管理工具——SQL Server Management Studio&#xff08;简称 SSMS&#xff09;。它提供了丰富的功能&#xff0c;极大地简化了开发人员和数据库管理员&#xff08;DBA&#xff09;的工作。 目录 SQLCMD 入门使用 SQLCMD 连接 SQL ServerSQLCMD …

Java和C语言中基础概念中的区别有哪些?

Java和C语言中基础概念中的区别有哪些&#xff1f; 标识符数据类型运算符加号%号& 和 | 关系表达式函数声明代码规范数组 以下是Java和C语言在一些基础概念中的区别&#xff08;不包含面向对象等的高级知识&#xff09; 标识符 在Java中&#xff0c;标识符可以由数字、字母…

【Java】字节数组 pcm 与 wav 格式互转(附原理概述)

前言 最近实现了一个文字转语音的功能&#xff0c;语音引擎返回的是pcm格式的数据。需要转化成wav格式前端才能播放。本文首先会给出解决方案&#xff0c;后续会讲背后的原理。 场景 1. pcm wav 转化工具类 入参和出参都为byte[]&#xff0c;理论上有了 byte[] 就可以输出…

基于单片机的智能窗户控制系统的设计

摘 要&#xff1a; 根据单片机技术和现代传感器技术 &#xff0c; 本文主要针对基于单片机的智能窗户控制系统的设计进行探讨 &#xff0c; 仅供参考 。 关键词&#xff1a; 单片机 &#xff1b; 智能窗户 &#xff1b; 控制系统 &#xff1b; 设计 在现代科学技术持续发展的带…

Python爬虫基础以及示例讲解

爬虫简介 网络爬虫 爬虫指在使用程序模拟浏览器向服务端发出网络请求&#xff0c;以便获取服务端返回的内容。 但这些内容可能涉及到一些机密信息&#xff0c;所以爬虫领域目前来讲是属于灰色领域&#xff0c;切勿违法犯罪。 爬虫本身作为一门技术没有任何问题&#xff0c;关…

Docker之overlay2的迁移

原因 docker默认将文件及其容器放置在了系统盘的挂载区内&#xff0c;如果长期使用会发现系统挂载区被overlay2挤爆了,因此在一开始我们将其迁移在大容量外挂磁盘上,就可以避免系统盘被挤爆,放心使用. 具体操作 # 停止容器 systemctl stop docker# 修改容器配置&#xff0c…

等差数列和等比数列的介绍及在Java编程中的实现

等差数列 (Arithmetic Sequence) 定义&#xff1a;等差数列是指相邻两项的差相等的数列&#xff0c;这个差值叫做“公差”&#xff08;d&#xff09;。 公式&#xff1a; 第 ( n ) 项的公式&#xff1a; 前 ( n ) 项和的公式&#xff1a; 示例&#xff1a; 假设第一项 (…

AI+前端技术的结合(实现图片识别功能)

随着人工智能技术的不断发展&#xff0c;AI在前端设计页面中的应用变得越来越普遍。比如&#xff1a;在电商平台上&#xff0c;可以利用对象检测技术实现商品的自动识别和分类&#xff1b;人脸识别&#xff1b;车辆检测&#xff1b;图片识别等等......其中一个显著的应用是在图…

数据结构_优先级队列(堆)

目录 一、优先级队列 1.1 堆 1.2 PriorityQueue接口 二、模拟实现优先级队列 2.1 初始化 2.2 创建大根堆 (向下调整) 2.3 堆的插入 2.4 堆的删除 2.5 堆排序 总结 一、优先级队列 优先级队列是一种特殊的队列&#xff0c;其出队顺序与入队顺序无关&#xff0c;而与优…

易支付宝塔一键部署项目 懒人专用包 制作

宝塔一键部署说明 https://www.bt.cn/bbs/thread-33063-1-1.html 1. auto_install.json {"php_ext":"fileinfo","chmod":[],"success_url":"install/?step3&jump1","php_versions":"80","db…

架构师指南:现代 Datalake 参考架构

这篇文章的缩写版本于 2024 年 3 月 26 日出现在 The New Stack 上。 旨在最大化其数据资产的企业正在采用可扩展、灵活和统一的数据存储和分析方法。这一趋势是由企业架构师推动的&#xff0c;他们的任务是制定符合不断变化的业务需求的基础设施。现代数据湖体系结构通过将数…

逻辑地址 线性地址 物理地址 Linux kernel 内存管理设计

linux kernel 2.6以后的MM&#xff0c;受到了兼容 risc arch cpu 的 MM 的启发&#xff0c;新的 MM 架构对 x86 上任务切换的效率上也有明显提高。 新的MM架构&#xff0c;GDT 不再随着进程的创建与结束而创建和删除 新的表项。 TSS段 也只有一个&#xff0c;进程切换时&…