恢复的实现技术-日志和数据转储
一、引言
在系统正常运行的情况下,事务处理的恢复机制应采取某些技术措施为恢复做好相应的准备,保证在系统发生故障后,能将数据库从一个不一致的错误状态恢复到一个一致性状态
恢复技术主要包括
- 生成一个数据库日志,来记录系统中事务的运行情况及事务对数据库的更新
- 还有就是对磁盘上的数据进行转储
二、日志
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操作语句来得到全备份或增量备份。该语句可对单个数据文件进行转储,
也可对包括多个数据文件的文件组进行转储,
可对事务日志进行转储,得到上一次完全转储后生成的新日志备份,需指定备份所在的存储路径和物理存储文件,
可指定进行数据文件的完全转储还是增量转储,
每次增量转储得到的是上一次完全转储后的增量备份、系统生成的活动日志以及转储得到的数据库全备份,增量备份和日志备份构成的数据库备份均是为数据库产生的冗余数据,利用这些冗余数据才能在发生故障后将数据库从一个不一致的错误状态恢复到一个一致性状态
四、小结
相关文章:

恢复的实现技术-日志和数据转储
一、引言 在系统正常运行的情况下,事务处理的恢复机制应采取某些技术措施为恢复做好相应的准备,保证在系统发生故障后,能将数据库从一个不一致的错误状态恢复到一个一致性状态 恢复技术主要包括 生成一个数据库日志,来记录系统中…...

