Oracle数据误删恢复

article/2025/9/28 21:58:35

Oracle数据误删恢复

欢迎关注微信公众号: 程序员小圈圈
转载请标明出处^_^
原文首发于: www.zhangruibin.com
本文出自于: RebornChang的博客

对于删除数据,我们大致可以分为两种。
①一种是在控制台执行的sql进行数据删除。
②一种是在项目中,比如web项目,jdbc执行sql的删除。
有的人可能就这样说了,我是用datagrip之类的数据库连接软件,直接查询出来数据然后点击按钮删除的。这种就是①的情况,因为这种软件在底层都是连接数据库执行的sql。
那又有一个疑问,项目中执行的sql跟控制台执行的是否一样呢,有什么证明吗?
有的,那就涉及到一个视图:
v s q l a r e a 。 说 到 v sqlarea。 说到v sqlareavsqlarea 就不得不说下 v s q l 以 及 v sql 以及v sqlvsqltext。
关于三者的详细说明见文末。

接下来说下为啥笔者会写这篇文章记录:
情景:某一在用系统对商品配置时,错误的删除了一个代理商,可怕的是,项目执行的是delete语句,并不是update状态,也就是说是彻底删除,瞬间炸裂,怎么找回刚误删的数据?
那么看下面两种,笔者使用的是第二种。

控制台执行的sql删除

在控制台执行的sql都会被oracle快照到一个视图:

v$sqlarea。
通过查询这个视图,我们可以看到刚才执行的语句,比如delete语句,然后通过对时间的排序,我们就可以得到想要的sql。

select t.SQL_TEXT, t.FIRST_LOAD_TIME  from v$sqlarea t order by t.FIRST_LOAD_TIME desc ;

上面那句sql笔者执行后结果如下:

不过这样有一个问题,就是当我的数据比较复杂的时候,我是直接通过id之类的做的删除,那这个就不好使了,你可以想象下,这个视图存储的是控制台执行的语句,而且不包括上文中的②。
那么接下来再看另一种。

oracle数据快照找回删除数据

每条我们删除的数据,都会存在对应表的删除快照,所以我们只需要找到这个类似于回收站的东西,然后就可以筛选我们需要的数据,笔者的数据就是依赖这个找到的,先说下sql例子:

select * from GOODS_CONFIG_DETAIL as of timestamp to_timestamp('2019-08-28 09:30:00', 'yyyy-mm-dd hh24:mi:ss') where GOODS_CONFIG_ID = '0000000082AF0815AA953170ACD88F';

解释:
select * from 误删数据的表名 as of timestamp to_timestamp(‘从什么时候开始进行筛选,也就是需要定位到误删之前的时间’, ‘yyyy-mm-dd hh24:mi:ss’)。

v s q l a r e a 、 v sqlarea、 v sqlareavsql 、v$sqltext

共同点

1.都存储了sql内容;

  1. 记录的都是位于内存中的sql内容;

3.因为是内存,所以都不保留历史记录;

不同点

1.存储的为止不都是相同

其中v s q l 和 v sql和v sqlvsqlarea存储的sql都是位于shared sql area中的sql,而v$sqltext是位于sga中的sql。但文档没有明确说明这里的sga是否还包含了psa(私有sql区域--共享服务器模式下)。

2.存储sql的方式也不同
v s q l 和 v sql和v sqlvsqlarea都是用一行来存储sql全文,而v$sqltext用一行存储sql的一行。

3.v$sql不存储包含group by的
通常这个视图,在每个查询执行完成后更新,但对于执行很久的sql,它是每5秒更新一次,这点对于查看sql执行状态是有意义的。

4.存储的明细不同
这是最基本的。

V$SQL

