数据库恢复

文章目录

  • 前言
  • 一、事务
    • 1.概念
    • 2.定义语句
    • 3.ACID特性
  • 二、数据库恢复的必要性
    • 1.为什么要进行数据库恢复
    • 2.数据库恢复机制的作用
  • 三、数据恢复使用的技术
    • 1.数据转储
    • 2.登记日志文件
  • 四 、不同故障的数据恢复策略
    • 1.事务内部的故障
    • 2.系统故障
    • 3.介质故障
  • 五、具有检查点的恢复技术
    • 1.检查点的意义
    • 2.通过检查点确定的不同的恢复策略


前言

试图用最通俗易懂的语言整理数据库恢复这一章节的笔记,麻烦看官老爷点赞关注支持一下动力猿吧!


一、事务

1.概念

事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。例如,在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序。

事务和程序是两个概念。一般地讲,一个程序中包含多个事务。

2.定义语句

在SQL 中,定义事务的语句一般有三条:
BEGIN TRANSACTION;
COMMIT;
ROLLBACK;

事务通常是以 BEGIN TRANSACTION 开始,以COMR
MIT或ROLLBACK结束。

COMMIT 表示提交事务的所有操作,意味着事务正常结束,将事务中所有对数据库的更新写回到磁盘上的物理数据库中去。

ROLLBACK表示回滚事务的所有操作,意味着事务运行的过程中发生了某种故障不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤销回滚到事务开始时的状态。

上面所说的操作指对数据库的更新操作。

3.ACID特性

事务具有4个特性:原子性(Atomicity)、 一致性(Consisteney)、 隔离性(Isolation)和持续性(Durability)。 这4个特性简称为ACID特性。

(1)原子性:事务是数据库逻辑工作的最小单位,事务中的操作要么都做,要么都不做。

(2)一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统运行中发生故障有事务被迫中断,这些事务虽然未成功完成,但是它们对数据库的修改有一部分也已经写入物理数据库,这时数据库就处于一种不一致的状态。

(3)隔离性:一个事务的内部操作及使用的数据对其他并发事务是隔离的,也就是说并发执行的各个事务之间不能相互干扰。

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

二、数据库恢复的必要性

1.为什么要进行数据库恢复

在这里插入图片描述因此数据库管理系统必须具有把数据库从错误状态恢复到某一已知的正确状态(也称一致状态)的功能,这就是数据库的恢复。

2.数据库恢复机制的作用

(1)将数据库系统恢复到故障发生前数据库的某个一致的状态。
(2)保证事务的原子性、持久性。
(3)提供高可用性(将崩溃后的数据库的不可用时间减少到最低)。

三、数据恢复使用的技术

1.数据转储

(1)定义
数据库管理员定期将整个数据库复制到磁带磁盘等存储介质上保存起来,作为后备副本,当数据库被破坏时重装后备副本。

但重装后备副本只能使数据库恢复到转储时的状态,要想恢复到故障发生时的状态,必须重新运行自转储以后的所有更新事务。
在这里插入图片描述
(2)分类
按转储时能否继续操作数据库,可以将数据转储分为动态转储和静态转储。
按每次转储整个数据库还是仅转储上次转储后更新的数据,可以将数据转储分为海量转储和增量转储。
在这里插入图片描述

2.登记日志文件

(1)定义
日志文件是用来记录事务对数据库的更新操作的文件,有两种格式:以记录为单位、以数据块为单位。

我们主要了解以记录为单位的日志文件:
其中每个事务的开始 (BEGIN TRANSACTION)标记 / 结束(COMMIT 或 ROLLBACK)标记 / 更新操作都认为是一个日志记录。
每个日志记录的主要内容包括:事务标识、操作类型、操作对象、旧值、新值。

(2)作用
事务故障恢复和系统故障恢复必须用日志文件。

在动态转储方式中必须建立日志文件,后备副本和日志文件结合起来才能有效地恢复数据库。

在静态转储方式中也可以建立日志文件,当数据库毁坏后可重新装入后援副本把数据库恢复到转储结束时刻的正确状态,然后利用日志文件把已完成的事务进行重做处理,对故障发生时尚未完成的事务进行撤销处理。

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

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

四 、不同故障的数据恢复策略

1.事务内部的故障

事务故障指事务在运行至正常终止点前被终止。
这种情况下恢复子系统应利用日志文件撤销此事务已对数据库进行的修改。
事务故障的恢复是由系统自动完成的。

恢复策略:
反向扫描(从后往前)日志文件,查找到该事务的更新操作即执行逆操作,如此直至读到此事务的开始标记。

