首页 > 数据库 >Oracle误删除数据的恢复

Oracle误删除数据的恢复

时间:2022-12-10 16:04:39浏览次数:49  
标签:误删除 删除 timestamp dd yyyy 恢复 Oracle 数据 select

Oracle误删除数据的恢复

在平时操作数据库时,难免会误删数据,或者表格,这时候不用慌张,按照如下步骤进行恢复:

删除的操作有三种:DELETE和TRUNCATE 只删除数据, DROP则删除整个表(结构和数据)

一、DELETE误删数据的恢复

原理:

  利用oracle提供的闪回方法,如果在删除数据后还没做大量的操作(只要保证被删除数据的块没被覆写),就可以利用闪回方式直接找回删除的数据

具体步骤为:

  确定删除数据的时间(在删除数据之前的时间就行,不过最好是删除数据的时间点)

1、用以下语句找出删除的数据:

select * from 表名 as of timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss')

2、把删除的数据重新插入原表: 

insert into 表名 (select * from 表名 as of timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss'));注意要保证主键不重复。

演示:

1、原始数据

Oracle误删除数据的恢复_数据

2、删除数据

select  to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;--查看当前实时时间
DELETE FROM "student" WHERE "id" = 1;

Oracle误删除数据的恢复_表名_02

3、查询已删除的数据

select * from "student" as of timestamp to_timestamp('2022-12-07 17:33:55','yyyy-mm-dd hh24:mi:ss');

Oracle误删除数据的恢复_Oracle_03

4、恢复数据

  • 第一种:复制这条数据,复制为insert语句,执行插入到表中
  • 第二种:复制表结构,创建一个新表,将这些数据插入到新表中(适用于批量删除,而又不知道删除了哪些数据使用)

二、DROP误删除表数据恢复

原理:

  由于oracle在删除表时,没有直接清空表所占的块,oracle把这些已删除的表的信息放到了一个虚拟容器“回收站”中,而只是对该表的数据块做了可以被覆写的标志,所以在块未被重新使用前还可以恢复。

如果还能记住表名,则可以用下面语句直接恢复:

flashback table 原表名 to before drop

演示:

drop table "student" 
flashback table "student" to before drop

 



标签:误删除,删除,timestamp,dd,yyyy,恢复,Oracle,数据,select
From: https://blog.51cto.com/zhangzhixi/5927713

相关文章

  • oracle 客户端连接VBA模板使用教程
    首先解释一个VBA是什么。VBA全称:VisualBasicforApplications。我这里的是指办公软件excel中的VBA宏功能。Oracle中我们是可以多个客户端访问服务器端的。......
  • 处理oracle 大字符串类型(CLOB)读取
    在数据库读取clob类型返回的list中  如果数据超大 会报错,例如类型超4000,或Long类型只能绑定Long类型的值(大概意思如此)这时需要单独处理下clob类型的数据即可(需要注......
  • 微软官方文件恢复工具Winfr使用测评
    免费又有效的文件恢复工具真的不多,Winfr算是很不错的了,而且还是微软官方提供的文件恢复工具,原版叫WindowsFileRecovery 是命令行的,使用上不太友好,WinfrGUI是基于原版开发......
  • lightdb wal文件误删恢复及归档wal清理
    2021-09-1017:22:42.417183T@startup00000[2021-09-1017:22:42CST]0[9298]LOCATION:StartupXLOG,xlog.c:63472021-09-1017:22:42.417206T@startupXX......
  • Oracle数据库权限学习--表或者是视图不存在
    Oracle数据库权限学习--表或者是视图不存在摘要本文写于:12.1001:00巴西踢的太烂了帮同事看一下补丁执行报错的问题.问题原因很简单.user_all_table能够后去本用......
  • Oracle数据库实现主键自增
    Oracle不同于MySQL,MySQL只需要在Navicat等工具中点个自动递增按钮就能实现主键自增,Oracle需要创建自增序列才能实现Oracle实现主键自增有多种方式,但是需要创建自增序......
  • oracle报错:java.sql.SQLException: An attempt by a client to checkout a Connection
    服务器在跑压力测试,测试的并发大约是3200,(每次数据上传需要两次数据库操作,更新1条记录,批处理插入10条记录,可认为并发为更新3200,插入32000),每10s执行一次,大约跑了两天(周五......
  • oracle数据库实现分页查询
    SELECT*FROM ( SELECT T.*, ROWNUMRN FROM (SELECT*FROM表名WHERE条件)T WHERE ROWNUM<=((currentPage-1)*pageSize+pageSize) )......
  • oracle数据库最后恢复的一招
    如果备份没做好,啥都没的话,找ORACLE很贵,国内有牛人的这个站点可以帮下忙,但也是收费的拉​​​​​......
  • Oracle 数据库锁表问题及相关解决方法
    Oracle数据库锁表问题及相关解决方法问题描述:今天在公司运行服务的时候,需要查询300多万的数据,再进行排序之后放到kafka的消息队列中,供flink进行消费。在服务器上直接......