V S Q L 在 子 游 标 级 别 上 列 出 了 在 共 享 s q l 区 域 的 统 计 信 息 , 他 将 原 始 s q l 文 本 展 现 为 一 行 。 V SQL在子游标级别上列出了在共享sql区域的统计信息,他将原始sql文本展现为一行。V SQLsqlsqlVSQL中的视图信息一般在sql执行的最后进行更新。然而,对于长时间执行的sql,每5秒会更新一次v$sql视图。这使得很容易查看长时间执行的sql在运行过程中带来的影响。

v s q l 列 说 明 , 如 没 有 特 别 说 明 , 均 指 子 游 标 , 存 储 的 是 具 体 的 S Q L 和 执 行 计 划 相 关 信 息 , 实 际 上 , v sql列说明,如没有特别说明,均指子游标,存储的是具体的SQL 和执行计划相关信息,实际上,v sqlSQLvsqlarea 可以看做 v$sql 根据 sqltext 等 做了 group by之后的信息。

V$SQL各列说明

v$sql SQL_TEXT           //当前正在执行的游标的sql文本的前1000个字符SQL_FULLTEXT       CLOB类型 整个sql文本,不用借助于 V$SQL_TEXT视图来查看整个文本SQL_ID           //库缓存中的SQL父游标的标志SHARABLE_MEM           //子游标使用的共享内存的大小,bytesPERSISTENT_MEM           //子游标生存时间中使用的固定内存的总量,bytesRUNTIME_MEM           //在子游标执行过程中需要的固定内存大小,bytesSORTS           //子游标发生的排序数量LOADED_VERSIONS          // 显示上下文堆是否载入,1是,0否USERS_OPENING          // 执行这个sql的用户数FETCHES          // sql取数据的次数EXECUTIONS         //自从被载入共享池后,sql执行的次数 FIRST_LOAD_TIME          // 父游标产生的时间戳PARSE_CALLS           //解析调用的次数 DISK_CALLS             //读磁盘的次数DIRECT_WRITES           //直接写的次数`BUFFER_GETS           //直接从buffer中得到数据的次数`APPLICATION_WAIT_TIME          // 应用等待时间,毫秒CONCURRENCY_WAIT_TIME          //并发等待时间,毫秒USER_IO_WAIT_TIME           //用户IO等待时间ROWS_PROCESSED SQL           //解析sql返回的总行数OPTIMIZER_MODE           //优化器模式OPTIMIZER_COST           //优化器对于sql给出的成本PARSING_USER_ID           //第一个创建这个子游标的用户idHASH_VALUES           //解析产生的哈希值CHILD_NUMBER           //该子游标的数量SERVICE           //服务名CPU_TIME           //该子游标解析,执行和获取数据使用的CPU时间ELAPSED_TIME           //sql的执行时间,毫秒INVALIDATIONS           //该子游标的无效次数MODULE       //第一次解析该语句时,通过DBMS_APPLICAITON_INFO.SET_ACTION设置的模块名ACTION      //第一次解析该语句时,通过DBMS_APPLICAITON_INFO.SET_ACTION设置的动作名 IS_OBSOLETE          //标记该子游标过期与否,当子游标过大时会发生这种情况is_bind_sensitive           //不仅指出是否使用绑定变量窥测来生成执行计划,而且指出这个执行计划是否依赖于窥测到的值。如果是,这个字段会被设置为Y,否则会被设置为N。is_bind_aware          //表明游标是否使用了扩展的游标共享。如果是,这个字段会被设置为Y,如果不是,这个字段会被设置为N。如果是设置为N,这个游标将被废弃,不再可用。is_shareable           //表明游标能否被共享。如果可以,这个字段会被设置为Y,否则,会被设置为N。如果被设置为N,这个游标将被废弃,不再可用。

v$sqlarea

v s q l a r e a 的 字 段 定 义 和 v sqlarea的字段定义和v sqlareavsql基本一致,不同的是V S Q L A R E A 是 在 父 游 标 级 别 上 统 计 的 s q l 信 息 , v SQLAREA是在父游标级别上统计的sql信息,v SQLAREAsqlvsql的汇总表,进行了group by hash_value,sql_id的汇总。

