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

数据库回滚:大祸临头时

原文地址

什么是数据库回滚?

数据库技术中,回滚是通过撤销对数据库所做的一项或多项更改,将数据库返回到先前状态的操作。它是维护数据完整性和从错误中恢复的重要机制。

什么时候需要数据库回滚?

数据库回滚在以下几个场景中很有必要:

  • 人为错误:当有人不小心执行了数据删除、数据修改或不正确的 schema 变更等意外操作时。
  • 应用程序问题: 当部署了新功能但却出现错误(部署失败,或者发布的代码存在错误)时。
  • 数据质量问题:数据损坏或不一致。
  • 合规要求:某些规定要求回滚数据库。

数据库回滚的类型

数据库回滚,根据其范围,主要分为三种类型:

完全回滚

将数据库 schema 和数据恢复到以前的状态。通常通过以下方式实现:

  • 从备份恢复

    最直接的方法。备份会创建特定时间的数据库快照。需要回滚时,使用该备份文件覆盖现有数据库或创建新实例。这样,数据库就会恢复到备份时间戳时的状态。大多数云提供商(AWS、GCP、Azure)都提供自动备份解决方案和简单的还原程序。

    这种方法对于事故恢复、测试环境和数据迁移尤为有效。

  • 时间点恢复(PITR)

    更为灵活,允许恢复到特定时间点,而不是备份时的静态时间点。工作原理是将基础备份与连续事务日志相结合。

    云服务商也提供这种功能。

    在需要撤销最近更改的情况下,这种功能尤为重要。意外删除数据或错误 schema 变更等人为错误就适合这种情况。

完全回滚很少使用,因为这是一种硬重置。它既会删除坏的更改,也会删除好的更改。

Schema 回滚(DDL)

部署新版本应用程序时,通常有新的迁移脚本来更新数据库 schema。如果新版本有问题,可以将 schema 回滚到之前的版本。schema 变更可以恢复数据库的结构更改,包括表结构、索引、约束、存储过程等。

维护数据库迁移记录,就像维护代码版本记录一样,有助于方便地找到所需的版本。

数据回滚(DML)

恢复对数据库表中实际数据的更改,通常涉及 DML(Data Manipulation Language)语句,如 INSERT、UPDATE 和 DELETE。

意外的数据修改(如大量错误更新或意外删除)、数据质量问题(如数据损坏或不一致),都属于数据回滚的应用范畴。

数据库自动回滚

要有效实现数据库自动回滚,系统需要全面跟踪变更。虽然云服务商的自动备份有直接的还原程序,可以完全回滚,但更精细的控制还需要详细的迁移记录管理。

Bytebase 提供了一种基于 GUI 的直观解决方案,协作功能强大,保留了所有人为数据库变更的记录。

schema 回滚:可以查看变更历史,选择特定版本。系统将生成回滚脚本。

在这里插入图片描述

数据回滚:方便的一键式自动备份数据回滚功能。

在这里插入图片描述

还可以通过 API 触发 Bytebase 回滚,结合便利的可视化管理工具,构建可靠的 GitOps 工作流。

总结

数据库回滚对于维护数据完整、错误恢复至关重要。周密的回滚策略与适当的自动化和测试相结合,可确保企业从数据库问题中快速恢复,最大程度上降低对业务运营的影响。


💡 更多资讯,请关注 Bytebase 公号:Bytebase

相关文章:

数据库回滚:大祸临头时

原文地址 什么是数据库回滚? 数据库技术中,回滚是通过撤销对数据库所做的一项或多项更改,将数据库返回到先前状态的操作。它是维护数据完整性和从错误中恢复的重要机制。 什么时候需要数据库回滚? 数据库回滚在以下几个场景中很…...

【GoLang】两个字符串如何比较大小?以及字典顺序的比较规则

在 Go 语言中,字符串的比较是基于字典顺序进行的。 字典顺序的比较规则: 比较两个字符串从左到右逐个字符的Unicode码点值, 若比较结果不相等则将此结果作为字符串大小的结果, 若比较结果相等则比较下一位, 若其中一个…...

5G学习笔记之SNPN系列之UE入网和远程配置

参考:3GPP 23.501 5.30.2.10 Onboarding of UEs for SNPNs 小小协议搬运工 目录 0. NPN系列 1. 概述 2. SNPN作为ONN 2.1 DCS参与的入网主鉴权 2.2 DCS不参与的入网主鉴权 2.3 UE入网 3. PLMN作为ONN 4. 远程配置 0. NPN系列 1. NPN概述 2. NPN R18 3. 【SNPN系列】…...

C#版OpenCv常用函数大全

