• 记一次数据库不小心批量更新恢复的骚操作


      基于破平台的文本编辑器,写了个“;+”没有出现编译异常,代码直接执行,导致“+”后面的“where”条件没有用上~批量更新了合同表,很无奈,也很庆幸自己复查了一下发现了这个巨恐怖的事情,再一次刷新了我一个程序狗三观!!!

      第一件事就是关闭服务器,然后导出数据,备份,导入导出命令如下:

    导出:EXP  zzmes/zzmes@ORCL buffer=4096 owner=zzmes file=f:zzmes20170114.dmp
               用户    密码    要导出的数据库连接
    
    导入:IMP zzmes/zzmes@ORCL buffer=30720 fromuser=zzmes touser=zzmes file=F:zzmes20170114.dmp
              用户    密码    要导入到的数据库        导出用户      导出用户      已导出的文件

      然后在网上找到了如下命令恢复了数据,具体可以参考下面博客:http://vvv-110.iteye.com/blog/2072702,但是一定要尽快去恢复,而且一定提前备份了再去,防止二次受伤,你懂的。。。。。。

      一、执行如下SQL将test_temp表中的数据恢复到 2014 05 28  11:00:00 

      注意,这里一定要先删除全部数据,否则可能会导致数据重复,我用的就是第一种,搞定~

      delete from test_tmp;
    insert into test_tmp select *
        from test_tmp as of timestamp to_timestamp('2014-05-28 11:00:00','yyyy-mm-dd hh24:mi:ss')
    
    commit;

      二、如下:

    select timestamp_to_scn(to_timestamp('2014-05-27 11:00:00','YYYY-MM-DD HH:MI:SS')) from dual;
    或select * from sys.smon_scn_time order by time_dp desc;
    得到结果 71547785
    然后 insert into test_tmp select * from test_tmp AS OF SCN 71547785

      三、如下:

     select * from v$sqlarea ;SELECT * FROM v$session;SELECT * FROM v$session a,v$sqlarea b WHERE b.ADDRESS = a.PREV_SQL_ADDR; 
    通过这条语句找到的数据是有限的 因为有的用户可能已经断开和oracle的连接了

      最近的心情很烦躁,这样不好~烦心的事情越来越多,做自己不酷,做更好的自己才最酷~

      

  • 相关阅读:
    Ubuntu下一个openldapserver部署步骤
    秀球技:倒和其他无用
    POJ1201-Intervals(差动限制)
    Scrapy研究和探索(七)——如何防止被ban大集合策略
    word 一些有用的技巧
    Java设计模式偷跑系列(十二)组合模式建模和实现
    Sql使用视图(简单的视图)适合入门-level
    cocos2d 缓存池 对象的再利用
    txt 开关 csv 可通用 工具
    使用SharePoint创建和定义自己的网站页面
  • 原文地址:https://www.cnblogs.com/echo-ling/p/8284429.html
Copyright © 2020-2023  润新知