【赵渝强老师】崖山数据库的还原数据

YashanDB的还原数据也可以叫做回滚数据,它保存的是YashanDB数据库表中的历史记录。换句话说,当某个SQL语句更改了数据库中的数据时,YashanDB数据库会保存旧值。这个旧值就是还原数据。YashanDB数据库在保存还原数据时会按照数据修改前的原样存储数据。因此通过使用还原数据,可以回退未提交的数据。还原数据还可以用于支持读取一致性和闪回操作。

视频讲解如下
【赵渝强老师】崖山数据库的还原数据

一、 还原数据的作用

YashanDB数据库的还原数据都是存储在还原表空间中,其作用主要体现在以下3个方面:

  • 首先,还原数据用于支持查询的一致性读取。为了保证在同一个事务中前后读取数据的一致性,原始信息必须作为还原数据存在。只要保留的还原数据,YashanDB数据库就能通过重建数据来满足读取一致性查询的要求。
  • 其次,闪回技术也是基于还原数据的。例如,数据闪回查询可以查找过去某个时间存在的某个版本的数据。只要在还原数据中过去那个时间的还原信息仍存在,数据闪回查询就能成功完成。
  • 最后,还原数据也可用于从失败的事务处理中进行恢复。

简单来说还原数据就是历史数据,也叫做undo数据。在有些文档中也叫做撤销数据。下面通过一个简单的例子来说明什么是YashanDB数据库的还原数据。

(1)使用scott用户登录数据库。

powershell 复制代码
$ yasql scott/tiger

(2)查询员工号为7839的薪水。

sql 复制代码
SQL> select sal from emp where empno=7839;

# 输出的信息如下:
       SAL
----------
      5000

(3)更新员工号为7839的薪水为6000元。

sql 复制代码
SQL> update emp set sal=6000 where empno=7839;

# 由于YashanDB数据库默认情况下是自动开启事务的。
# 因此,这里执行的update语句将会自动开启一个事务。

(4)重新查询员工号为7839的薪水。

sql 复制代码
SQL> select sal from emp where empno=7839;

# 输出的信息如下:
       SAL
----------
      6000

(5)执行事务的回滚操作。

sql 复制代码
SQL> rollback;

(6)重新查询员工号为7839的薪水。

sql 复制代码
SQL> select sal from emp where empno=7839;

# 输出的信息如下:
       SAL
----------
      5000

当这里的第(5)步执行完成后,员工的薪水又恢复回了5000块钱。因此,作为历史数据的5000元钱在第(3)步的update语句之后,而在第(5)步的rollback语句之前就是保存在了还原表空间的数据文件中。

二、 还原数据的工作原理

下图解释了还原数据的工作原理。从图中可以看出当会话2读取表中数据的时候,发现数据已经被更改,但对于的事务还未提交。这时候服务器进程就不会将表中新的数据返回给会话2,而从还原表空间中读取旧值,并将其返回给会话2。

在YashanDB数据库中,还原数据分为以下三种不同的类型。如下表所示。

三、 还原(undo)数据与重做(redo)数据

与还原(undo)数据非常类似的一个概念叫做重做(redo)数据。下表对比了这两种类型数据之间的区别。

还原数据和重做数据初看很相似,但是二者的作用却截然不同。简单来说,在需要还原更改的情况下就需要用到还原数据,而且为了保持读取一致性和执行回滚也需要还原数据;在因某种原因而丢失了数据时,如果需要恢复数据就需要用到重做数据。

相关推荐
这个DBA有点耶5 小时前
2026年分布式数据库有哪些主流选择?先评估这5个维度再决定
数据库·分布式·dba
这个DBA有点耶8 小时前
从MySQL 5.7到8.0:JSON查询性能差在哪?虚拟列索引vs多值索引怎么选
数据库·mysql·架构
胡写代码8 小时前
数据库审计字段,别再每张表各写一套了——我统一成这 6 个字段
数据库
SelectDB12 小时前
为什么 JSON 正在成为分析数据库新的竞争点?
数据库·json·agent
ClouGence13 小时前
开源数据库管理工具 CloudDM 4.2.0 发布,新增 GoldenDB、KingbaseES 等数据源
数据库·dba·devops
发霉的馒头13 小时前
ORA-00845: MEMORY_TARGET not supported on this system的解决方法
数据库
草莓熊Lotso15 小时前
【Redis 初阶】Set 类型深度解析:去重集合的运算能力与实战场景
linux·网络·数据库·windows·redis·tcp/ip·缓存
煎饼皮皮侠16 小时前
【设计】设计一个web版的数据库管理平台后端(之五) --借鉴mybatis
数据库·mybatis
东风破_1 天前
danci 2:创建的单词书到底存在哪里?从 Supabase 一路理解 ORM、Drizzle 和 RLS
数据库·后端·node.js
橙子家1 天前
OSS 文件上传的几个风险点和解决方案
数据库