2.系统故障

系统故障指造成系统停止运转的任何事件,使得系统要重新启动。
系统故障造成数据库不一致的原因有两个:未完成事务的更新可能已被写入数据库;已提交事务的更新可能还停留在缓冲区没来得及写入数据库。
系统故障的恢复是在系统重启时自动完成的。

恢复策略:正向扫描(从前往后)日志文件,找出在故障发生前已经提交的事务记入重做队列,同时找出故障发生时尚未完成的事务计入撤销队列。然后对撤销队列的各个事务进行撤销处理,对重做队列的各个事务进行重做处理。

3.介质故障

介质故障是最严重的一种故障,也就是外存故障(磁盘损坏、磁头碰撞等),磁盘上的物理数据和日志文件被破坏。
恢复方法是重装数据库,然后重做已完成的事务。

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

五、具有检查点的恢复技术

1.检查点的意义

检查点是对于登记日志文件的恢复技术来说的,我们知道日志文件中日志记录是按照时间先后顺序排列的,检查点就是在日志文件中某些地方插入的新记录,专门用来标记时间点的。

使用检查点方法可以改善恢复效率。比如当事务T在一个检查点之前提交,T对数据库所有的修改一定都已写入数据库,写入时间是在这个检查点建立之前或在这个检查点建立之时。这样在进行恢复处理时,没有必要对事务T执行重做操作。

2.通过检查点确定的不同的恢复策略

在这里插入图片描述T1:事务在检查点之前提交,不要重做。

T2、T4:事务在检查点之后才提交,所以不能确定事务对数据库所做的修改在故障发生时是否已写入数据库,有可能还在缓冲区中,所以需要重做。

T3、T5:事务在故障发生时还未完成,所以予以撤销。

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

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

相关文章

接口测试--apipost接口断言详解

在做接口测试的时候,会对接口进行断言,一个完整的接口测试,包括:请求->获取响应正文->断言。 一、apipost如何进行断言 apipost的断言设置实在后执行脚本中进行编写的。apipost本身提供了11中断言: apt.asser…

利用Python和pandas库进行股票技术分析:移动平均线和MACD指标

利用Python和pandas库进行股票技术分析:移动平均线和MACD指标 介绍准备工作数据准备计算移动平均线计算MACD指标结果展示完整代码演示 介绍 在股票市场中,技术分析是一种常用的方法,它通过对股票价格和交易量等历史数据的分析,来…

单片机学习笔记---蜂鸣器播放提示音音乐(天空之城)

目录 蜂鸣器播放提示音 蜂鸣器播放音乐(天空之城) 准备工作 主程序 中断函数 上一节讲了蜂鸣器驱动原理和乐理基础知识,这一节开始代码演示! 蜂鸣器播放提示音 先创建工程:蜂鸣器播放提示音 把我们之前模块化的…

【机器学习】数据清洗之识别异常点

🎈个人主页:甜美的江 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步…

Modern C++ 内存篇2 - 关于relocation的思考

在上一节《Modern C 内存篇1 - std::allocator VS pmr-CSDN博客》我们详细讨论了关于如何判断用不用memmove优化的代码,结论可以总结为: 只有_Tp是trivial 且 用std::allocator 才会调用memmove。 所有case如下表格所示: No_Tpallocator typ…

渗透专用虚拟机(公开版)

0x01 工具介绍 okfafu渗透虚拟机公开版。解压密码:Mrl64Miku,压缩包大小:15.5G,解压后大小:16.5G。安装的软件已分类并在桌面中体现,也可以使用everything进行查找。包含一些常用的渗透工具以及一些基本工…

C语言rand随机数知识解析和猜数字小游戏

rand随机数 rand C语言中提供了一个可以随机生成一个随机数的函数&#xff1a;rand&#xff08;&#xff09; 函数原型&#xff1a; int rand(void);rand函数返回的值的区间是&#xff1a;0~RAND_MAX(32767)之间。大部分编译器都是32767。 #include<stdlib.h> int ma…

VTK 三维场景的基本要素(相机) vtkCamera

观众的眼睛好比三维渲染场景中的相机&#xff0c;在VTK中用vtkCamera类来表示。vtkCamera负责把三维场景投影到二维平面&#xff0c;如屏幕&#xff0c;相机投影示意图如下图所示。 1.与相机投影相关的要素主要有如下几个&#xff1a; 1&#xff09;相机位置: 相机所处的位置…

EMC学习笔记(二十四)降低EMI的PCB设计指南(四)

