OceanBase 闪回查询

前言

在OB中,drop表可以通过 回收站 或者 以往的备份恢复来还原单表。当delete数据时,由于delete操作的对象不会进入回收站,此时需要通过闪回查询功能查看delete的数据,以便后续恢复

本次实验版本为 OceanBase 4.2.1.8,MySQL租户。参考OB社区 banjin 老师文章进行测试验证

OceanBase 社区

undo_retention

该参数作用为系统应保留的多版本数据范围,单位为秒。属于租户级别变量,默认为1800秒。当出现delete误删除数据时,可以通过该参数进行闪回查询,恢复误删除数据,可以根据实际业务需求适当更改该参数值

obclient [tpcc]> ALTER SYSTEM SET undo_retention=1800;
Query OK, 0 rows affected (0.129 sec)


obclient [tpcc]> SHOW PARAMETERS LIKE 'undo_retention';
+-------+----------+-----------+----------+----------------+-----------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------+--------+---------+-------------------+
| zone  | svr_type | svr_ip    | svr_port | name           | data_type | value | info                                                                                                                                                                           | section | scope  | source  | edit_level        |
+-------+----------+-----------+----------+----------------+-----------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------+--------+---------+-------------------+
| zone3 | observer | 10.0.0.63 |     2882 | undo_retention | NULL      | 1800  | the low threshold value of undo retention. The system retains undo for at least the time specified in this config when active txn protection is banned. Range: [0, 4294967295] | TENANT  | TENANT | DEFAULT | DYNAMIC_EFFECTIVE |
| zone2 | observer | 10.0.0.62 |     2882 | undo_retention | NULL      | 1800  | the low threshold value of undo retention. The system retains undo for at least the time specified in this config when active txn protection is banned. Range: [0, 4294967295] | TENANT  | TENANT | DEFAULT | DYNAMIC_EFFECTIVE |
+-------+----------+-----------+----------+----------------+-----------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------+--------+---------+-------------------+
2 rows in set (0.009 sec)


官方解释如下

DML闪回查询

准备测试数据
obclient [tpcc]> create table banjin_flash (id int ,name varchar(10),dizhi varchar(10),primary key (id));
Query OK, 0 rows affected (0.568 sec)


obclient [tpcc]> insert into banjin_flash values (1,'zhangsan','北京');
Query OK, 1 row affected (0.135 sec)


obclient [tpcc]> insert into banjin_flash values (2,'lisi','上海');
Query OK, 1 row affected (0.002 sec)


obclient [tpcc]> insert into banjin_flash values (3,'wangwu','天津');
Query OK, 1 row affected (0.002 sec)


obclient [tpcc]> insert into banjin_flash values (4,'zhaoliu','河北');
Query OK, 1 row affected (0.002 sec)


obclient [tpcc]>

更改数据

记录更改数据时的时间,便于后续闪回恢复

obclient [tpcc]> select now();
+---------------------+
| now()               |
+---------------------+
| 2024-11-16 14:25:10 |
+---------------------+
1 row in set (0.002 sec)


obclient [tpcc]> update banjin_flash set dizhi = '湖南' where name='lisi';
Query OK, 1 row affected (0.010 sec)
Rows matched: 1  Changed: 1  Warnings: 0


obclient [tpcc]> select now();
+---------------------+
| now()               |
+---------------------+
| 2024-11-16 14:25:30 |
+---------------------+
1 row in set (0.001 sec)


obclient [tpcc]> delete from banjin_flash;
Query OK, 4 rows affected (0.004 sec)


obclient [tpcc]> select now();
+---------------------+
| now()               |
+---------------------+
| 2024-11-16 14:25:50 |
+---------------------+
1 row in set (0.001 sec)


obclient [tpcc]>

闪回数据

1.可以看到由于之前删除了表中的数据,在当前状态查看不到表中任何数据

2.在 2024-11-16 14:25:30 时间段 dizhi 为上海的数据已经被修改为 湖南

3.在 2024-11-16 14:25:10 时间段 表中的数据为初始时候的状态

obclient [tpcc]> select * from banjin_flash;
Empty set (0.002 sec)


