专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

「方法」被delete table后,记住这个找回方法,没准能救你命

ins518 2024-11-07 11:48:36 技术文章 11 ℃ 0 评论

一、背景

前几天,一个开发人员在测试环境处理数据,有一个操作是清空一个表(del table)。数据库是用的Oracle数据库,他用PL/SQL devloper客户端连接了多个数据库,同连接了生产的库。可执行delete table操作时,发现客户端连接的是生产的数据库。

我去,接到通知的我万丈怒火,真想拿个程序员祭天。在简单了解了下情况之后,看着那小伙快哭的眼神,我压制了心中的怒火。


二、处理步骤

知道情况后,立马让运维把生产应用停掉,防止新的数据产生,出现后期的数据混乱情况。在得知数据库是Oracle11g之后,心中闪过一丝希望。Oracle不是有一个闪回功能?(flashback table)。

闪回查询是Oracle数据库独有的功能,支持在设定时间内对包括行、事务、表、和数据库在内的恢复操作,最实用的功能就是可以在数据库保持联机状态时恢复数据

首先看一下是否开启了该功能:

select flashback_on from v$database;

发现显示是YES,哈哈,心中开心的不行。接着问了下删除数据的时间点,开始恢复数据。根据时间点,开始将查询后的数据恢复到一个临时表:

insert 临时表 select * from emp as of timestamp to_timestamp('2019-01-09 10:00:45','YYYY-MM-DD HH24:MI:SS')

to_timestamp是要查询数据的时间点。

让开发人员检查了下数据对不对,确认是对的。然后将临时表的数据导入正式时,重启应用。搞定!全程用了10多分种。真是有惊无险啊,后期还针对这种情况做出了管理上的调整及培训教训。从根本上解决此类问题。

当然Oracle闪回还有很多种用法,这里只是提供一种思路,细节可自行百度。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表