当前位置: 首页 > news >正文

【数据库原理】(27)数据库恢复

在数据库系统中,恢复是指在发生某种故障导致数据库数据不再正确时,将数据库恢复到已知正确的某一状态的过程。数据库故障可能由多种原因引起,包括硬件故障、软件错误、操作员失误以及恶意破坏。为了确保数据库的安全性和完整性,数据库管理系统(DBMS)必须具有有效的恢复机制。

一.故障的种类

在数据库系统中,可能发生的故障主要包括事务故障、系统故障、介质故障和计算机病毒。每种故障类型都可能对数据库的正常运行产生影响,因此需要相应的恢复机制来应对这些故障。

1. 事务故障

事务故障指事务未达到预期终点,使得数据库可能处于不正确状态。这包括事务内部的非预期故障,如运算溢出、并发事务死锁等。恢复程序通过事务撤销,即回滚事务已做出的对数据库的修改,将事务恢复到未启动的状态,以保证数据一致性。

2. 系统故障

系统故障是指导致系统停止运转的各种事故,例如硬件错误、操作系统故障、DBMS代码错误、突然停电等。这类故障影响正在运行的所有事务,可能导致数据库非正常终止。在系统重新启动时,恢复子系统需要回滚未完成的事务,并重做已提交的事务,以将数据库恢复到一致状态。

3. 介质故障

介质故障,也称为硬故障,指外存故障,如磁盘损坏、磁头碰撞等。这类故障可能破坏整个数据库或部分数据库,影响存取这部分数据库的所有事务。在发生介质故障后,需要将后援副本装入数据库,并重新执行已成功完成的事务,将已提交的结果重新写入数据库。

4. 计算机病毒

计算机病毒是一种人为的故障或破坏,它可以繁殖和传播,对计算机系统,包括数据库,造成破坏。计算机病毒可能导致数据的损坏和系统的不稳定,需要采取相应的安全防护措施来避免病毒的侵害。

二.故障恢复

数据库系统的恢复机制涉及建立备份数据和如何利用备份数据来修复数据库。备份数据的建立通常采用数据转储和日志文件技术。

1. 数据转储

数据转储是将数据库定期复制到转储设备(如磁带或磁盘)的过程。转储设备中的备用数据库文件称为后备副本。静态转储和动态转储是两种常见的方式。

  • 静态转储和动态转储:

    • 静态转储: 在系统中无运行事务时进行的转储操作,转储时数据库处于一致性状态。静态转储简单但会降低数据库的可用性。
    • 动态转储: 允许在转储期间对数据库进行访问或修改,可以并发执行。需要记录转储期间各事务对数据库的修改活动,建立日志文件。动态转储克服了静态转储的缺点。
  • 海量转储和增量转储:

    • 海量转储: 每次转储全部数据库,便于恢复。
    • 增量转储: 每次只转储上一次转储后更新过的数据,适用于大型且频繁更新的数据库。
      在这里插入图片描述

2. 日志文件

日志文件用于记录每一次对数据库的更新活动,分为数据块为单位和记录为单位的两种格式。登记日志文件的目的是为了数据库的恢复,包括事务故障恢复、系统故障恢复和介质故障恢复。

  • 作用:
    • 用于事务故障和系统故障恢复,协助后备副本进行介质故障恢复。
    • 在动态转储方式中,必须与后备副本一起使用。
    • 在静态转储方式中,可用于重新装入后备副本和对已完成事务的重做处理。

3. 恢复事务

发生故障时,首先根据前次转储的后备副本恢复数据库,然后利用日志文件进行事务的恢复。

  • 恢复步骤:

    1. 从头扫描日志文件,找出已经结束和尚未结束的事务。
    2. 对尚未结束的事务进行撤销(UNDO)处理和已经结束的事务进行重做(REDO)处理。
  • 撤销和重做处理:

    • 撤销处理: 反向扫描日志文件,对每个事务的更新操作执行反操作,恢复修改过的数据。
    • 重做处理: 正向扫描日志文件,重新执行登记的事务的操作,确保数据库恢复到正确状态。

三.恢复策略

恢复策略针对事务故障、系统故障和介质故障分别制定,以确保数据库的一致性和可靠性。

1. 事务故障恢复

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

  • 步骤:
    1. 反向扫描日志文件,查找该事务的更新操作。
    2. 对该事务的更新操作执行逆操作,包括插入、删除和修改。
    3. 继续反向扫描日志文件,直到读到该事务的开始标记。

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

