恢复的实现技术-日志和数据转储

一、引言

在系统正常运行的情况下,事务处理的恢复机制采取某些技术措施为恢复做好相应的准备,保证在系统发生故障后,能将数据库从一个不一致的错误状态恢复到一个一致性状态

恢复技术主要包括

  • 生成一个数据库日志,来记录系统中事务的运行情况及事务对数据库的更新
  • 还有就是对磁盘上的数据进行转储 

二、日志

1、DBMS为系统创建的每一个数据库维护着一个日志,来记录事务对数据库的所有更新操作,可反映每一个时刻数据库的状态变化

2、日志数据库上所有运行事务按时间顺序产生的日志记录序列,日志内容不能由用户进行修改和删除

3、不同DBMS采用的日志记录格式并不完全一样,基本包含如下几种类型的日志记录

日志记录内容

  • 【start_transactionn,T】:事务T开始执行
  • 【commit,T】:事务T成功完成
  • 【abort,T】:事务T异常中止
  • 【write,T,X,旧值,新值】:事务T将数据项X的值从旧值改为新值 

每当事务执行时,事务的开始,事务的结束,以及事务对数据库的更新操作信息就被记录到日志里,对于更新操作的日志记录,记录里要包括事务的标识操作的数据对象以及更新前数据的值更新后数据的值来标明是哪个事务对哪个数据对象进行的更新,数据的值可为空值 

为保证日志可用于恢复,把日志记录登记在日志里时必须遵循两条原则

  • 一是由于DBMS可能同时处理多个事务,在日志中登记日志记录的顺序必须严格按各事务中操作执行的时间先后次序

事务T产生的日志记录,可能与其他事务的日志记录相互交错,这里给出一段6个事务中的操作交错执行的日志示意图,其中的Bi代表事务Ti的开始执行日志记录Ci代表事务Ti的成功完成提交日志记录Wi代表事务Ti写数据到缓冲区,即更新数据的日志记录Ai代表事务Ti的异常终止日志记录。每个事务的第一条日志记录都是该事务的开始记录,最后一条日志记录为commit记录或abort记录

  • 另一个登记日志记录的原则是在把数据的更新的结果写入到磁盘数据库之前,记录这个更新的对应日志记录必须先写入日志中。

数据的更新结果和新产生的日志记录首先都存储在内存的缓冲区内,把数据的更新结果写入磁盘数据库和把记录这个更新的对应日志记录写入日志中是两个输出操作,有可能在这两个操作之间发生故障。如果先进行了数据更新,假如将数据项X由3更新为5然后发生系统故障,内存缓冲区内容被刷新,则在日志中并没有登记表示这个更新的日志记录那么后面无法撤销这个更新操作,再将数据项由5改为3了 

DBMS的事务处理的恢复机制必须能实现将日志缓冲区中的日志记录先写到磁盘的日志中,并且要保证磁盘上的日志的可靠存储

三、数据转储

1、日志可以提供事务故障和系统故障后的数据恢复保障,为了在发生介质故障造成磁盘上的数据丢失时数据库也能进行恢复,通常还要采用数据转储技术

2、数据转储数据库管理员DBA定期地在某种存储介质如磁盘或光盘等创建一个与数据库分离的数据库备份并把备份存放在安全可靠的地方,这些数据库备份简称为备份,也称后备副本等

3、备份保存数据库在转储时的数据库状态。

4、转储是一个冗长的过程,十分耗费时间和资源,不能频繁进行,DBA应该根据数据库使用情况确定一个适当的转储方式和转储周期,比如根据转储时系统状态的不同,转储可分为静态转储和动态转储

如果有可能暂时关闭数据库系统,可以进行静态转储,静态转储是在在系统中无运行事务时进行的,也就是要等待正在运行的用户事务结束,新的事务必须等待转储结束才能开始执行,因此转储期间没有对数据库的存取或更新操作,也不会产生日志记录

  • 静态转储最大的优点是能够得到一个与转储时的数据库相一致的备份
  • 但会降低数据库系统的运行效率 

