欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

oracle误操作闪回怎么办?

程序员文章站 2022-06-23 16:18:33
今天操作oracle时,做一个update数据时,不小心少写了个where,看这粗心大意的。 于是乎,把所有的员工工号都给更新成一个同一个工号了。这是一个悲催的故事。 因为工号是check了好多次才...

今天操作oracle时,做一个update数据时,不小心少写了个where,看这粗心大意的。

于是乎,把所有的员工工号都给更新成一个同一个工号了。这是一个悲催的故事。

因为工号是check了好多次才存入数据库,工号是唯一性的啊~~

不过,好在更新过后意识到这一点了。于是乎,先停止操作数据库。想想数据库commit过后的数据可以回退不!在网上搜索了一下。发现oracle有“闪回”的功能。具体“闪回”的概念,可以参见百度百科。

如果多次commit数据后,那可不可以闪回呢?貌似不可以。闪回只能暂存最近一次的数据操作。这个就和内存一样。你不可以再内存中找到上一年的数据吧。 

闪回执行步骤: 

1.查询最近更新数据之前的数据(以便确定是不是commit之前的数据)

   select * from account as of timestamp to_timestamp('2014-04-22 08:00:00', 'yyyy-mm-dd hh24:mi:ss');

其中account为被误操作的表,'2014-04-22 08:00:00'表示上次更新数据前的时间,

2.闪回操作前启用行移动功能(不启用不可以闪回)

   alter table account enable row movement;

其中account表示被误操作的表 

3.执行闪回语句:

   flashback table account to timestamp to_timestamp('20140422 15:10:00','yyyymmdd hh24:mi:ss');

这样被误操作的数据就可以“找”回来了。哈哈~

于是乎,再想,oracle有如此美妙的东西,那sql server有没有呢? 于是乎查阅了一下资料,感觉有些悲催了。sql server没有提供此类便捷的东西。貌似只能用log恢复了。。。。