2. 系统故障恢复

系统故障分为两种情况:未完成事务对数据库的更新可能已写入数据库,已提交事务对数据库的更新可能还留在缓冲区没有写入数据库。因此,系统故障的恢复操作包括撤销故障发生时未完成的事务和重做已完成的事务。

  • 步骤:
    1. 正向扫描日志文件,找出已提交和尚未完成的事务,将其分别记录在重做队列和撤销队列中。
    2. 对撤销队列中的事务进行撤销操作,即反向扫描日志文件执行逆操作。
    3. 对重做队列中的事务进行重做操作,即正向扫描日志文件重新执行事务的操作。

系统故障的恢复由系统自动完成,无需用户干预。

3. 介质故障恢复

介质故障包括磁盘上的物理数据和日志文件的破坏,恢复操作涉及重装数据库并重做已完成的事务。

  • 步骤:
    1. 装入最新的数据库副本,将数据恢复到最近一次转储时的一致性状态。
    2. 若为动态转储,同时装入转储开始时刻的日志文件副本,利用系统故障恢复方法(REDO+UNDO)将数据库恢复到一致性状态。
    3. 若为静态转储,数据库即处于一致性状态。
    4. 装入相应的日志文件副本,重做已完成的事务。

介质故障的恢复需要DBA介入,但只需重装最近转储的数据库副本和相关的日志文件副本,然后执行系统提供的恢复命令。

综合这些恢复策略,数据库系统能够有效地处理各类故障,确保数据的完整性和系统的可靠性。

相关文章:

【数据库原理】(27)数据库恢复

在数据库系统中,恢复是指在发生某种故障导致数据库数据不再正确时,将数据库恢复到已知正确的某一状态的过程。数据库故障可能由多种原因引起,包括硬件故障、软件错误、操作员失误以及恶意破坏。为了确保数据库的安全性和完整性,数…...

施工企业工程管理信息化、智能化需求分析

一、引言 随着科技的飞速发展,信息化、智能化技术正在逐步改变各行各业的工作方式。对于施工企业而言,传统的工程管理方式已难以满足现代工程项目的复杂需求。为了提高效率、降低成本并确保工程的安全与质量,施工企业工程管理迫切需要进入信…...

Centos7 安装与卸载mysql

卸载 ps ajx | grep mysql : 查看当前服务器是否有mysql 没有的话就不需要卸载咯。 centos7 通过yum下载安装包通常是以.rpm为后缀,rpm -qa 可以查看当前服务器上所有的安装包: rpm -qa | grep mysql | xargs yum -y remove :将查询到的mysql…...

ASP.NET Core 的 Web Api 实现限流 中间件

Microsoft.AspNetCore.RateLimiting 中间件提供速率限制(限流)中间件。 它是.NET 7 以上版本才支持的中间件,刚看了一下,确实挺好用,下面给大家简单介绍一下: RateLimiterOptionsExtensions 类提供下列用…...

Mysql字段的各种时间类型

DATE: 特点:存储日期,不包含时间。示例: CREATE TABLE example_date (id INT PRIMARY KEY, event_date DATE ); INSERT INTO example_date (id, event_date) VALUES (1, 2023-01-11); TIME: 特点:存储时间,不包含日…...

Armv8-R AArch32 architecture概念学习

提示 该博客主要为个人学习,通过阅读官网手册整理而来(个人觉得阅读官网的英文文档非常有助于理解各个IP特性)。若有不对之处请参考参考文档,以官网文档为准。阅读该文章,可以先查看AArch64 Exception Model学习&…...

linux手动安装 vscode-server

适用场景 很多时候,我们需要在本机(比如windows)通过remote ssh访问远程服务器(一般是ubuntu),但经常出现 vscode 一直连不上远程服务器的情况,看一下 log: 这个log表示远程服务器…...

【Maven】009-Maven 简单父子工程搭建

【Maven】009-Maven 简单父子工程搭建 文章目录 【Maven】009-Maven 简单父子工程搭建一、需求说明1、结构2、第三方库 二、工程搭建1、父工程第一步:创建父工程第二步:引入公共依赖 lombok 和管理 hutool 依赖版本 2、公共子模块第一步:创建…...

verilog编程题

