以前给自己制定了一个计划,一个月至少写一篇博客。感觉这个已经被我默默的给破化了,以前这样想的就是给自己一些计划去学习新的东西。最近感觉状态很差,没有心情学习(也许是因为过年,也许是因为公司)。自己入这行也这么久了,感觉看不到前途的光芒,有点转行的念头了。不发牢骚了,把今天的博客写了好以后给自己做个参考。
我们在对表操作的时候可能因为自己写的update语句或者delete语句对表产生了计划之外的影响,然后这个时候你又把数据给提交了。这个时候想把数据恢复回来可就有点麻头了,当时我是感觉有点手足无措。但是首先想到的一点就是数据回滚,以前没有处理过这样的问题首先想到的自己网上搜一些资料。网上的资料大多是针对于误删或者误增的恢复,我当时的情况是修改的数据,所以就有点小出入。其实Oracle数据库里面有个功能是对表里面每个时间节点的数据有个备份功能,我们只要把当时误操作之前那个时间段之前的数据查出来然后重新插入到表里面就可以了。但是对于修改的数据这样直接操作会出现问题,因为是对同一个多个主键ID操作多次是不允许的。
INSERT INTO bpm_worklist(SELECT *
FROM bpm_worklist AS OF TIMESTAMP SYSDATE - 3 / 24 --查询当前日期-1小时前的时间点该表数据。
MINUS
SELECT * FROM bpm_worklist);
首先解释一下这段SQL:查出最近一个小时的记录跟现有的记录去重就是你一个小时前的记录,然后把它重新插入到你的表的记录里面。但是对于你修改了多条表里面的记录这个SQL是会报错的。所以你就应该查出一个小时前的记录然后把数据导出,删除数据之后导入你导出的数据。
select * from bpm_worklist
AS OF TIMESTAMP TO_TIMESTAMP('2018-02-03 23:00:00', 'yyyy-mm-dd hh24:mi:ss');
这里我换一下查询的时间格式,其实跟上面的那个差不多。