OpenCvSharp 是 OpenCV 的NET封装,提供了丰富的图像处理和计算机视觉功能。以下是一些常用函数及其详细说明。 1. 图像读取与显示 Cv2.ImRead 功能:读取图像文件并返回一个 Mat 对象。用法:Mat image Cv2.ImRead("path/to/image.jpg&…...

Spring Boot教程之五十二:CrudRepository 和 JpaRepository 之间的区别

Spring Boot – CrudRepository 和 JpaRepository 之间的区别 Spring Boot建立在 Spring 之上,包含 Spring 的所有功能。由于其快速的生产就绪环境,使开发人员能够直接专注于逻辑,而不必费力配置和设置,因此如今它正成为开发人员…...

蓝桥杯备考:数据结构之栈 和 stack

栈的概念以及栈的实现 栈是一种只允许在一端进行插入和删除的线性表 空栈:没有任何元素 入栈:插入元素 出栈:删除元素 栈本身就是一个线性表,我们可以写一个足够大的数组来实现栈 除此之外,我们还需要变量n来记录…...

solidity基础 -- 映射

在区块链的智能合约开发领域,Solidity 作为以太坊上最主流的编程语言之一,拥有诸多强大特性助力开发者构建复杂且高效的去中心化应用。其中,映射(Mapping)是一个极为关键的数据结构,它为合约中的数据存储与…...

Angular 11课程实践:构建高效单页应用的支持代码

本文还有配套的精品资源,点击获取 简介:Angular 11是Google支持的前端框架,适合构建复杂的单页应用(SPA)。本课程将深入介绍Angular核心特性,如组件化、依赖注入、数据绑定和路由,并且涵盖Ang…...

测试用例颗粒度说明

当我们在编写测试用例时,总是会遇到一个问题:如何确定测试用例的颗粒度?测试用例过于粗糙,可能无法全面覆盖系统的细节;而颗粒度过细,又会导致测试重复、冗余。掌握合适的颗粒度,不仅可以提高测…...

ESP32 IDF VScode出现头文件“无法打开 源 文件 ”,并有红色下划线警告

问题背景: ESP32 IDF VScode出现头文件“无法打开 源 文件 ”,并有红色下划线警告: 解决办法: 在工程里面的.vscode文件夹下,检查是否存在c_cpp_properties.json文件,如果没有可以手动创建添加。如图…...

Windows安装ES单机版设置密码

下载ES ES下载链接 我用的是7.17.26 启动前配置 解压之后打开D:\software\elasticsearch-7.17.26\bin\elasticsearch-env.bat 在elasticsearch-env.bat文件中修改jdk的路径 修改前 修改内容 if defined ES_JAVA_HOME (set JAVA"D:\software\elasticsearch-7.17.26\…...

Linux Docker

Docker 的定义 Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包成一个可移植的容器。容器是一种轻量级、独立的运行环境,与传统的虚拟机不同,容器共享主机操作系统的内核,通过隔离的文件系统、进程空间和网…...

MSE学习

MSE简介 媒体源拓展&#xff08;Media Source Extensions&#xff0c;简称 MSE&#xff09;是一个由 W3C 制定的标准&#xff0c;它允许 JavaScript 代码通过 AJAX 请求获取媒体数据&#xff0c;并将其提供给 HTML 的 <video> 或 <audio> 元素进行播放。 MSE特点…...

0-基于蚁群优化和带注意力机制的循环神经网络的新型混合算法用于解决旅行商问题(HAL science)(完)

文章目录 AbstractI INTRODUCTIONII 旅行商问题的正式描述III STATE OF THE ARTIV 使用的混合化技术原理4.1 Principle of ACO4.2具有注意机制的自动编码器模型V 蚁群优化与具有注意机制的神经网络的混合5.1 基本思想5.2 解决步骤5.2.1 模型训练5.2.2 寻找解VI EXPERIMENTS6.1 …...

MIUI显示/隐藏5G开关的方法,信号弱时开启手机Wifi通话方法

5G网速虽快&#xff0c;手机功耗也大。 1.取消MIUI强制的5G&#xff0c;手动设置4G的方法&#xff01; 【小米澎湃OS, Xiaomi HyperOS显示/隐藏5G开关的方法】 1.1.小米MIUI系统升级后&#xff0c;被强制连5G&#xff0c;手动设置开关被隐藏&#xff0c;如下图&#xff1a; 1…...

挑战20天刷完leecode100

2025.1.5 二分查找 1 搜索插入位置 就是简单的二分查找 注意开闭就行 这里有一句话就是nums是升序的 如果他不是严格递增 就是有相同的数字的情况下应该怎么写? int lower_bound(vector<int>& nums, int target) {int left 0, right (int) nums.size() - 1; …...

Java列表示例

示例1&#xff1a;使用ArrayList创建并操作列表 ArrayList是List接口最常用的实现之一&#xff0c;它内部使用数组来存储元素&#xff0c;因此对于随机访问具有很高的效率。但是&#xff0c;当涉及到频繁的插入或删除操作时&#xff0c;它的性能可能会受到影响&#xff0c;因为…...

Objective-C语言的网络编程

Objective-C语言的网络编程 引言 在现代软件开发中&#xff0c;网络编程逐渐成为一个不可或缺的部分&#xff0c;特别是在移动应用和分布式系统中。Objective-C 是一种主要用于 iOS 和 macOS 开发的编程语言&#xff0c;它在网络编程方面也有着丰富的支持。在这篇文章中&…...

安卓OCR使用(Google ML Kit)

OCR是一个很常用的功能&#xff0c;Google ML Kit提供了OCR能力&#xff0c;用起来也很简单&#xff0c;本文介绍一下使用方法。 1. 相关概念 名词概念解释TextBlock块一个段落Line行一行文本Element元素单词&#xff1b;对汉字来说&#xff0c;类似"开头 (分隔符)中间&…...

《机器学习》——贝叶斯算法

贝叶斯简介 贝叶斯公式&#xff0c;又称贝叶斯定理、贝叶斯法则&#xff0c;最初是用来描述两个事件的条件概率间的关系的公式&#xff0c;后来被人们发现具有很深刻的实际意义和应用价值。该公式的实际内涵是&#xff0c;支持某项属性的事件发生得愈多&#xff0c;则该属性成…...

深入解析Xil_DCacheFlushRange在Zynq SoC中的缓存一致性应用

1. 为什么Zynq开发者需要关注Xil_DCacheFlushRange 第一次在Zynq平台上做DMA数据传输时&#xff0c;我遇到了一个诡异现象&#xff1a;PL端明明收到了数据&#xff0c;但处理结果总是错乱。调试三天后才发现&#xff0c;问题出在PS端的缓存数据没有及时同步到主存。这个经历让…...

ModTheSpire终极指南:杀戮尖塔模组加载器完整使用教程

ModTheSpire终极指南&#xff1a;杀戮尖塔模组加载器完整使用教程 【免费下载链接】ModTheSpire External mod loader for Slay The Spire 项目地址: https://gitcode.com/gh_mirrors/mo/ModTheSpire ModTheSpire是一款专为《杀戮尖塔》设计的强大模组加载器&#xff0c…...

终极指南:如何使用XGP-save-extractor解锁Xbox Game Pass存档迁移自由

终极指南&#xff1a;如何使用XGP-save-extractor解锁Xbox Game Pass存档迁移自由 【免费下载链接】XGP-save-extractor Python script to extract savefiles out of Xbox Game Pass for PC games 项目地址: https://gitcode.com/gh_mirrors/xg/XGP-save-extractor XGP-…...

GraspNet环境配置与编译问题实战指南

1. GraspNet环境配置避坑指南 第一次接触GraspNet这个3D抓取检测框架时&#xff0c;我花了整整三天时间才把环境配好。现在回想起来&#xff0c;大部分时间都浪费在了一些完全可以避免的问题上。今天我就把这些经验总结出来&#xff0c;帮你少走弯路。 GraspNet对CUDA和cuDNN的…...

QueryExcel:解锁3大核心功能的多Excel文件极速查询指南

QueryExcel&#xff1a;解锁3大核心功能的多Excel文件极速查询指南 【免费下载链接】QueryExcel 多Excel文件内容查询工具。 项目地址: https://gitcode.com/gh_mirrors/qu/QueryExcel 直击痛点&#xff1a;数据查询的效率困境 场景一&#xff1a;财务报表核对 月底需从…...

DAMO-YOLO模型微调指南:自定义数据集训练

DAMO-YOLO模型微调指南&#xff1a;自定义数据集训练 1. 引言 目标检测是计算机视觉领域的核心任务之一&#xff0c;而DAMO-YOLO作为阿里巴巴达摩院推出的高效检测框架&#xff0c;在精度和速度方面都表现出色。但预训练模型往往无法直接满足特定场景的需求&#xff0c;这时候…...

DeepSeek-R1-Distill-Qwen-1.5B效果展示:同一问题下思考链vs直答效果对比

DeepSeek-R1-Distill-Qwen-1.5B效果展示&#xff1a;同一问题下思考链vs直答效果对比 1. 项目概述 DeepSeek-R1-Distill-Qwen-1.5B是一个超轻量级的智能对话模型&#xff0c;基于魔塔平台下载量最高的蒸馏模型构建。这个模型巧妙融合了DeepSeek强大的逻辑推理能力和Qwen成熟的…...

罗技PUBG鼠标宏压枪脚本技术解析:后坐力控制算法实现与架构设计

罗技PUBG鼠标宏压枪脚本技术解析&#xff1a;后坐力控制算法实现与架构设计 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 在FPS游戏《绝地求生…...

3步攻克NCM加密壁垒:让音乐文件重获跨设备自由

3步攻克NCM加密壁垒&#xff1a;让音乐文件重获跨设备自由 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 当你从音乐平台下载的NCM格式文件无法在车载音响、MP3播放器等设备播放时&#xff0c;是否感到束手无策&#xff1f;ncmdump…...

5分钟部署Fun-ASR语音识别:支持中文、英文、日文等31种语言

5分钟部署Fun-ASR语音识别&#xff1a;支持中文、英文、日文等31种语言 1. 快速入门指南 1.1 学习目标 本文将带您快速完成Fun-ASR-MLT-Nano-2512多语言语音识别模型的部署与使用。通过本教程&#xff0c;您将掌握&#xff1a; 一键式Docker部署方法Web界面基本操作流程Pyt…...