obclient [tpcc]>
obclient [tpcc]>
----  在 2024-11-16 14:25:30 时间段 dizhi 为上海的数据已经被修改为 湖南
obclient [tpcc]> SELECT * FROM banjin_flash AS OF SNAPSHOT time_to_usec('2024-11-16 14:25:30') * 1000;
+------+----------+--------+
| id   | name     | dizhi  |
+------+----------+--------+
|    1 | zhangsan | 北京   |
|    2 | lisi     | 湖南   |
|    3 | wangwu   | 天津   |
|    4 | zhaoliu  | 河北   |
+------+----------+--------+
4 rows in set (0.002 sec)
---  在 2024-11-16 14:25:10 时间段 表中的数据为初始时候的状态
obclient [tpcc]>
obclient [tpcc]> SELECT * FROM banjin_flash AS OF SNAPSHOT time_to_usec('2024-11-16 14:25:10') * 1000;
+------+----------+--------+
| id   | name     | dizhi  |
+------+----------+--------+
|    1 | zhangsan | 北京   |
|    2 | lisi     | 上海   |
|    3 | wangwu   | 天津   |
|    4 | zhaoliu  | 河北   |
+------+----------+--------+
4 rows in set (0.001 sec)


obclient [tpcc]>
obclient [tpcc]>



过程中有DDL的闪回

表增字段后的闪回效果

可以看到如果后续对表进行了alter操作,闪回查询时新加字段被Default 值补齐,如果没有default值会用null补齐

obclient [tpcc]> alter table banjin_flash add column dianhua decimal(11) default 1;
Query OK, 0 rows affected (0.178 sec)


obclient [tpcc]>
obclient [tpcc]> SELECT * FROM banjin_flash AS OF SNAPSHOT time_to_usec('2024-11-16 14:25:30') * 1000;
+------+----------+--------+---------+
| id   | name     | dizhi  | dianhua |
+------+----------+--------+---------+
|    1 | zhangsan | 北京   |       1 |
|    2 | lisi     | 湖南   |       1 |
|    3 | wangwu   | 天津   |       1 |
|    4 | zhaoliu  | 河北   |       1 |
+------+----------+--------+---------+
4 rows in set (0.015 sec)


obclient [tpcc]> SELECT * FROM banjin_flash AS OF SNAPSHOT time_to_usec('2024-11-16 14:25:10') * 1000;
+------+----------+--------+---------+
| id   | name     | dizhi  | dianhua |
+------+----------+--------+---------+
|    1 | zhangsan | 北京   |       1 |
|    2 | lisi     | 上海   |       1 |
|    3 | wangwu   | 天津   |       1 |
|    4 | zhaoliu  | 河北   |       1 |
+------+----------+--------+---------+
4 rows in set (0.001 sec)


obclient [tpcc]> alter table banjin_flash add column dianhua1 decimal(11) ;
Query OK, 0 rows affected (0.083 sec)


obclient [tpcc]> SELECT * FROM banjin_flash AS OF SNAPSHOT time_to_usec('2024-11-16 14:25:30') * 1000;
+------+----------+--------+---------+----------+
| id   | name     | dizhi  | dianhua | dianhua1 |
+------+----------+--------+---------+----------+
|    1 | zhangsan | 北京   |       1 |     NULL |
|    2 | lisi     | 湖南   |       1 |     NULL |
|    3 | wangwu   | 天津   |       1 |     NULL |
|    4 | zhaoliu  | 河北   |       1 |     NULL |
+------+----------+--------+---------+----------+
4 rows in set (0.015 sec)


obclient [tpcc]> SELECT * FROM banjin_flash AS OF SNAPSHOT time_to_usec('2024-11-16 14:25:10') * 1000;
+------+----------+--------+---------+----------+
| id   | name     | dizhi  | dianhua | dianhua1 |
+------+----------+--------+---------+----------+
|    1 | zhangsan | 北京   |       1 |     NULL |
|    2 | lisi     | 上海   |       1 |     NULL |
|    3 | wangwu   | 天津   |       1 |     NULL |
|    4 | zhaoliu  | 河北   |       1 |     NULL |
+------+----------+--------+---------+----------+
4 rows in set (0.001 sec)


obclient [tpcc]>

表删除字段后的闪回效果

可以看到如果对表进行了 alter 删除字段操作后,无法使用闪回还原数据

obclient [tpcc]> alter table banjin_flash drop column dianhua1;
Query OK, 0 rows affected (0.835 sec)


obclient [tpcc]> SELECT * FROM banjin_flash AS OF SNAPSHOT time_to_usec('2024-11-16 14:25:10') * 1000;
ERROR 1412 (HY000): Unable to read data -- Table definition has changed
obclient [tpcc]>
obclient [tpcc]> SELECT * FROM banjin_flash AS OF SNAPSHOT time_to_usec('2024-11-16 14:25:30') * 1000;
ERROR 1412 (HY000): Unable to read data -- Table definition has changed
obclient [tpcc]>
obclient [tpcc]>



truncate 闪回效果

重新初始化数据,发现truncate操作后也无法进行闪回数据

obclient [tpcc]> create table banjin_flash (id int ,name varchar(10),dizhi varchar(10),primary key (id));
Query OK, 0 rows affected (0.106 sec)


