记一次表误删除的调查和恢复

2024-02-09 18:58
文章标签 恢复 一次 调查 误删除

本文主要是介绍记一次表误删除的调查和恢复,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

下午一个客户联系我说他发现数据库里面的一张表被清空了,不知道是谁干的,然给我帮他找出来,再看能不能修复数据,表的数据量不是太大。

询问了,前几天还有数据的,那么估计也就是最近一两天数据被清空的,由于客户没有做审计,所以能不能找到只能尽力而为。

下面是具体步骤:

1.首先大概定位一下A表被清空是delete全表还是truncate全表

通过查询dba_objects下的last_ddl_time,看表的最近一次发生ddl的时间。发现是去年的时间,那么应该是执行了delete from A;的操作。

2.查询相关的sql视图

select * from  XXXX where sql_text like '%A%';

一般需要查询的sql视图有v$sqlarea,v$sqltext,dba_hist_sqltext

v$sqlarea是共享sql区的sql,90%你的delete的语句已经被清理出了sql共享区,基本不会查到

v$sqltext是保存在sga中的,v$sqlarea中的sql可能被刷出了shared pool,但是有可能在v$sqltext中还存在,应该是oracle为v$sqltext有单独的划分了一个buffer

dba_hist_sqltext是awr用到的保存的历史sql,他的保存时间根据你awr的保留时间而定,默认是7天,而且这个视图的数据是在数据文件中的,不是保存在内存中,因此哪怕数据库重启也不会丢失,如果在上面的视图中还没有查到可以到此视图中查询,一般都可以查到。

我们通过查询上述几个视图在v$sqltext发现了一个delete from a;表的操作,并且时间定位到是上午10点多,得到了sql的sql_id.

3.查询相关的session视图

通过sql_id查询以下几个session视图:v$session,v$active_session_history,dba_hist_active_sess_history

v$session里显示的当前正在连接的session,可以查看sql_id和prev_sql_id,一般你也是查不到的,谁会干完坏事还继续连在数据库上呢,是我早就溜了~~

v$active_session_history是ash使用的到的视图,当ash buffer没有被重用的时候,会一直保留在其中除非重启

dba_hist_active_sess_history是awr用到的视图,默认也是保留7天,而且数据保存在数据文件中,不会因为重启而丢失。

我们这里通过查询v$active_session_history查询到了删除表的会话信息。得到了会话的program,username,machine等信息,到此表的调查就结束了。


既然知道了表删除的具体时间,而且表是通过delete语句删除的那么我们就可以通过logmnr日志挖掘将表中的数据恢复出来,如果是truncate操作清空的表只能通过备份恢复的方法了,具体的logmnr的操作就不在这里叙述了,网上文档比较多,也比较简单~~大笑

这篇关于记一次表误删除的调查和恢复的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/695037

相关文章

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

使用Python实现网络设备配置备份与恢复

《使用Python实现网络设备配置备份与恢复》网络设备配置备份与恢复在网络安全管理中起着至关重要的作用,本文为大家介绍了如何通过Python实现网络设备配置备份与恢复,需要的可以参考下... 目录一、网络设备配置备份与恢复的概念与重要性二、网络设备配置备份与恢复的分类三、python网络设备配置备份与恢复实

MySQL使用binlog2sql工具实现在线恢复数据功能

《MySQL使用binlog2sql工具实现在线恢复数据功能》binlog2sql是大众点评开源的一款用于解析MySQLbinlog的工具,根据不同选项,可以得到原始SQL、回滚SQL等,下面我们就来... 目录背景目标步骤准备工作恢复数据结果验证结论背景生产数据库执行 SQL 脚本,一般会经过正规的审批

通过ibd文件恢复MySql数据的操作方法

《通过ibd文件恢复MySql数据的操作方法》文章介绍通过.ibd文件恢复MySQL数据的过程,包括知道表结构和不知道表结构两种情况,对于知道表结构的情况,可以直接将.ibd文件复制到新的数据库目录并... 目录第一种情况:知道表结构第二种情况:不知道表结构总结今天干了一件大事,安装1Panel导致原来服务

MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

《MySQLInnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据》mysql的ibdata文件被误删、被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所有表数据... 参考:mysql Innodb表空间卸载、迁移、装载的使用方法注意!此方法只适用于innodb_fi

mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

《mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据》文章主要介绍了如何从.frm和.ibd文件恢复MySQLInnoDB表结构和数据,需要的朋友可以参... 目录一、恢复表结构二、恢复表数据补充方法一、恢复表结构(从 .frm 文件)方法 1:使用 mysq

mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespace id不一致处理

《mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespaceid不一致处理》文章描述了公司服务器断电后数据库故障的过程,作者通过查看错误日志、重新初始化数据目录、恢复备... 周末突然接到一位一年多没联系的妹妹打来电话,“刘哥,快来救救我”,我脑海瞬间冒出妙瓦底,电信火苲马扁.

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

Git中恢复已删除分支的几种方法

《Git中恢复已删除分支的几种方法》:本文主要介绍在Git中恢复已删除分支的几种方法,包括查找提交记录、恢复分支、推送恢复的分支等步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录1. 恢复本地删除的分支场景方法2. 恢复远程删除的分支场景方法3. 恢复未推送的本地删除分支场景方法4. 恢复

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat