oracle 表数据误删除后恢复

时间:2021-08-27 15:55:49

SCN提供了Oracle的内部时钟机制,可被看作逻辑时钟,这对于恢复操作是至关重要的
  注释:Oracle 仅根据 SCN 执行恢复。

我们首先查询一张表的内容

select*from EMP_TAB t

oracle 表数据误删除后恢复

然后我们将此表中的所有数据删除

deletefrom EMP_TAB;

提交完成后,再次查询此表

查询结果如下:

select*from EMP_TAB t

oracle 表数据误删除后恢复

此时表记录为空

现在我们就要进行SCN的查询以便进行恢复数据(如果知道大概删除时间的话也可以通过语句查询SCNselect timestamp_to_scn(to_timestamp('2012-09-21 11:06:00','YYYY-MM-DD HH:MI:SS'))from dual;

在sys用户下进行查询

select dbms_flashback.get_system_change_numberfrom dual;

oracle 表数据误删除后恢复

此时的787101即为SCN

我们需要对包括787101及其以前的数字编号进行查询

selectcount(*)from EMP_TAB asofscn787101;

oracle 表数据误删除后恢复

我们看到此SCN号中并无EMP_TAB表数据记录,我们依次进行查询

oracle 表数据误删除后恢复

这时我们可以看到在787000时我们的数据删除记录已存在,因此我们可以用787000来还原误删除的数据记录

利用语句:

insert into EMP_TAB select * from EMP_TAB as of scn 787000;

然后我们可以再次查询该表,看数据记录是否已恢复

oracle 表数据误删除后恢复

此时我们看到数据已恢复完成