问题描述

  1. 开发同事在在14点左右发现任务表task_info数据不正确,3个小时之前的数据消失了,数据截至时间11:38:27

问题分析

  1. 查询过dba_source,只找到一个删除该表的存储过程,而且也不会造成这种情况;

  2. 根据现象,怀疑有人在11:38左右做了delete操作且没有写where条件,把整表数据全部删除;

  3. 关联查询dba_hist_active_sess_history,gv$sql未发现相关语句

  4. 关联查询gv$active_session_history,gv$sql也未发现相关语句

  5. 可能时间太久,sql已经不在缓存中 ,根据推测时间精确查找gv$active_session_history,发现有delete操作,且通过等待事件参数和object_id都确定为这个表,但是sql缺失,不能确定是否是该条记录,且通过machine等信息看,还是一个iis站点程序,一般情况程序不会犯这等错误

    select t.* from v$active_session_history t where t.sample_time
    between to_date('2020-11-26 11:36:00','yyyy-mm-dd hh24:mi:ss')
    and to_date('2020-11-26 11:40:00','yyyy-mm-dd hh24:mi:ss')
    and t.SQL_OPNAME not in ('SELECT','INSERT','UPDATE')
  6. 通过logminer解析日志查看相关信息

    • 恢复相关时刻的日志

      select t.FIRST_TIME,
      t.NAME,
      t.BLOCKS * t.BLOCK_SIZE / 1024 / 1024 size_mb,
      t.NEXT_TIME,
      t.COMPLETION_TIME
      from v$archived_log t
      order by first_time desc;
    • 通过rman恢复相关归档日志

      run{
      ALLOCATE CHANNEL CH1 DEVICE TYPE DISK;
      ALLOCATE CHANNEL CH2 DEVICE TYPE DISK;
      ALLOCATE CHANNEL CH3 DEVICE TYPE DISK;
      ALLOCATE CHANNEL CH4 DEVICE TYPE DISK;
      set archivelog destination to '+DG_FLASH_ARCH';
      restore archivelog from time 'sysdate-5/24';
      }
    • 执行logminer

      begin
      dbms_logmnr.add_logfile('+dg_flash_arch/rac/ARCHIVELOG/2020_11_26/thread_2_seq_119065.391.1057504707',dbms_logmnr.new);
      --dbms_logmnr.add_logfile('+DG_FLASH_ARCH/rac/archivelog/2020_11_26/thread_2_seq_119065.391.1057504707',dbms_logmnr.ADDFILE);
      end; begin
      dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog+dbms_logmnr.committed_data_only);
      end; create table t1 tablespace USERS as
      select * from v$logmnr_contents where table_name='TASK_INFO' and OPERATION='DELETE';
      select t1.machine_name,t1.client_id,t1.* from t1 order by t1.client_id desc; begin DBMS_LOGMNR.END_LOGMNR();end;
  7. 查询machine_name,client_id,session#编号信息都是没有有效信息

  8. 最后发现有解析redo结果中有事务id,对比v$active_session_history中之前找到的那条记录,发现解析出来的事务号跟其一致,这下就证实了是程序删除的

  9. 问题回转给开发查找代码,最终找到相应代码,并整改。

总结

查找过程中,线索屡次中断,还好没放弃,最后意外通过事务号一锤定音。