verilog编程题 文章目录 verilog编程题序列检测电路(状态机实现)分频电路计数器译码器选择器加减器触发器寄存器 序列检测电路(状态机实现) module Detect_101(input clk,input rst_n,input data,o…...

What is `addArgumentResolvers` does in `WebMvcConfigurer` ?

addArgumentResolvers 在SpringMVC框架中,主要用于向Spring容器注册自定义的参数解析器。在处理HTTP请求时,SpringMVC会使用这些参数解析器将请求中的数据(如查询参数、路径变量、表单数据等)转换并注入到控制器方法的参数中。 使…...

[NSSCTF Round#16 Basic]RCE但是没有完全RCE

RCE但是没有完全RCE wp 题目代码&#xff1a; 第一关 <?php error_reporting(0); highlight_file(__file__); include(level2.php); if (isset($_GET[md5_1]) && isset($_GET[md5_2])) {if ((string)$_GET[md5_1] ! (string)$_GET[md5_2] && md5($_GET[m…...

LTD营销枢纽(乐通达)成为杭州市中小企业数字化转型遴选服务商

为推进国家中小企业数字化转型城市试点建设&#xff0c;赋能中小企业信息化、智能化、新型工业化能力水平提升&#xff0c;杭州市经信局公开招募了具备高质量服务能力的中小企业数字化转型服务商。经过公开征集、专家评审等多个环节&#xff0c;LTD营销枢纽凭借其在数字化转型领…...

详细分析Mybatis中的<foreach>标签

目录 前言1. 基本语法2. Demo3. 实际例子 前言 对于Java专栏&#xff1a;Java专栏 对于Mybatis的相关知识可看我之前的文章&#xff1a;Mybatis从入门到精通&#xff08;全&#xff09; 对于其余Java框架可看我之前的文章&#xff1a;java框架 零基础从入门到精通的学习路线 附…...

linux-挂载Samba共享

linux-挂载Samba共享 1、linux服务器启动Samba共享服务 2、客户端电脑安装cifs-utils dnf install cifs-utils # 或 yum install cifs-utils3、挂载共享目录 # 创建挂目录 mkdir /share # 使用mount命令挂在共享目录&#xff0c;-t协议类型 -o用户名密码 共享目录访问地址 挂…...

Java入门IDEA基础语法

1&#xff1a;Java入门 1.1 Java简介 Java是什么&#xff1a; Java是一门非常优秀的计算机语言 语言&#xff1a;人与人交流沟通的表达方式 计算机语言&#xff1a;人与计算机之间进行信息交流沟通的一种特殊语言 Java之父&#xff1a;詹姆斯高斯林&#xff08;James Gosli…...

【小白专用】C# 连接 MySQL 数据库

C# – Mysql 数据库连接 1. 配置环境 #前提&#xff1a;电脑已安装Mysql服务&#xff1b; Visual Studio 安装Mysql依赖库&#xff1a; 工具 -> NuGet 包管理器 -> 管理解决方案的 NuGet程序包 —> 搜索&#xff0c; 安装Mysql.Data (Oracle); (安装成功后&…...

Django登录注销视图

Django在身份验证框架中包含了一些你可以直接使用的表单和视图。在大多数情况下&#xff0c;可以使用默认的Django认证视图。 Django在django.contrib.auth.views提供了以下基于类的视图来处理身份验证&#xff1a; LoginView&#xff1a;处理登录表单并登录用户 LogoutView&a…...

云原生到底是什么意思

云原生到底是什么意思&#xff1f; 引言 随着云计算技术的迅速发展&#xff0c;云原生成为了一个备受关注的话题。云原生不仅仅是一种新的软件架构&#xff0c;更是一种变革性的开发方法论。本文将深入解析云原生的意义、特点以及为什么它在现代软件开发中变得如此重要。 云…...

【银行测试】银行项目,信用卡业务测试+常问面试(三)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 银行测试-信用卡业…...

AI大模型学习笔记之二:什么是 AI 大模型的训练和推理?

在人工智能&#xff08;AI&#xff09;的领域中&#xff0c;我们经常听到训练&#xff08;Training) 和 推理&#xff08;Inference) 这两个词汇&#xff0c;它们是构建强大 AI 模型的关键步骤。我们通过类比人类的学习过程来理解这两个概念&#xff0c;可以更加自然而生动地理…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...

JDK 17 序列化是怎么回事

如何序列化&#xff1f;其实很简单&#xff0c;就是根据每个类型&#xff0c;用工厂类调用。逐个完成。 没什么漂亮的代码&#xff0c;只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...

基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究

摘要&#xff1a;在消费市场竞争日益激烈的当下&#xff0c;传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序&#xff0c;探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式&#xff0c;分析沉浸式体验的优势与价值…...