因有的转储可能要几个小时,而大多数数据库系统不能在转储所需要的一段时间内关闭,因此需要进行动态转储,动态转储与用户事务可以并行,转储期间允许事务对数据库进行存取或更新

  • 动态转储可以克服静态转储的缺点,它不用等待正在运行的用户事务结束,也不会影响新事务的执行
  • 但是在动态转储的过程中,系统中的运行事务可能会更新磁盘上的数据库中的数据,转储到备份上的数据库可能会包含未提交事务的中间执行结果,是数据库处于某个不一致状态时的值,得到的备份可能不是数据库某个一致性状态的备份 

5、根据转储的备份,转储可分为完全转储和增量转储

  • 完全转储在每次转储时都复制整个数据库,每次备份的数据量大,时间长
  • 增量转储只需要复制上次转储后更新过的数据,每次备份的数据量小,时间短

数据库以数据文件和日志文件的形式存储在磁盘介质上,数据转储就是要得到这些磁盘文件的备份

 

例如SQL Server支持的T-SQL语言提供可完成对数据库进行完全存储增量转储BACKUP操作语句来得到全备份或增量备份。该语句可对单个数据文件进行转储

也可对包括多个数据文件的文件组进行转储

可对事务日志进行转储得到上一次完全转储后生成的新日志备份,需指定备份所在的存储路径和物理存储文件,

可指定进行数据文件的完全转储还是增量转储,

每次增量转储得到的是上一次完全转储后的增量备份、系统生成的活动日志以及转储得到的数据库全备份,增量备份和日志备份构成的数据库备份均是为数据库产生的冗余数据,利用这些冗余数据才能在发生故障后将数据库从一个不一致的错误状态恢复到一个一致性状态

四、小结

 

 

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

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

相关文章

Unity制作一个简单抽卡系统(简单好抄)

业务流程:点击抽卡——>播放动画——>显示抽卡面板——>将随机结果添加到面板中——>关闭面板 1.准备素材并导入Unity中(包含2个抽卡动画,抽卡结果的图片,一个背景图片,一个你的展示图片) 2.给…

创建一个vue3+vite+ts项目

目录 创建项目 ​编辑 下载jsx 插件 在根目录在新建.env vue.config.js tsconfig.json tsconfig.node.json 下载ui组件库和路由(组件库根据自己的项目需要选择) 在根目录下新建views/index.tsx 在根目录下新建router/index.ts 修改App.vue 创建…

机器学习原理之 -- 朴素贝叶斯分类器:由来及原理详解

朴素贝叶斯(Naive Bayes)分类器是一类基于贝叶斯定理(Bayes Theorem)的简单而有效的概率分类算法。由于其假设特征之间的条件独立性,因此被称为“朴素”贝叶斯分类器。尽管这种独立性假设在现实中很少完全成立&#xf…

mac系统docker默认不支持host主机网络模式

环境描述:在mac系统上安装docker及docker-compose服务,并且打算搭建一个redis集群 问题描述:mac默认不支持host网络模式,导致集群无法通过外部主机访问 具体验证步骤: docker-compose.yml如下: version…

reactor网络模型的原理与实现

一、rector网络模型 对高并发编程,网络连接上的消息处理,可以分为两个阶段:等待消息准备好、消息处理。当使用默认的阻塞套接字时,往往是把这两个阶段合而为一,这样操作套接字的代码所在的线程就得睡眠来等待消息准备好…

Mysql常用SQL:日期转换成周_DAYOFWEEK(date)

