SCN提供了Oracle的内部时钟机制,可被看作逻辑时钟,这对于恢复操作是至关重要的
注释:Oracle 仅根据 SCN 执行恢复。
我们首先查询一张表的内容
select*from EMP_TAB t
然后我们将此表中的所有数据删除
deletefrom EMP_TAB;
提交完成后,再次查询此表
查询结果如下:
select*from EMP_TAB t
此时表记录为空
现在我们就要进行SCN的查询以便进行恢复数据(如果知道大概删除时间的话也可以通过语句查询SCN:select 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;
此时的787101即为SCN
我们需要对包括787101及其以前的数字编号进行查询
selectcount(*)from EMP_TAB asofscn787101;
我们看到此SCN号中并无EMP_TAB表数据记录,我们依次进行查询
这时我们可以看到在787000时我们的数据删除记录已存在,因此我们可以用787000来还原误删除的数据记录
利用语句:
insert into EMP_TAB select * from EMP_TAB as of scn 787000;
然后我们可以再次查询该表,看数据记录是否已恢复
此时我们看到数据已恢复完成