暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

从Truncate Table误操作的"槽点"看国产数据库

不堪往事的Truncate Table

大家好,今天我们来聊一聊让运维工作者动不动就熬夜,开发者动不动就破口大骂的场景。那就是Truncate Table
。其实Truncate Table是让开发者能够迅速删除数据的一个快捷方法,但是问题在于,它在Oracle、MySQL,PostgreSQL数据库中迅速恢复都是挺困难的。

大概在2014-2015年之间,我曾经遇到过一个在Oracle中Truncate了2TB表的案例,而且这个表是一张日志表,写入非常的频繁。基本上Truncate之后马上就覆盖写入了。最容易想到的就是用备份进行恢复,但是因为种种问题备份恢复是很昂贵的操作。为什么昂贵,首先针对这种体量级别的库,你需要先找到一个还不错的机器,不然你没机器、没硬盘空间,你要怎么恢复啊?还有一种方法是使用像DUL的软件,这种就是你把相关文件copy一份出来,然后进行抽取,能抽多少是多少,剩下的交给应用的来补。

我们当时选择的是第二种方案,我记得很清楚,三天三夜的车轮战,基本上是从早上8点开始干到第二天早上,然后白天值班的DBA来了,让他们帮助运行几个脚本,看着进度,我们去酒店眯一会,眯到中午继续开始。整整搞了三天,算是恢复了90%多的数据,剩下的应用在补了一些,最后勉强算是恢复完了。

后面我又陆陆续续的遇到好几个这样的故障,都是挺折腾人的,但是我一直都觉得这种行为是正常的。直到我最近搞了国产数据库后,我突然发现,为什么Oracle它支持FlashBack Drop table,它为什么就不能再稍微支持一下FlashBack Truncate Table
呢?技术上很难实现吗?

一些国产数据库的实现

接下来我们看看国产数据库有没有这样的功能,先看看TiDB
数据库,在4.0版本就实现了。

再来看看Oceanbase
数据库,也是在2.0版本实现了该功能。

其他国产数据库我不是很熟悉,单从这两者来看,他们确实都实现了Oracle缺失的Truncate Table
的闪回功能,从运维角度上来说,真是件值得高兴的事。

接下来我们演示一下TiDB的Flashback Truncate Table
功能。

mysql> select tidb_version();
+-------------------------------------------------------------------
| tidb_version()  
+-------------------------------------------------------------------
Release Version: v5.0.4
Edition: Community
Git Commit Hash53251a9731da02ad9ee5abed9f27a14c7dea33a4
Git Branch: heads/refs/tags/v5.0.4
UTC Build Time2021-09-14 08:56:02
GoVersion: go1.13
Race Enabled: false
TiKV Min Version: v3.0.0-60965b006877ca7234adaced7890d7b029ed1306
Check Table Before Dropfalse |
+-------------------------------------------------------------------

mysql> select count(1from sbtest1;
+----------+
| count(1) |
+----------+
|  1000000 |
+----------+
1 row in set (0.05 sec)

mysql> truncate table sbtest1;
Query OK, 0 rows affected (0.42 sec)

## flashback sbtest1表。
mysql> flashback table sbtest1 to test1;
Query OK, 0 rows affected (1.80 sec)

mysql> select count(1from test1;
+----------+
| count(1) |
+----------+
|  1000000 |
+----------+
1 row in set (0.05 sec)

可以看到只要在tidb_gc_life_time
时间内,一条命令就恢复了。

End

到了这里,相信大家也都看出来了。TIDB和OB考虑了开发人员或者是运维人员误操作需要迅速恢复的场景。所以,我们的国产数据库还是很贴心
的。当然这只是非常小的一个点。只是最近群里面有人提,我才拿出来说一下。另外:Oracle难道不能恢复吗?FDA
不行吗,只不过你看到生产有人用了没。

文章转载自励志成为postgresql大神,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论