【赵渝强老师】达梦数据库的回滚数据

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

视频讲解如下
【赵渝强老师】达梦数据库的回滚数据

一、 回滚数据的作用

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

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

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

(1)登录达梦数据库。

powershell 复制代码
disql sysdba/Welcome_1

(2)查询员工号为1001的姓名和薪水。

sql 复制代码
SQL> select employee_name,salary from dmhr.employee where employee_id=1001;

# 输出的信息如下:
行号     		EMPLOYEE_NAME 	SALARY     
---------- ------------- -----------
1          	马学铭     		30000

(3)更新员工号为1001的薪水为40000元。

sql 复制代码
SQL> update dmhr.employee set salary=40000 where employee_id=1001;

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

(4)重新查询员工号为1001的姓名和薪水。

sql 复制代码
SQL> select employee_name,salary from dmhr.employee where employee_id=1001;

# 输出的信息如下:
行号     		EMPLOYEE_NAME SALARY     
---------- ------------- -----------
1          	马学铭     		40000

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

sql 复制代码
SQL> rollback;

(6)重新查询员工号为1001的姓名和薪水。

sql 复制代码
SQL> select employee_name,salary from dmhr.employee where employee_id=1001;

# 输出的信息如下:
行号     		EMPLOYEE_NAME SALARY     
---------- ------------- -----------
1          		马学铭     30000

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

二、 回滚数据的工作原理

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

三、 回滚数据与重做数据

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

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

四、 管理回滚数据

达梦数据库将所有的回滚数据都保存到了回滚表空间中,通过执行下面的语句可以查看回滚数据的相关参数信息。

sql 复制代码
SQL> select para_name,para_value,description from v$dm_ini where para_name like '%UNDO%';

# 输出的信息如下:
行号  	PARA_NAME       PARA_VALUE DESCRIPTION                                                                             
------- --------------- ---------- --------------------------
1       UNDO_EXTENT_NUM 		4     	Number of initial undo extents for each worker thread
2       UNDO_RETENTION  		90		Maximum retention time in seconds for undo pages since relative transaction is committed
3       UNDO_BATCH_FAST 		0       Whether to undo batch insert fast

# 其中:
# 参数UNDO_EXTENT_NUM表示系统启动时,为每个工作线程分配的回滚簇个数。有效值范围(1~ 256)。
# 参数UNDO_RETENTION表示事务提交后回滚页保持时间,单位为秒。有效值范围(0~ 86400)。

执行下面的语句将往回滚表空间中添加一个新的数据文件。

sql 复制代码
SQL> alter tablespace roll add datafile '/home/dmdba/dmdbms/data/DAMENG/ROLL02.DBF' size 128;
相关推荐
我科绝伦(Huanhuan Zhou)2 小时前
Oracle 表空间碎片整理实战:shrink space 与 move table 全解析
数据库·oracle
Yyyyyy~2 小时前
【Mysql】表的操作
数据库·mysql
TDengine (老段)2 小时前
工业数据十大痛点系列 · 第 6 篇
数据库·时序数据库·tdengine·涛思数据·idmp·工业数据分析·ai 分析数据
ly76893 小时前
PostgreSQL 流复制与高可用切换:主从延迟、同步提交与 Spring Boot 读写分离的边界
数据库·spring boot·postgresql·读写分离·流复制·高可用切换
l1t3 小时前
修改两处,让SQLite求解数独SQL在datafusion上运行
服务器·数据库·sql
data analyse 4563 小时前
服务端统计时区切换的日期归并
大数据·前端·数据库·人工智能·数据分析
远方16093 小时前
108-ORA-00600 [kdsgrp1-qetlbr] 内部错误排查与 RMAN 块级恢复
大数据·linux·数据库·oracle
福娃筱欢4 小时前
SQLServer迁移至KES SQLServer模式 问题整理
数据库·oracle·sqlserver
hflmwl84 小时前
RedisDesktopManager安装包中文版官方下载,redis可视化客户端工具下载
数据库·redis·缓存·可视化客户端工具
FluxDB4 小时前
《用 Rust + GPUI 做了一个开源数据库客户端:FluxDB》
数据库