• Oracle Flashback救急了一回


      客户叫我删除掉一条记录,说因为流程走错了,给我发过来一串很长的中文,说把这个名称的记录删掉。

      我直接用PL/SQL操作数据库,根据名字相等搜索,没有记录。因为这些记录的名称都是很相似的,都是类似于“关于下发2012年第一季度“畅享移动福生活”数据业务整合营销活动细则的通知……”之类,于是用like搜索,才出来一条记录,我也没注意看,直接就删了。

      然后我登陆系统,进行查询,发现那条记录还在,把正常的记录给删了,而且被删的这条记录关联的流程还在审批中的。

      马上想到数据恢复,Google一下Oracle数据恢复的,找到了OracleFlashback。网上资料说Oracle 10g以上的版本支持Flashback,心里有了希望,因为我的系统用的就是Oracle 10g。

      不多说,立马按照教程操作。

      1、执行 alter table table_name enable row movement;

      2、执行 FlashBack table table_name to timestamp to_timestamp('2012-05-24 14:59:36','yyyy-mm-dd hh24:mi:ss');

      看着这两条语句执行完毕,立马进行搜索!Thanks,刚被删除的那条记录恢复了!

      写下此文,加深印象,以后操作数据库更加要小心翼翼了!

      关于Oracle Flashback的相关知识以后时间再研究一下。上述SQL语句中的table_name是指要恢复数据的表,timestamp to_timestamp('2012-05-24 14:59:36','yyyy-mm-dd hh24:mi:ss')这个应该是指要恢复到某个时间。


      看了sumsen的回复,如果直接使用上面的语句,是有可能会出现问题的。因为是恢复到某个时间点的数据,那在时间点之后插入的数据就会被覆盖掉。除非能保证在时间点之后没有新的数据插入到表中。

      比较合理的方法是先从闪回区查找出被误删的数据,再将被误删的数据插入到原来的表中。

      1、执行 select * from A as of timestamp sysdate-10/1440;

        该SQL语会查找出距离现在10分钟之前A表的所有数据。

        sysdate-10/1440表示距离现在10分钟之前,1440这个数字表示一天有1440分钟。

        如果不写距离时间,SQL语句可写成:select * from A as of timestamp sysdate;表示查找出到现在为止A表中的所有数据。

      2、从以上查找出的数据中找出被误删的数据,再插入到原来的表中就可以了。

        

      

  • 相关阅读:
    [Javascript] Javascript numeric separators
    [RxJS] Extend Promises by Adding Custom Behavior
    [RxJS] Building an RxJS Operator
    [RxJS] Build an Event Combo Observable with RxJS (takeWhile, takeUntil, take, skip)
    [RxJS] Encapsulate complex imperative logic in a simple observable
    Android之Android软键盘的隐藏显示研究
    Android之LogUtil
    Android之使用XMLPull解析xml(二)
    Android之多媒体扫描过程
    Android之在Tab更新两个ListView,让一个listview有按下另个一个listview没有的效果
  • 原文地址:https://www.cnblogs.com/luxh/p/2516688.html
Copyright © 2020-2023  润新知