视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
使用闪回查询恢复误删除的数据
2020-11-09 11:56:33 责编:小采
文档


闪回查询通过对回滚段中存储的前镜像数据进行追溯,可以获得变更之前的数据,从而在前镜像被覆盖之前,提供一种快捷的恢复和回退

闪回查询通过对回滚段中存储的前镜像数据进行追溯,可以获得变更之前的数据,从而在前镜像被覆盖之前,提供一种快捷的恢复和回退方式。

闪回特征受到初始化参数UNDO_RETENTION的影响,

ALTER SYSTEM SET UNDO_RETENTION=10800 SCOPE=BOTH; 增大这个参数可能会导致更多的UNDO表空间使用。

在生产环境中修改这样一个参数需要谨慎:

1.尽量在测试后在生产环境中执行某行特定的维护操作。

2.在生产环境空闲时才执行某些特定的维护操作。

在Oracle 10gR1 RAC环境下修改UNDO_RETENTION参数,使用如下命令:

alter system set undo_retention=18000 sid='*';

这条命令直接导致RAC的其他节点挂起,,Oracle记录了一个相关的Bug,Bug号为4220405,Oracle提示不指定具体SID的UNDO_RETENTION修改在该版本中不被支持,可分别修改不同的实例。

通过闪回查询恢复误码删除数据的实例:

数据库运行在归档模式下,可以首先通过V$ARCHIVED_LOG视图来确认数据库的SCN变化:

SQL> col fscn for 99999999999999999999999

SQL> col nscn for 9999999999999999999999

SQL>select name,FIRST_CHANGE# fscn,NEXT_CHANGE# nscn,FIRST_TIME from v$archived_log;

获得当前的SCN

SQL>select dbms_flashback.get_system_change_number fscn from dual;

使用应用用户尝试闪回:

SQL> connect username/password

现在数据:

SQL>select count(*) from hs_passport;

创建恢复表如下:

SQL>create table hs_passport_recov as select * from hs_passport where 1=0;

根据开发人员提供的大致误操作时间,结合V$ARCHIVED_LOG视图,选择适当SCN向前执行闪回查询:

SQL>select count(*) from hs_passport as of scn 12929970422;

尝试多个SCN,获取最佳值(如果能得知具体时间,那么可以获得准备的数据闪回);

SQL>select count(*) from hs_passport as of scn &scn:

最后选择恢复SCN时间点

SQL>insert into hs_passport_recov select * from hs_passport as of scn 129.....

向当前表中补回误码删除的数据并确认数据是否补挤,至此闪回恢复成功。

下载本文
显示全文
专题