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

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

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

导出:EXP  zzmes/zzmes[email protected] buffer=4096 owner=zzmes file=f:\zzmes20170114.dmp
           用户    密码    要导出的数据库连接

导入:IMP zzmes/[email protected] 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的连接了

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

  

原文地址:https://www.cnblogs.com/echo-ling/p/8284429.html

时间: 2024-10-29 04:45:33

记一次数据库不小心批量更新恢复的骚操作的相关文章

mongodb 批量更新 数组的键操作的文件

persons该文件的数据如下面的: > db.persons.find() { "_id" : 2, "name" : 2 } { "_id" : 3, "name" : 3 } > db.persons.update({_id:4},{_id:4,name:4}) WriteResult({ "nMatched" : 0, "nUpserted" : 0, "n

.net批量更新(插入、修改、删除)数据库

思路: 1. 设置DataTable中每行的状态标识,即调用DataRow的方法setAdded().setModified().Delete() 2. 使用DataAdapter的Update(DataTable)方法 代码例子: String connString = "........"; //连接字符串 String selectCommand = "select * from item"; SqlDataAdapter da = new SqlDataAd

jdbc-批量插入、批量删除、批量更新

一.JDBC的批量插入 JDBC批量插入主要用于数据导入和日志记录因为日志一般都是先写在文件下的等.    我用Mysql5.1.5的JDBC driver 分别对三种比较常用的方法做了测试   方法一,使用PreparedStatement加批量的方法   Java代码       try{ Class.forName("com.MySQL.jdbc.Driver"); conn = DriverManager.getConnection(o_url, userName,passwo

大并发热点行更新的两个骚操作

大并发热点行更新的两个骚操作 要想db操作的性能足够高,巧妙的设计很重要,事务的操作范围要尽量的小.一般情况下我们都是使用某个orm框架来操作db,这一类框架多数的实现方式都是夸网络多次交互来开启事务上下文和执行sql操作,是个黑盒子,包括对 autocommit 设置的时机也会有一些差异,稍微不注意就会踩坑. 在大并发的情况下加上夸网络多次交互,就不可避免的由于网络延迟.丢包等原因导致事务的执行时间过长,出现雪崩概率会大大增加.建议在性能和并发要求比较高的场景下尽量少用orm,如果非要用尽量控

DataTable 获取列名 DataTable批量更新至数据库

好久没写东西了,这几个月也没下功夫钻研技术,愧疚啊.说下最近刚学会的DataTable 的用法吧,新手适合看下. 1 DataTable 获取列名 在处理数据的时候大家都会用到模型,从datatable遍历数据的时候可以用datatable的columns属性获取列名,然后就可以动态的用datatable 生成一个josn字符串,然后再讲json字符串转化成你想要的model,是不是很方便?. 下面是将datatable转化为json数组的方法. private string DataTable

iOS 使用FMDB事务批量更新数据库

当谈到“事务”时,我想到了sqlite本身是支持事务操作的,FMDB作为sqlite的上层封装也对事务进行了支持,那么说了这么多给不了解“事务”这个词的同学解释一下吧:通常一次 sqlite3_exec 就是一次事务,假如你要对数据库中的Stutent表插入新数据,那么该事务的具体过程是:开始新事物->插入数据->提交事务,那么当我们要往该表内插入500条数据,如果按常规操作处理就要执行500次“开始新事物->插入数据->提交事务”的过程. 好吧,今天的重点来了,举个例子:假如北京

使用DataAdpater自动批量更新DataSet中的数据到数据库

使用DataAdpater的批量更新,好处是不用写具体的sql脚本,尤其是做web服务这个优势非常吸引人. [WebMethod(Description = "Update服务提供的方法,将包含修改后数据的DateSet与本地数据库同步更新,成功返回更新的行数,失败返回-1."), SoapHeader("currentUser")]   public int Update(DataSet ds)   {       if (!ValidateUser(curren

批量插入数据库数据,有则更新,无则追加

# 批量插入数据库数据,有则更新,无则追加import pymysqlimport numpy as npimport pandas as pdconn = pymysql.connect( host='127.0.0.1', port=3306, user='root', passwd='root', db='py3_userinfo', charset='utf8' )# 游标cur = conn.cursor()df = pd.DataFrame([['合肥', 12, 110],['北京

[疯狂Java]JDBC:事务管理、中间点、批量更新

1. 数据库事务的概念: 1) 事务的目的就是为了保证数据库中数据的完整性: 2) 设想一个银行转账的过程,如果分两步,第一步是A的账户-1000,第二步是B的账户+1000,这两个动作必须是连贯的,如果中间断开(出现故障等)比如第一步执行完之后发生异常而终止了操作,那么A就白扣了1000,而B的账户也没有钱增加,这就发生了非常严重的错误: !!以上这个案例可以看出: a. 这两步必须是连贯的,一起合成的,应该作为一个整体逻辑执行单元来执行: b. 如果两步顺利执行完毕那么数据就是完整的,如果中