obclient [tpcc]> insert into banjin_flash values (1,'zhangsan','北京');
Query OK, 1 row affected (0.025 sec)


obclient [tpcc]> insert into banjin_flash values (2,'lisi','上海');
Query OK, 1 row affected (0.003 sec)


obclient [tpcc]> insert into banjin_flash values (3,'wangwu','天津');
Query OK, 1 row affected (0.053 sec)


obclient [tpcc]> insert into banjin_flash values (4,'zhaoliu','河北');
Query OK, 1 row affected (0.002 sec)


obclient [tpcc]> select now();
+---------------------+
| now()               |
+---------------------+
| 2024-11-16 14:44:19 |
+---------------------+
1 row in set (0.001 sec)


obclient [tpcc]> update banjin_flash set dizhi = '湖南' where name='lisi';
Query OK, 1 row affected (0.014 sec)
Rows matched: 1  Changed: 1  Warnings: 0


obclient [tpcc]> select now();
+---------------------+
| now()               |
+---------------------+
| 2024-11-16 14:44:37 |
+---------------------+
1 row in set (0.001 sec)


obclient [tpcc]> truncate table banjin_flash;
Query OK, 0 rows affected (0.099 sec)


obclient [tpcc]> SELECT * FROM banjin_flash AS OF SNAPSHOT time_to_usec('2024-11-16 14:44:19') * 1000;
ERROR 1412 (HY000): Unable to read data -- Table definition has changed
obclient [tpcc]>
obclient [tpcc]> SELECT * FROM banjin_flash AS OF SNAPSHOT time_to_usec('2024-11-16 14:44:37') * 1000;
ERROR 1412 (HY000): Unable to read data -- Table definition has changed
obclient [tpcc]>



总结

1.当出现delete操作时,可以根据 OB的undo_retention功能 进行闪回查询查看误删除的数据

2.后续过程中如果出现 删除字段 以及 truncate表操作 无法进行闪回数据

3.truncate 操作的对象既不会进入 回收站 也无法通过闪回查询,生产环境一定要谨慎操作

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小版本大不同 | Navicat 17 新增 TiDB 功能

近日,Navicat 17 迎来了小版本更新。此次版本新增了对 PingCap 公司的 TiDB 开源分布式关系型数据库的支持,进一步拓展了 Navicat 的兼容边界。即日起,Navicat 17 所有用户可免费升级至最新版本,通过 Navicat 工具实现 TiDB 数据库…

SpringBoot开发——SpringBoot3.3 实现停止/重启定时任务

文章目录 一、运行效果二、项目结构三、功能实现1、项目依赖配置(pom.xml)2、配置文件(application.yaml)3、创建 TaskSchedulerProperties 配置类4、定时任务的实现5、任务管理器的实现6、控制器的实现7、启动应用程序类8、视图控制器9、前端页面(Thymeleaf + Bootstrap)…

【大数据技术基础 | 实验十一】Hive实验:新建Hive表

