问题描述

  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. Google面试题(选自公众号)

    date: 2018-12-14 13:34:56 updated: 2018-12-14 13:34:56 Google面试题(选自公众号) 问题 把你的手机拨号页想象成一个棋盘.棋子走只能走&qu ...

  2. JavaScript核心 Dom Bom

    <div id="time">2020-9-27</div> <script> //文档页面从上往下加载,先有标签才能获取元素对象,script ...

  3. 基于gin的golang web开发:模型绑定

    在前两篇文章介绍路由的时候,我们了解到gin可用通过类似DefaultQuery或DefaultPostForm等方法获取到前端提交过来的参数.参数不多的情况下也很好用,但是想想看,如果接口有很多个参 ...

  4. Optimal binary search trees

    问题 该问题的实际应用 Suppose that we are designing a program to translate text from English to French. For ea ...

  5. 4g数据无线传输终端dtu

    将串口数据转换为IP数据或将IP数据转换为串口数据并且进行传输的过程被称为数据透明传输,利用4G网络进行数据透明传输的设备被称为4G网络无线数据双向透明传输终端,也可以称为4G DTU,现在市面上大多 ...

  6. From delete library to run の 初见Django篇

    一.虚拟环境简介 1.什么是虚拟环境? 虚拟环境是用于依赖项管理和项目隔离的python工具,允许python的第三方库安装在本地特定项目的隔离目录中,而不是全局安装. 2.虚拟环境的组成 ① 安装了 ...

  7. python使用SVC算法

    python使用SVC算法评估汽车价值 关注公众号"轻松学编程"了解更多. 这是一个关于汽车测评的数据集, 类别变量为汽车的测评: (unacc,ACC,good,vgood) ​ ...

  8. Runnable接口和Callable接口的区别

    Runnable接口中的run()方法的返回值是void,它做的事情只是纯粹地去执行run()方法中的代码而已:Callable接口中的call()方法是有返回值的,是一个泛型,和Future.Fut ...

  9. Servlet学习笔记(四)

    目录 Servlet学习笔记(四) 一.会话技术Cookie.session 1. 什么是会话技术? 2. 会话技术有什么用? 3. Cookie 3.1 什么是Cookie? 3.2 使用Cooki ...

  10. Luogu P2024 [NOI2001]食物链

    并查集 首先先要读懂题目,a是b的食物的话,b的天敌是a,b的食物是a的天敌 比如,人吃鸡,鸡吃草,那么草吃人..... 所以建3个并查集,+n时表示这是其食物,+2*n时表示这是其天敌 所以当x,y ...