全网最全最细的jmeter接口测试教程,建议收藏
在日常工作中,尤其是做接口测试时,我们最经常用到的两个工具,就是Jmeter和postman。今天,我们主要是讲一讲Jmeter在接口测试这一块的一些方式方法。内容比较多,大家可以收藏一下,以后慢慢学。 1࿰…...
Raspbian命令行连接WiFi网络
Raspbian命令行连接WiFi网络 1. 源由2. 环境3. 信号4. 连接5. 检查6. 断开 1. 源由 “懒人”多福,是什么原因,大家知道不,哈哈。 如果大家关注过之前《Ardupilot开源代码之Rover上路计划》,为了笔记本电脑在不断网的情况下进行配…...
王佩丰 Excel 基础二十四讲——目录
前言 跟着B站学习王佩丰 Excel 基础教程,本文章为索引目录 课程传送门:视频地址——点击前往 王佩丰Excel基础教程24讲完整版 第一讲:认识 Excel 第二讲:Excel 单元格格式设置 第三讲:查找替换定位(未编辑…...

Qt扫盲-QRect矩形描述类
QRect矩形描述总结 一、概述二、常用函数1. 移动类2. 属性函数3. 判断4. 比较计算 三、渲染三、坐标 一、概述 QRect类使用整数精度在平面中定义一个矩形。在绘图的时候经常使用,作为一个二维的参数描述类。 一个矩形主要有两个重要属性,一个是坐标&am…...
Android系统adb shell怎么执行checksum 来判断文件是否变更?
在Android系统中,通过ADB(Android Debug Bridge)shell执行checksum(校验和)来检查文件是否变更是一个常见的需求,尤其是在自动化测试或确保应用文件未被篡改的场景中。在Linux和Android shell中,…...
JS中的上下文
一.执行上下文的概念: 执行上下文简称上下文。变量或者函数的上下文决定了它们可以访问哪些数据,以及它们的行为。每一个上下文都具有一个关联的变量对象,而这个上下文中定义的所有变量和函数都存在于这个对象上。 二.JS中上下文的执行机制&a…...

【深度学习】注意力机制
https://blog.csdn.net/weixin_43334693/article/details/130189238 https://blog.csdn.net/weixin_47936614/article/details/130466448 https://blog.csdn.net/qq_51320133/article/details/138305880 注意力机制:在处理信息的时候,会将注意力放在需要…...

安卓开发自定义时间日期显示组件
安卓开发自定义时间日期显示组件 问题背景 实现时间和日期显示,左对齐和对齐两种效果,如下图所示: 问题分析 自定义view实现一般思路: (1)自定义一个View (2)编写values/attrs.…...

IT行业入门,如何假期逆袭,实现抢跑
目录 前言 1.IT行业领域分类 2.基础课程预习指南 3.技术学习路线 4.学习资源推荐 结束语 前言 IT(信息技术)行业是一个非常广泛和多样化的领域,它包括了许多不同的专业领域和职业路径。如果要进军IT行业,我们应该要明确自己…...

Pyramid 中混合认证策略
1. 问题背景 在一个使用 Pyramid 框架开发的应用程序中,需要同时处理 HTML 内容的显示和 JSON API 的请求。对于 HTML 内容,使用了 AuthTktAuthenticationPolicy 进行身份验证和 ACLAuthorizationPolicy 进行授权。当用户成功登录后,会在浏览…...

深度学习经典检测方法概述
一、深度学习经典检测方法 two-stage(两阶段):Faster-rcnn Mask-Rcnn系列 one-stage(单阶段):YOLO系列 1. one-stage 最核心的优势:速度非常快,适合做实时检测任务! 但是…...

<sa8650>sa8650 qcxserver-之-摄像头传感器VB56G4A驱动开发<1>
<sa8650>sa8650 qcxserver-之-摄像头传感器VB56G4A驱动开发 <1> 一、前言二、QCX架构三、QCX 传感器驱动程序定制开发3.1 sensor硬件接口3.2 sensor配置文件3.2.1 cameraconfig.c3.2.2 cameraconfigsa8650_water.c3.2.3 新增编译MK3.2.4 参数解析3.2.4.1 struct Camera…...

推荐8款超实用的ComfyUI绘画插件,帮助我们的AI绘画质量和效率提升几个档次!
前言 大家在使用SD绘画过程中,想必见识到了插件的强大功能,本身纯净版的SD界面是相对简洁的,但是搭配了各种插件后,界面标签栏会增加很多,相应的功能也增加了。 从简单的中文界面翻译插件,到强大的contro…...

MATLAB-振动问题:两自由度耦合系统自由振动
一、基本理论 二、MATLAB实现 以下是两自由度耦合系统自由振动质量块振动过程动画显示的MATLAB程序。 clear; clc; close allx0 1; D1 40; D12 8; D2 D1; m1 1; omega0 sqrt(D1/m1); k1 D12 / D1; k2 D12 / D2; k sqrt(k1 * k2); omegazh omega0 * sqrt(1 k); omeg…...

人工智能-NLP简单知识汇总01
人工智能-NLP简单知识汇总01 1.1自然语言处理的基本概念 自然语言处理难点: 语音歧义句子切分歧义词义歧义结构歧义代指歧义省略歧义语用歧义 总而言之:!!语言无处不歧义 1.2自然语言处理的基本范式 1.2.1基于规则的方法 通…...
Spring Boot中的异步编程技巧
Spring Boot中的异步编程技巧 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨在Spring Boot应用程序中如何使用异步编程技巧,以提升性…...

深度解密Spark性能优化之道
课程介绍 课程通过实战案例解析和性能调优技巧的讲解,帮助学员提升大数据处理系统的性能和效率。课程内容涵盖了Spark性能调优的各个方面,包括内存管理、并行度设置、数据倾斜处理、Shuffle调优、资源配置等关键技术和策略。学员将通过实际案例的演示和…...
在U盘/移动硬盘上安装热插拔式Ubuntu系统,并将Docker目录挂载到NTFS硬盘
Windows10的WSL2的确给开发人员带来了很多方便,但是仍然有很多缺点。比如:太占系统内存;有些软件无法在WSL2中编译成功;相当于虚拟机,性能不如原装系统。 装双系统,相信大家都不陌生,但它会占用…...

商城小程序论文(设计)开题报告
一、课题的背景和意义 近些年来,随着移动互联网巅峰时期的来临,互联网产业逐渐趋于“小、轻、微”的方向发展,符合轻应用时代特点的各类技术受到了不同领域的广泛关注。在诸多产品中,被誉为“运行着程序的网站”之名的微信小程序…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...