文章目录 一、实验目的二、实验要求三、实验原理四、实验环境五、实验内容和步骤(一)启动Hive(二)创建表(三)显示表(四)显示表列(五)更改表(六&am…

c++ 后端

基础知识 1. 指针、引用2. 数组3. 缺省参数4. 函数重载5. 内联函数6. 宏7. auto8. const9. 类和对象10. 类的6个默认成员函数11. 初始化列表12. this指针13. C/C的区别14. C 三大特性15. 结构体内存对齐规则16. explicit17. static18. 友元类、友元函数19. 内部类20. 内存管理&…

[C++]:C++11(一)

1. 统一列表初始化 1.1 C11 之前的初始化方式 在 C11 标准中,引入了一个非常实用且强大的特性——统一列表初始化(Uniform Initialization),它为我们在初始化各种类型的对象时提供了一种统一且方便的语法形式,极大地…

基于的图的异常检测算法OddBall

OddBall异常检测算法出自2010年的论文《OddBall: Spotting Anomalies in Weighted Graphs》,它是一个在加权图(weighted graph)上检测异常点的算法,基本思路为计算每一个点的一度邻域特征,然后在整个图上用这些特征拟合出一个函数&#xff0c…

基于AOA算术优化的KNN数据聚类算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于AOA算术优化的KNN数据聚类算法matlab仿真。通过AOA优化算法,搜索最优的几个特征数据,进行KNN聚类,同时对比不同个数特征下…

【模块一】kubernetes容器编排进阶实战之CoreDNS的介绍与使用

CoreDNS进阶 CoreDNS进阶-简介 DNS组件历史版本有skydns、kube-dns和coredns三个,k8s 1.3版本之前使用skydns,之后的版本到1.17及之间的版本使用kube-dns, 1.18开始目前主要使用coredns,DNS组件用于解析k8s集群中service name所对…

栈Stack和队列Queue

目录 一、栈 (1)用数组实现 (2)用单链表实现 (3)用标注尾结点的单链表实现 (4)用双向链表实现 2、栈的实际应用 (1)改变元素的序列 (2&am…

ES6标准-Promise对象

目录 Promise对象的含义 Promise对象的特点 Promise对象的缺点 Promise对象的基本用法 Promise对象的简单例子 Promise新建后就会立即执行 Promise对象回调函数的参数 Promise参数不会中断运行 Promise对象的then方法 Promise对象的catch()方法 Promise状态为resolv…

【隐私计算】隐私计算的应用场景探索(大模型隐私计算、隐私数据存储计算、Web3、隐私物联网等)

1. 背景分析 隐私计算作为一种实现“原始数据不出域,可用不可见”的数据流通价值的关键技术,经历了2020-2023年的高光时刻,却在2024年骤然走向低谷。从各种渠道了解到一些业内曾经风光无两的隐私计算公司都有不同程度的裁员。几乎一夜之间&am…

【大数据学习 | flume】flume的概述与组件的介绍

1. flume概述 Flume是cloudera(CDH版本的hadoop) 开发的一个分布式、可靠、高可用的海量日志收集系统。它将各个服务器中的数据收集起来并送到指定的地方去,比如说送到HDFS、Hbase,简单来说flume就是收集日志的。 Flume两个版本区别: ​ 1&…

【大语言模型】ACL2024论文-16 基于地图制图的罗马尼亚自然语言推理语料库的新型课程学习方法

【大语言模型】ACL2024论文-16 基于地图制图的罗马尼亚自然语言推理语料库的新型课程学习方法 目录 文章目录 【大语言模型】ACL2024论文-16 基于地图制图的罗马尼亚自然语言推理语料库的新型课程学习方法目录摘要:研究背景:问题与挑战:如何解…

数据库审计工具--Yearning 3.1.9普民的使用指南

1 页面登录 登录地址:18000 (不要勾选LDAP) 2 修改用户密码 3 DML/DDL工单申请及审批 工单申请 根据需要选择【DML/DDL/查询】中的一种进行工单申请 填写工单信息提交SQL检测报错修改sql语句重新进行SQL检测,如检测失败可以进行SQL美化后…

Day44 | 动态规划 :状态机DP 买卖股票的最佳时机IV买卖股票的最佳时机III

Day44 | 动态规划 :状态机DP 买卖股票的最佳时机IV&&买卖股票的最佳时机III&&309.买卖股票的最佳时机含冷冻期 动态规划应该如何学习?-CSDN博客 本次题解参考自灵神的做法,大家也多多支持灵神的题解 买卖股票的最佳时机【…

Windows配置域名映射IP

一、找到 hosts 文件 打开 C:\Windows\System32\drivers\etc 二、添加hosts文件修改、写入权限 右击hosts文件,点击属性 -> 安全 -> Users -> 编辑 -> Users -> 添加修改、写入权限 -> 确定 -> 确定 进入常规,将只读属性关闭 三、…

sapiens推理的安装与使用

文章目录 1、安装1.1 克隆代码库1.2 设置 Sapiens-Lite 的代码路径1.3 创建 Conda 环境并安装必要的依赖1.4 下载模型检查点 2、推理 sapiens,是meta发布的以人为中心的视觉大模型,"sapiens"这个词来源于拉丁语,意为“智慧的”或“…

黑马智数Day10

项目背景说明 后台管理部分使用的技术栈是Vue2,前台可视化部分使用的技术栈是Vue3 前台可视化项目不是独立存在,而是和后台管理项目共享同一个登录页面 微前端的好处 微前端是一种前端架构模式,它将大型单体应用程序分解为小的、松散耦合的…

A3超级计算机虚拟机,为大型语言模型LLM和AIGC提供强大算力支持

热门大语言模型项目地址:www.suanjiayun.com/mirrorDetails?id66ac7d478099315577961758 近几个月来,我们目睹了大型语言模型(LLMs)和生成式人工智能强势闯入我们的视野,显然,这些模型在训练和运行时需要…

乐维网管平台(七):网络稳定与高效的“安全锦囊”

试想一下,你给电脑升级了一个软件,升级完成后发现有BUG,经常无故卡死,这时候想回退或重新安装旧版本…相对地,一家企业的网络管理员,在对公司的核心交换机进行复杂的配置调整时,一个小小的疏忽&…