举个例子:
我以前上班的时候,因为当时同事喊着去吃饭 所以有点着急弄完工作。当时是要把测试库的一张表中A列全部改成 XX,但是我却连错了库,改成了线上环境的库,导致线上环境所有数据那一列都变成了XX。这个时候第一件事想着必定是还原数据,但是又怕在这个过程中 产生了新的数据。
我立马关闭了服务,急忙跟客户说有功能需要更新,暂时关闭服务。
行,第一步我们是解决了,不会产生新的数据,接下来的就是还原这张表的数据。有很多种方法,在此介绍一种方便快捷的方法。
我们改了A表的数据。因为是及时发现的,所以离原来的数据存在的时间间隔不会太长。
例如我们是2019年9月5日18:25分改的数据,那就是说18:25分之前的数据是正确的,通过下面一段sql即可得到18:25分之前的数据(即正确数据)
select * from A表 as of timestamp to_timestamp('201909051825','YYYYMMDD HH24:MI:SS')
然后我们给表改名 这时随便改个名字
alter table A表 rename to 新表名
只要得到数据了, 什么都好说,我们可以有以下几种方式把数据还原到原表
1.清空原表 A 然后insert into A value (select * from 新表) (推荐使用这种)
2.删除A表 把新表的名字改掉。ALTER TBALE 新表 RENAME to A
第二种还原表的方式会把原表的索引给删除掉,所以还得自己加上索引,推荐是用第一种。
任何技术都是为了解决实际需求而存在的,必要时希望可以帮到大家。