oracle整表数据被误删除之寻踪的更多相关文章

  1. Pl/sql 如何将oracle的表数据导出成excel文件?

    oracle将表数据导出成excel文件的方法 1)在SQL窗体上,查询需要导出的数据 --查询数据条件-- ; 结果视图 2)在查询结果的空白处,右键选择Copy to Excel 3) 查看导出e ...

  2. oracle 插入表数据的4种方式

      1.往表中插入一整行数据 /*方法一*/ INSERT INTO 表名 VALUES(val1,val2,val3,...); /*方法二*/ '; 如: ,, FROM DUAL; 注意: 2. ...

  3. Oracle恢复表数据

    Oracle恢复数据 在oracle 10g以及之后的版本,提供了回收站的机制,为了防止误操作将表数据清空而有回收机制. 换句话说,我们删除的表不会立马消失,而是进入回收站.下面我们可以查看回收站 查 ...

  4. oracle 两表数据对比---minus

        1 引言 在程序设计的过程中,往往会遇到两个记录集的比较.如华东电网PMS接口中实现传递一天中变更(新增.修改.删除)的数据.实现的方式有多种,如编程存储过程返回游标,在存储过程中对两批数据进 ...

  5. oracle复制表数据,复制表结构

    1.不同用户之间的表数据复制 2.同用户表之间的数据复制 3.B.x中个别字段转移到B.y的相同字段 4.只复制表结构 加入了一个永远不可能成立的条件1=2,则此时表示的是只复制表结构,但是不复制表内 ...

  6. oracle删除表数据的两种的方式

    转自:https://blog.csdn.net/qq_37840993/article/details/82490787 平时写sql中我们都会用到删除语句,而平时删除表数据的时候我们经常会用到两种 ...

  7. oracle 清空表数据的2种方式及速度比较

            1.情景展示 现在,需要清空该表数据 2.实现方式 为了比较删除速度,对该表进行复制 确认复制的表和原来的表数据是否一致 方式一:使用truncate table实现 方式二:使用de ...

  8. oracle 复制表数据,复制表结构

    1.不同用户之间的表数据复制 对于在一个数据库上的两个用户A和B,假如需要把A下表old的数据复制到B下的new,请使用权限足够的用户登入sqlplus:insert into B.new(selec ...

  9. Oracle 备份表数据

    --备份表数据 select * from t_owners; --创建备份表 create table t_owners_copy ( id number, name ), addressid nu ...

随机推荐

  1. 关于cookie与本地 存储的区别的问题。

    关于cookie与本地 存储的区别的问题. 1. cookie在浏览器和服务器间来回传递.而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存. 2. coo ...

  2. Verification of WISHBONE I2C Master Core(IRUN+Simvision)

    一.前言 很久没写技术博客了,有些懈怠,生活还得继续折腾.转眼工作一年多,时间越长越发觉得自己知之甚少,当然这跟IC行业技术密集有关.用空余时间在opencores网站上下载些小的IP看看 验证下,让 ...

  3. git 出现 error: bad signature fatal: index file corrupt

    一次大改版,提交了很多代码,但再次提交提交不了,也拉不下来仓库的代码 提示error bad signature fatal: index file corrupt 在项目有.git这同级打开Git ...

  4. python使用zlib库压缩图片,使用ffmpeg压缩视频

    python压缩图片.视频 图片压缩使用zlib库 视频压缩使用工具ffmpeg # ffmpeg -i 1.mp4 -r 10 -pix_fmt yuv420p -vcodec libx264 -p ...

  5. http twisted

    Sunday, September 30th, 2007 Twisted的WEB开发 作者: gashero <harry.python@gmail.com> 目录 1   简介 2    ...

  6. C# Base64解码小工具编写

    1 界面如下 2 关键代码如下 try { var callback = reqStr.Deserialize<dynamic>(); resStr = Newtonsoft.Json.J ...

  7. Java的浅拷贝与深拷贝

    Java的浅拷贝与深拷贝 Java中,所有的类都继承Object,Object中有clone方法,它被声明为了 protected ,所以我们但是如果要使用该方法就得重写且声明为public,必须在要 ...

  8. 分布式文档存储数据库之MongoDB索引管理

    前文我们聊到了MongoDB的简介.安装和对collection的CRUD操作,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13941797.html:今天我 ...

  9. 6、Django之模型层第一篇:单表操作

    一 ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数据库管理软件,例如mysql.oracle ...

  10. JavaScript的原型对象prototype、原型属性__proto__、原型链和constructor

    先画上一个关系图: 1. 什么是prototype.__proto__.constructor? var arr = new Array; 1. __proto__是原型属性,对象特有的属性,是对象指 ...