降低EMI的PCB设计指南&#xff08;四&#xff09; 1.电路板分区2.信号走线2.1 电容和电感串扰2.2 天线2.3 端接和传输线2.4输入端的阻抗匹配 tips&#xff1a;资料主要来自网络&#xff0c;仅供学习使用。 1.电路板分区 电路板分区与电路板平面规划具有相同的基本含义&#x…

Java常用类与基础API--String的实例化与连接操作

文章目录 一、String实例化的两种方式&#xff08;1&#xff09;两种方式&#xff08;2&#xff09;举例1、案例12、案例2 &#xff08;3&#xff09;内存分配&#xff08;4&#xff09;面试题1、题12、题2 二、String的连接操作&#xff08;1&#xff09;案例1、案例剖析2、in…

Linux--目录结构

目录 一、Linux的目录结构二、常用的目录介绍 一、Linux的目录结构 Linux的目录结构是一个树型结构。 Windos 系统可以拥有多个盘符&#xff0c;如C盘&#xff0c;D盘,E盘。 Linux 木有盘符这个概念&#xff0c;只有一个根目录 /&#xff08;相当于文件夹&#xff09;&#xf…

苍穹外卖实操笔记六---缓存商品,购物车功能

苍穹外卖实操笔记六—缓存商品&#xff0c;购物车功能 一.缓存菜品 可以使用redis进行缓存&#xff1b;另外&#xff0c;在实现缓存套餐时可以使用spring cache提高开发效率&#xff1b;   通过缓存数据&#xff0c;降低访问数据库的次数&#xff1b; 使用的缓存逻辑&#…

【开源】基于JAVA+Vue+SpringBoot的公司货物订单管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 客户管理模块2.2 商品维护模块2.3 供应商管理模块2.4 订单管理模块 三、系统展示四、核心代码4.1 查询供应商信息4.2 新增商品信息4.3 查询客户信息4.4 新增订单信息4.5 添加跟进子订单 五、免责说明 一、摘要 1.1 项目…

Stable Diffusion 模型下载:DreamShaper(梦想塑造者)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 DreamShaper 是一个分格多样的大模型&#xff0c;可以生成写实、原画、2.5D 等多种图片&#xff0c;能生成很棒的人像和风景图。 条目内容类型大模型基础模型SD 1…

Elasticsearch:使用查询规则(query rules)进行搜索

在之前的文章 “Elasticsearch 8.10 中引入查询规则 - query rules”&#xff0c;我们详述了如何使用 query rules 来进行搜索。这个交互式笔记本将向你介绍如何使用官方 Elasticsearch Python 客户端来使用查询规则。 你将使用 query rules API 将查询规则存储在 Elasticsearc…

HTTP网络通信协议基础

目录 前言&#xff1a; 1.HTTP协议理论 1.1协议概念 1.2工作原理 2.HTTP抓包工具 2.1Fiddler工具 2.2抓包原理 3.HTTP协议格式 3.1HTTP请求 3.2HTTP响应 3.3格式总结 前言&#xff1a; 在了解完网络编程的传输层UDP和TCP通信协议后&#xff0c;就需要开始对数据进行…

mac卸载被锁定的app

sudo chflags -hv noschg /Applications/YunShu.app 参考&#xff1a;卸载云枢&#xff08;MacOS 版&#xff09;

13. 串口接收模块的项目应用案例

1. 使用串口来控制LED灯工作状态 使用串口发送指令到FPGA开发板&#xff0c;来控制第7课中第4个实验的开发板上的LED灯的工作状态。 LED灯的工作状态&#xff1a;让LED灯按指定的亮灭模式亮灭&#xff0c;亮灭模式未知&#xff0c;由用户指定&#xff0c;8个变化状态为一个循…

【漏洞复现】狮子鱼CMS文件上传漏洞(image_upload.php)

Nx01 产品简介 狮子鱼CMS&#xff08;Content Management System&#xff09;是一种网站管理系统&#xff0c;它旨在帮助用户更轻松地创建和管理网站。该系统拥有用户友好的界面和丰富的功能&#xff0c;包括页面管理、博客、新闻、产品展示等。通过简单直观的管理界面&#xf…

骑砍战团MOD开发(44)-可编程渲染管线shader编程

一.可编程渲染管线 在GPU进行3D模型投射到2D平面过程中,渲染管线算法对开发者开放,目前支持的编程语言有OpenGL的ARB语言(pp文件),Direct3D的HLSL高级shader编程语言(fx文件). Direct3D提供一下API实现程序加载shader着色器文件: D3DXCreateEffectFromFile(gDevice,"fxfn…