oracle整表数据被误删除之寻踪
问题描述
- 开发同事在在14点左右发现任务表
task_info
数据不正确,3个小时之前的数据消失了,数据截至时间11:38:27
问题分析
查询过dba_source,只找到一个删除该表的存储过程,而且也不会造成这种情况;
根据现象,怀疑有人在11:38左右做了delete操作且没有写where条件,把整表数据全部删除;
关联查询dba_hist_active_sess_history,gv$sql未发现相关语句
关联查询gv$active_session_history,gv$sql也未发现相关语句
可能时间太久,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')
通过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;
查询machine_name,client_id,session#编号信息都是没有有效信息
最后发现有解析redo结果中有事务id,对比v$active_session_history中之前找到的那条记录,发现解析出来的事务号跟其一致,这下就证实了是程序删除的
问题回转给开发查找代码,最终找到相应代码,并整改。
总结
查找过程中,线索屡次中断,还好没放弃,最后意外通过事务号一锤定音。
oracle整表数据被误删除之寻踪的更多相关文章
- Pl/sql 如何将oracle的表数据导出成excel文件?
oracle将表数据导出成excel文件的方法 1)在SQL窗体上,查询需要导出的数据 --查询数据条件-- ; 结果视图 2)在查询结果的空白处,右键选择Copy to Excel 3) 查看导出e ...
- oracle 插入表数据的4种方式
1.往表中插入一整行数据 /*方法一*/ INSERT INTO 表名 VALUES(val1,val2,val3,...); /*方法二*/ '; 如: ,, FROM DUAL; 注意: 2. ...
- Oracle恢复表数据
Oracle恢复数据 在oracle 10g以及之后的版本,提供了回收站的机制,为了防止误操作将表数据清空而有回收机制. 换句话说,我们删除的表不会立马消失,而是进入回收站.下面我们可以查看回收站 查 ...
- oracle 两表数据对比---minus
1 引言 在程序设计的过程中,往往会遇到两个记录集的比较.如华东电网PMS接口中实现传递一天中变更(新增.修改.删除)的数据.实现的方式有多种,如编程存储过程返回游标,在存储过程中对两批数据进 ...
- oracle复制表数据,复制表结构
1.不同用户之间的表数据复制 2.同用户表之间的数据复制 3.B.x中个别字段转移到B.y的相同字段 4.只复制表结构 加入了一个永远不可能成立的条件1=2,则此时表示的是只复制表结构,但是不复制表内 ...
- oracle删除表数据的两种的方式
转自:https://blog.csdn.net/qq_37840993/article/details/82490787 平时写sql中我们都会用到删除语句,而平时删除表数据的时候我们经常会用到两种 ...
- oracle 清空表数据的2种方式及速度比较
1.情景展示 现在,需要清空该表数据 2.实现方式 为了比较删除速度,对该表进行复制 确认复制的表和原来的表数据是否一致 方式一:使用truncate table实现 方式二:使用de ...
- oracle 复制表数据,复制表结构
1.不同用户之间的表数据复制 对于在一个数据库上的两个用户A和B,假如需要把A下表old的数据复制到B下的new,请使用权限足够的用户登入sqlplus:insert into B.new(selec ...
- Oracle 备份表数据
--备份表数据 select * from t_owners; --创建备份表 create table t_owners_copy ( id number, name ), addressid nu ...
随机推荐
- MFiX-DEM中的串行碰撞搜索
在计算颗粒碰撞的时候,需要进行neighbor颗粒的搜寻,只知道大概是基于网格与颗粒绑定的方式,但是具体的实现方式还是比较模糊.搜寻部分代码如下 (mfix-19.2.2): 可以直接观察到的是,这里 ...
- this.getResolve is not a function VUE中使用sass
1. 安装以下依赖 npm install node-sass --save-dev //安装node-sass npm install sass-loader --save-dev //安装sass ...
- JUC---09异步回调
一.相关概念 Java的过程是阻塞的,因此要实现异步回调,需要多线程的支持.要实现回调,B函数在不知道A函数具体实现的情况下能够调用A函数,这是一种多态,需要接口来实现.下面实现一个简单的Java回调 ...
- linux下生成动态库和链接动态库
1.生成动态库 src/test.h #ifndef _TEST_H_HH #define _TEST_H_HH void print(); #endif src/test.cpp #include ...
- Spring创建Bean的过程Debug
目录 Spring流程Debug 1.1 Spring测试环境搭建 1.2 Debug容器创建过程 1.3 AbstractApplicationContext的refresh()包含的13个方法分析 ...
- JWT原理
1.COOKIE使用和优缺点 https://www.cnblogs.com/xiaonq/p/11094480.html 1.1 cookie原理: 用户名+密码 cookie是保存在用户浏览器 ...
- 2. DRF 认证、权限、限流、分页、过滤、序列 化
2.1 user/urls.py ModelViewSet注册路由三部曲 from django.urls import include, path from user import views ...
- 【CHOJ】磁力块
题意描述 磁力块 在平面内分布着 \(N\) 个磁力块,同时你的手上也有一块. 你一开始站在给定的坐标上,当磁力块之间满足互相吸引的条件时就可以吸引. 当你拿到新的磁石时你就可以用它来吸引更多的石头, ...
- Verilog小总结
Verilog小总结 基础 assign assign作为一个组合逻辑常用的语句,可认为是将电线连接起来,当然它能做的不仅仅是将一个输入直接输出,它能把输入信号进行逻辑运算后再输出.当assign左右 ...
- css3 渐变 兼容
.gradient{ background: #000000; background: -moz-linear-gradient(top, #000000 0%, #ffffff 100%); ba ...