v$sqltext

本视图包括Shared pool中SQL语句的完整文本,一条SQL语句可能分成多个块被保存于多个记录内。

注:V S Q L A R E A 和 v SQLAREA和v SQLAREAvsql中的SQL_TEXT字段只包括头1000个字符, SQL_FULLTEXT以CLOB方式包含了所有的字符

V$SQLTEXT列说明

HASH_VALUE           SQL语句的Hash值ADDRESS           sql语句在SGA中的地址SQL_TEXT           SQL文本。PIECE           SQL语句块的序号SQL_ID           SQL idCOMMAND_TYPE             命令类型,如select、insert等。

,博主的微信公众号
程序员小圈圈’开始持续更新了哟~~
识别二维码或者直接搜索名字 ‘程序员小圈圈’ 即可关注本公众号哟~~
不只是有技术哟~~
还有很多的学习娱乐资源免费下载哦~~
还可以学下教育知识以及消遣娱乐哟~~
求关注哟~~


http://chatgpt.dhexx.cn/article/DIRfyx8s.shtml

相关文章

SOLARIS系统下ORACLE数据恢复案例

服务器数据恢复环境: 两台SPARC SOLARIS操作系统服务器通过光纤交换机共享一台存储作为集群使用。平时是一台服务器(以下称为主服务器)在运行,如果该服务器发生故障宕机,只需要将这台服务器关机后开启另外一台服务器&a…

Oracle数据恢复

1、查询Oracle日志表 select * from v$sql ; select * FROM v$sqlarea ; 2、查询表的最新操作,找到被删除的数据 select * from v$sql where sql_text like %ABNORMAL_ORDERS% ORDER BY FIRST_LOAD_TIME desc; 找到操作的时间 FIRST_LOAD_TIME,SQ…

【服务器数据恢复】EXT3文件系统下Oracle数据库数据恢复案例

服务器数据恢复环境: 华为OceanStor某型号存储,十几块FC硬盘组建一组RAID5磁盘阵列,配备了一块热备盘;上层使用EXT3文件系统,配置了oracle数据库。 服务器故障: 该存储RAID5中的一块硬盘未知原因离线&…

Oracle-Oracle数据库备份与恢复

Oracle数据库备份与恢复 下面通过一些简单的例子来了解一下: Oracle数据库各种物理备份的方法。Oracle数据库各种物理恢复的方法利用RMAN工具进行数据库的备份与恢复。数据的导出与导入操作。 (1)关闭BOOKSALES数据库,进行一次完全冷备份。 select file…

Oracle—数据恢复

文档结构 1、恢复原理1.1、recyclebin(回收站)相关操作 1.2、archived redo(归档日志)1.3、supplemental log(补充日志) 2、恢复场景2.1、定义删除2.2、记录删除2.2.1、undo恢复2.2.2、redo恢复2.2.3、dbms…

Oracle数据库数据丢失恢复的几种方法总结

根据oracle数据库的特点和提供的工具,主要方法有以下几种方法: 利用逻辑备份使用import工具丢失数据的表 利用物理备份来通过还原数据文件并进行不完全恢复 利用dbms_logmnr包从redo log文件中恢复 利用flashback特性恢复数据 前提 为了方便…

QSS美化

摘自:https://qtdebug.com/qtbook-qss/ Qt 提供的 widget 的默认外观很多时候都不符合项目的界面需求,必须要改,修改一个 widget 的外观(Look and Feel)有以下的方法: 继承 Widget,然后在 pain…

Qss换肤设置

前言:本文大部分的内容来源于同类博客。章节1.1-1.3 摘自参考文档:http://www.th7.cn/web/html-css/201405/37286.shtml。1.4摘自参考文档。https://blog.csdn.net/Staranywhere/article/details/106967756。本文仅用作知识点整理。 目录: 1…

qss之QRadioButton

