今天帮客户直接在数据库删除数据。手一抖一不小心将其他数据给删除掉了。(别提当时心里那个急啊~ )

怎么办?被客户怼两句?No No No

听同事说,Oracle可以将删除的数据找回。然后根据同事的提示,就自行上网百度搜索了一通。方法很简单,就是利用Oracle的快照来快速找回刚刚被自己删除的数据:

-- 创建一个快表将删除修改之前状态的数据找回到这个表中
CREATE TABLE QUICK_TABLE_BKY_201805281037 AS
SELECT * FROM t_user AS OF TIMESTAMP sysdate-1/24;

我在这里找的是一个小时前的,所以就是 当前时间(sysdate)- 一个小时(1/24);如果要退回一天前,那就直接 sysdate-1 ,这样就是一天前的数据。

在我创建的临时表QUICK_TABLE_BKY_201805281037中,我找到了我刚刚不小心删除的数据啦。既然刚刚被我删除的数据找到了,那接下来该怎么做应该就不用我说了吧。

那这个时候有的人可能要问, 不小心删除表这个时候怎么办?不要急,不要慌。如果不小心删除表,在 user_recyclebin中找到最近操作过的表名称,然后用快照(只能用于10G及以上版本)就能快速找到啦:

FLASH BACK TABLE t_user TO BEFORE DROP;

这样就可以快速的找到被删除的t_user表啦 。

扩展一下快照的一些用法:

一、.FLASHBACK QUERY:恢复表数据

方法一: 闪回到15分钟前

select * from orders as of timestamp (systimestamp - interval ''15'' minute) where ......

这里可以使用DAY、SECOND、MONTH替换minute,例如:

SELECT * FROM orders AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL ''2'' DAY)

 

方法二: 闪回到某个时间点

select * from orders as of timestamp to_timestamp (''01-Sep-04 16:18:57.845993'', ''DD-Mon-RR HH24:MI:SS.FF'') where ...

 

方法三: 闪回到两天前

select * from orders as of timestamp (sysdate - 2) where.........

 

二、FLASHBACK DROP:恢复被错误drop掉的表

方法一: 找回已被删除的表

flashback table orders to before drop;

 

方法二: 如果源表已经重建,可以使用rename to子句

flashback table order to before drop rename to order_old_version;

 

三、FLASHBACK TABLE:恢复表到一个早期状态

首先要启用行迁移:

alter table order enable row movement;

方法一: 闪回表到15分钟前

flashback table order to timestamp systimestamp - interval ''15'' minute;

方法二: 闪回到某个时间点

FLASHBACK TABLE order TO TIMESTAMP TO_TIMESTAMP('2007-09-12 01:15:25 PM','YYYY-MM-DD HH:MI:SS AM')

 

标签: Oracle, Oracle数据恢复, Oracle数据误删找回

添加新评论