有时候需要将查询出来的日期转换成周几,Mysql本身语法就是支持这种转换的,就是DAYOFWEEK()函数 语法格式:DAYOFWEEK(date) (date:可以是指定的具体日期( 如2024-06-29 ),也可以是日期…

为什么word生成的PDF内容显示不全?

在现代办公环境中,将文档从一个格式转换为另一个格式是一个常见的任务。然而,有时候我们可能会遇到意想不到的问题,比如使用Word转换成PDF时,生成的PDF文件只显示了整个界面的四分之一内容。这种问题不仅令人困扰,也可…

斜率优化DP——AcWing 303. 运输小猫

斜率优化DP 定义 斜率优化DP(Slope Optimization Dynamic Programming)是一种高级动态规划技巧,用于优化具有特定形式的状态转移方程。它主要应用于那些状态转移涉及求极值(如最小值或最大值)的问题中,通…

CesiumJS【Basic】- #028 天空盒

文章目录 天空盒1 目标2 代码2.1 main.ts3 资源天空盒 1 目标 配置显示天空盒 2 代码 2.1 main.ts import * as Cesium from cesium;// 创建 Cesium Viewer 并配置地形数据和天空盒 const viewer = new Cesium.Viewer(

理解抽象工厂设计模式

目录 抽象工厂模式抽象工厂模式结构抽象工厂模式适合应用场景抽象工厂模式优缺点练手题目题目描述输入描述输出描述提示信息题解 抽象工厂模式 抽象工厂模式是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类。 抽象工厂模式结构 抽…

自定义一个MyBaits脱敏插件

自定义一个MyBaits脱敏插件 用于对查询结果中的敏感数据进行脱敏处理。这个插件将拦截ResultSetHandler对象的处理结果,对某些敏感字段进行脱敏。 插件实现步骤 创建脱敏插件类。注册插件。 1. 创建脱敏插件类 首先,我们创建一个自定义插件类 DataM…

深入理解策略梯度算法

策略梯度(Policy Gradient)算法是强化学习中的一种重要方法,通过优化策略以获得最大回报。本文将详细介绍策略梯度算法的基本原理,推导其数学公式,并提供具体的例子来指导其实现。 策略梯度算法的基本概念 在强化学习…

【Python3的内置函数和使用方法】

目录 Python 特点 Python 中文编码 Python 变量类型 Python列表 Python 元组 元组是另一个数据类型,类似于 List(列表) Python 字典 Python数据类型转换 Python 运算符 Python算术运算符 Python比较运算符 Python赋值运算符 Pyt…

一篇就够了,为你答疑解惑:锂电池一阶模型-离线参数辨识(附代码)

锂电池一阶模型-参数离线辨识 背景模型简介数据收集1. 最大可用容量实验2. 开路电压实验3. 混合动力脉冲特性实验离线辨识对应模型对应代码总结下期预告文章字数有点多,耐心不够的谨慎点击阅读。 下期继续讲解在线参数辨识方法。 背景 最近又在开始重新梳理锂电池建模仿真与S…

使用stat()函数的例子

代码&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <stdio.h>int main(void) {struct stat st;if(-1stat("test.txt",&st)){printf("获得文件状态失败\n");return -1;}printf(&q…

Unidbg调用-补环境V2

1.B站 内部依赖自定义的SignedQuery对象,需要找到apk中的类并补充环境。 package com.nb.demo;import com.github.unidbg.AndroidEmulator

llama3模型部署时遇到的问题及解决方案

在llama3模型部署时&#xff0c;会遇到一系列问题&#xff0c;这里就作者所遇到的问题与解决方法分享一下。 注意&#xff1a;这里是从llama3 github主页上给的方法一步步做的&#xff0c;不适用于其他部署大模型的方法。 文章目录 ERROR 403&#xff1a;Forbidden安装依赖时出…

洛谷 P1548 [NOIP1997 普及组] 棋盘问题

题目 洛谷 P1548 [NOIP1997 普及组] 棋盘问题 [NOIP1997 普及组] 棋盘问题 题目背景 NOIP1997 普及组第一题 题目描述 设有一个 N M N \times M NM 方格的棋盘 ( 1 ≤ N ≤ 100 , 1 ≤ M ≤ 100 ) (1≤N≤100,1≤M≤100) (1≤N≤100,1≤M≤100) 求出该棋盘中包含有多少个正…

MySQL高级-MVCC-undo log 版本链

文章目录 1、undo log2、undo log 版本链2.1、然后&#xff0c;有四个并发事务同时在访问这张表。2.1.1、修改id为30记录&#xff0c;age改为32.1.2、修改id为30记录&#xff0c;name改为A32.1.3、修改id为30记录&#xff0c;age改为10 2.2、总结 1、undo log 回滚日志&#xf…

文件系统(操作系统实验)

实验内容 &#xff08;1&#xff09;在内存中开辟一个虚拟磁盘空间作为文件存储器&#xff0c; 在其上实现一个简单单用户文件系统。 在退出这个文件系统时&#xff0c;应将改虚拟文件系统保存到磁盘上&#xff0c; 以便下次可以将其恢复到内存的虚拟空间中。 &#xff08;2&…