先来个示例 QRadioButton {font-family: "Microsoft YaHei";font-size: 14px;color: #BDC8E2;background-color: #2E3648; }效果图如下: 上面的例子是基本的样式设置,下面我们将探讨 QRadioButton 各种样式设置: 字体样式 font…

QSS的使用

QSS官方文档:https://doc.qt.io/qt-5/stylesheet-reference.html 图标制作例子: normal hover press disable 图标制作 按钮设计指南 按钮多态的几种方法 一、程序应用qss文件 QString qssPath QString("%1/stylesheet/style.qss").arg(a.applicationD…

QSS属性大全

1、选择器 1.1、通用选择器 /* 格式:* { 属性: 值; } 通用选择器一般用来给应用程序设置统一的字体,大小,颜色等 */ * {font-family: "Microsoft YaHei";outline: 0px;color: #DCDCDC; }1.2、类型选择器 /* 格式: 类…

Qt之QSS使用与基本语法

一、QSS介绍 QSS是一种从CSS借鉴过来的机制,用来实现对控件外观的自定义。但是它比CSS功能要弱化一些,有一些属性和选择器,QSS并没有。 Qt中的各个控件可以使用QSS来实现界面的个性化定制、美化,使用起来也是特别方便的。 二、Q…

QTreeWidget样式qss

文章目录 QTreeWidget/QTreeView样式QHeaderView背景属性alternate-background-color:交替背景色background:背景属性background-color:控件的背景色background-image:用于控件的背景图像。如果图像有透明部分则显示透明部分。bac…

qss文件使用

每个控件提供的样式太少?只能简单的设置颜色、字体颜色、字体大小?每次设置都要输入好长一串好麻烦? 现在你只要写一段qss就能满足你的一切需求,实现效果如下 本文将从下面三个方向慢慢阐述qss的使用 1、如何使用qss 2、如何修…

QSS 基础

如果你会 CSS,那么 QSS 对你来说将会非常简单,QSS 的语法和 CSS 的愈发非常相似,但也有些不同,有些 CSS 的东西在 QSS 里被去掉了,QSS 也加了些自己特有的东西,不过大多数还是差不多的,下面以修…

Qt QSS使用

一、选择器类型 Qt QSS选择器和CSS2、CSS3的选择器类似,建议先学习或者复习一下CSS选择器的语法。QSS虽然和CSS类型,但有也稍许不同,而且支持的语法也没那么多,具体讲解如下。 1.1 类选择器 /* 匹配QPushButton的实例及其子类 …

QSS 介绍

目录 一、自定义 widget 的两种方式二、一个简单示例三、QSS 比 QPalette 强大四、使用 Qt Designer 方便查看 qss 效果 一、自定义 widget 的两种方式 自定义 widget 外观的方式有两种: 子类化 QStyle;使用 Qt Style Sheets 机制; Qt Sty…

学习QSS样式表

文章目录 一、 什么是QSS二、辅助工具三、Qt样式表设置函数:setStyleSheet四、Qss选择器1、通用选择器2、类型选择器3、类选择器4、ID选择器5、后代选择器6、子元素选择器7、属性选择器8、并集选择器9、子控件选择器10、伪类选择器11、选择器的匹配规则 五、QSS常用…

QSS自定义属性

1.基本使用 &#xff08;参见 Qt 文档页章节 Setting QObject Properties&#xff1a;https://doc.qt.io/qt-5/stylesheet-syntax.html&#xff09; 从 Qt 4.3 及更高版本开始&#xff0c;可以使用 qproperty- <属性名称> 语法设置任何 designable 的 Q_PROPERTY &…

QSS

摘自&#xff1a;https://qtdebug.com/qtbook-qss/ Qt 提供的 widget 的默认外观很多时候都不符合项目的界面需求&#xff0c;必须要改&#xff0c;修改一个 widget 的外观&#xff08;Look and Feel&#xff09;有以下的方法&#xff1a; 继承 Widget&#xff0c;然后在 pai…