关于oracle找回误删数据

对于一个开发而言,在项目即将上线进行上线前测试阶段,这个过程往往会出现一些bug,那么我们一般就会在客户现场去直接解决这些问题。那么客户现场的机器上面我们可能会连接很多的数据库,包括客户生产数据库。有时候在我们连接工作十数小时的时候,由于人过度疲劳,可能会造成误删客户生产数据库的情况,那么一些很重要的数据被我们的一个不小心删除了,对于很多开发者来说,想到更多的大概就是 有没有备份数据库? 把备份数据库重新导一份到生产环境上,等等……那么,如果客户没有备份呢?那么我们该怎么办呢?节点恢复数据库,这就成了不二之选。

那么,接下来就分享一个节点恢复数据库的方法:

-- 1.获取当前数据库存储的节点,这里需要说明一下只要数据库启动,就会一直存储节点
select dbms_flashback.get_system_change_number from dual -- 节点号 199360598464

-- 2.创建一个数据表 存储节点号 和  对应节点号的时候数据库数据条数
create table temp(count int, scn int);

-- 3.创建一个任务 给定一个节点范围 循环节点号和查询当前节点数据库数据条数存入创建的表中
declare
i long :=199360598464;
begin
     for i in 199360597000..199360598464 loop
     insert into temp(scn) valus(i);
     update temp set count=(select count(*) from t_b_note_order as of scn i) where scn=i;
    end loop;
    end;
    
-- 4.查看数据库中存在数据的最大的一个 比如scn=199360598400

--  5.找到了节点号  那么我们可以开始恢复数据了
insert into t_b_note_order select * from t_b_note_order as of scn 199360598400

至此,恭喜你,你的数据已经恢复了

但是还有很多时候,我们是误删数据之后立马就发现误删了数据,这种情况下我们就没有必要建表存储节点号和对应节点号数据条数……

-- 1.获取当前数据库存储的节点,这里需要说明一下只要数据库启动,就会一直存储节点
select dbms_flashback.get_system_change_number from dual -- 节点号 199360598464

-- 2.自己反推部分节点号数据库条数就可以了 
--   查询给定节点号下表数据条数
select count(*) from t_b_note_order as of scn 199360574964

-- 3.找到数据库存在数据的最大节点号 比如199360574964

-- 4.恢复数据
insert into t_b_note_order select * from t_b_note_order as of scn 199360574964

至此,恭喜你,你的数据已经恢复了

注:t_b_note_order 为误删数据表名

虽然我们有方法去恢复误删的数据,但是作为一个程序员,还是需要以谨慎、细心的态度去做好本职工作……

时间: 2024-10-06 09:13:15

关于oracle找回误删数据的相关文章

备库闪回到前一天找回误删数据

因为开发在7月九号凌晨4点删除一条数据,现在交易出现问题,需要检查这条数据当时的状态,历史表没有存这个数据,现在使用备库闪回到删除之前的时间点,找回数据.当时操作没有留记录,所以只写操作过程. 1.查看支持闪回的时间:select oldest_flashback_scn os, to_char(oldest_flashback_time,'YYYYMMDD hh24:mi:ss') ot, retention_target rt,flashback_size fs, estimated_fla

oracle数据库误删数据后,及时闪回恢复数据

删除数据后最好不要进行其他无关操作 ①确定删除数据的时间 ②此语句找出删除的数据:select * from 表名 as of timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss') ③删除的数据重新插入原表:insert into 表名 (select * from 表名 as of timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss')); 要保证主键不重复.

oracle 误删数据的恢复

误删数据的恢复 oracle恢复删除的数据 分为两种方法:scn和时间戳两种方法恢复. 一.通过scn恢复删除且已提交的数据 1.获得当前数据库的scn号 select current_scn from v$database; (切换到sys用户或system用户查询) 查询到的scn号为:1499223 2.查询当前scn号之前的scn select * from 表名 as of scn 1499220; (确定删除的数据是否存在,如果存在,则恢复数据:如果不是,则继续缩小scn号) 3.恢

Oracle误删数据的恢复

Oracle误删数据的恢复,分为两种方法:SCN和时间戳两种方法恢复. 一.通过SCN恢复删除且已提交的数据 1.获得当前数据库的SCN号 select current_scn from v$database; (切换到sys用户或system用户查询) 查询到的SCN号为:1499223 2.查询当前SCN号之前的SCN select * from 表名 as of scn 1499220; (确定删除的数据是否存在,如果存在,则恢复数据:如果不是,则继续缩小scn号) 3.恢复删除且已提交的

找回误删的表和数据

一.找回误删的表 1.在recyclebin(类似于回收站)中查找drop的表:select * from recyclebin order bydroptime desc; 2.恢复表和表数据:flashback table ‘表名’ to before drop:值得注意的是,当一张表被drop两次及两次以上的时候,flashback命令只恢复dropscn大的哪个表.如果在drop表的时候再结束加上purge,如:drop table '表名' purge;,则无法通过flashback命

Oracle误删除表数据后的恢复具体解释

測试环境: SYSTEM:IBM AIX 5L                         Oracle Version:10gR2 1. undo_retention參数的查询与改动 使用show parameter undo命令查看当前的数据库參数undo_retention设置. 显演示样例如以下: SQL> show parameter undo NAME                                 TYPE        VALUE --------------

HBase从入门到精通系列:误删数据如何抢救?

云栖君导读:有时候我们操作数据库的时候不小心误删数据,这时候如何找回?mysql里有binlog可以帮助我们恢复数据,但是没有开binlog也没有备份就尴尬了.如果是HBase,你没有做备份误删了又如何恢复呢? 数据保护 当误删数据发生时候,不管三七二十一,第一要务是进入hbase shell,执行如下命令: 如果误删一张表的有多个family里的数据,需要都执行一下: alter 'tt', { NAME=> 'f1', KEEP_DELETED_CELLS=> TRUE }, { NAME

电脑没有备份而误删数据?这样操作就好!

许多人在储存重要的数据时,或许没有备份数据的习惯,所以当数据丢失的时候才会后悔,怎么没有提前将数据备份起来呢?那么怎样才能将数据成功找回呢?本篇文章告诉你答案. 每天操作电脑处理很多数据,复制粘贴.保存删除是十分常见的操作,因此误删文件也是时常会发生的.在没备份的情况下误删数据怎么恢复?首选迷你兔数据恢复软件来操作. 迷你兔数据恢复软件是一款操作简单,功能强大的万恢复软件.免费恢复数据200M,.是U盘数据恢复,SD卡数据恢复,硬盘数据恢复,移动硬盘数据恢复的佼佼者,堪称数据恢复大师.且支持多种

【转】Oracle当中扫描数据的方法

本文将对oracle当中扫描数据的存取方法进行介绍. 1) 全表扫描(Full Table Scans, FTS) 为实现全表扫描,Oracle读取表中所有的行,并检查每一行是否满足语句的WHERE限制条件一个多块读操作可以使一次I/O能读取多块数据块(db_block_multiblock_read_count参数设定),而不是只读取一个数据块,这极大的减少了I/O总次数,提高了系统的吞吐量,所以利用多块读的方法可以十分高效地实现全表扫描,而且只有在全表扫描的情况下才能使用多块读操作.在这种访