您的位置:首页 > 数据库 > Oracle

使用Oracle11g的闪回查询技术解决了一个误DELETE表数据的问题

2014-07-01 14:16 513 查看
使用Oracle11g的闪回查询技术解决了一个误DELETE表数据的问题

一、环境:

数据库版本:Oracle11.2.0.3

操作系统版本:Redhat Linux 企业版5.5

二、问题症状:

今天上午大约10:30左右,业务人员在做业务时,突然发现操作界面中的菜单名称莫名其妙的没有了,后来通知后台数据库维护人员后,查询相关菜单表T_MENU与T_ROLE_MENU表,发现表里面的数据都没了

三、问题分析:

由于菜单表里的数据没有才导致如上问题,初步怀疑有人误操作删除数据后,并提交了,目前还没有时间来查明是谁删除的,恢复数据优先,这里想到了两种方法,由于有RMAN备份,但是由于只是两个表的数据,RMAN为物理备份,恢复起来比较麻烦,由于是Oracle11.2.0.3版本,所以考虑使用闪回查询技术来恢复。

四、解决方案:

由于发现的较为及时,可以考虑使用闪回查询技术来恢复数据,闪回查询技术主要是利用UNDO表空间里的数据来查询出某个表某个时间点之前的数据,取决于UNDO表空间的大小,以及Undo_retention等参数的设置,简单一点说就是如果故障时间长,可能里面的数据就没了,再查询就会报ORA-01555错误,如下所示:


具体的处理方法为如下:

1.利用闪回查询技术查询删除时间点之前的表中数据,下面语句需要根据实际情况来调整时间:

select * from t as of timestamp to_timestamp('2014-07-01 09:35:00', 'yyyy-mm-dd hh24:mi:ss');

2.如果数据都正确后,将数据插入到表中:

insert into t select *
from t as of timestamp to_timestamp('2014-07-01 09:35:00', 'yyyy-mm-dd hh24:mi:ss');
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