zoukankan      html  css  js  c++  java
  • 关于Oracle误操作--数据被Commit后的数据回退恢复(闪回)

    转载:    

    今天操作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恢复了。。。。

      正好刚才在看一篇文章,关于SQL的数据恢复。Mark一下:

    --------------------------------------------------------------------------------------------------------------------------------------------------------------

    select * from DDS_EVA_VALUES as of timestamp to_timestamp('2018-12-26 18:00:00','yyyy-mm-dd hh24:mi:ss');
    alter table DDS_EVA_VALUES enable row movement;
    flashback table DDS_EVA_VALUES to timestamp TO_TIMESTAMP('20181226 18:00:00','YYYYMMDD HH24:MI:SS');

  • 相关阅读:
    Spring中Model,ModelMap以及ModelAndView之间的区别
    ssm框架中Controller层的junit测试_我改
    Controller、Service、Dao进行Junit单元
    ssm controller层 junit单元测试
    spring常用注解
    Spring MVC测试框架
    ssm框架junit简单测试_我写
    spring注入时报错::No qualifying bean of type 'xxx.xxMapper'
    Eclipse 报 "The builder launch configuration could not be found" 错误
    IIS负载均衡-Application Request Route详解第一篇: ARR介绍(转载)
  • 原文地址:https://www.cnblogs.com/rongyao/p/10180891.html
Copyright © 2011-2022 走看看