Welcome 微信登录

首页 / 数据库 / MySQL / Oracle delete数据后恢复办法示例

1       创建表

SQL>create table wdongh(  2  id  integer,  3  name  varchar2(60)  4  );

2       插入数据

SQL>insert into wdongh values(1,"wdh");1 rowinsertedSQL>insert into wdongh values(2,"xiaoming");1 rowinsertedSQL>insert into wdongh values(3,"hanmei");1 rowinsertedSQL>insert into wdongh values(4,"leilei");1 rowinsertedSQL>select * from wdongh;                     ID               NAME-----------      -----------                      1               wdh                      2               xiaoming                      3               hanmei                      4               leilei

3       删除数据

SQL>delete from wdongh;4 rowsdeletedSQL>commit;CommitcompleteSQL>select * from wdongh;                    ID               NAME-----------      -----------

4       获得当前SCN

Oracle 仅根据 SCN 执行恢复,它定义了数据库在某个确切时刻提交的版本。在事务提交时,它被赋予一个唯一的标示事物的SCN 。获得当前SCN的目的是:可以进行闪回查询尝试.SQL>select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER------------------------                  668754SQL>select count(*) from wdongh as of scn 668754;  COUNT(*)----------         0

5       确定delete时的scn号

5.1   建立一个临时表用于存储在scn为多少的时候执行了delete

SQL>create table temp(count int,scn int); Tablecreated

5.2   往临时表中加入数据

SQL>declare  2  iint :=668700;  3 begin  4  fori in 668700..668754 loop  5   insert into temp (scn) values (i);  6   update  temp set count=(selectcount(*) from wdongh as of scn i) where scn=i;  7  endloop;  8  end;  9  /PL/SQLprocedure successfully completedSQL>commit;Commitcomplete

5.3   查询scn为多少时执行了delete

SQL>select  * from temp where count >0;                                  COUNT                                     SCN------------                   -------------                                      4                                  668700                                      4                                  668701                                      4                                  668702                                      4                                  668703                                      4                                  668704                                      4                                  668705                                      4                                  668706                                      4                                  6687078 rowsselectedSQL>select count(*) from wdongh as of scn 668707;  COUNT(*)----------         4SQL>select count(*) from wdongh as of scn 668708;  COUNT(*)----------         0我们看到在scn为668707时数据还在,即scn为668708就是我们delete的事务号。

6       恢复数据

SQL>insert into wdongh select * from wdongh as of scn 668707;4 rowsinsertedSQL>select count(*) from wdongh;  COUNT(*)----------         4

7       干掉临时表temp

SQL>drop table temp;TabledroppedSQL>commit;Commitcomplete更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12Oracle 10g数据库基础之基本查询语句-下-连接&子查询RAC 在虚拟机上 GSD LSN 经常UNKNOWN 解决办法相关资讯      Oracle入门教程 
  • 使用SQLT来构建Oracle测试用例  (08/28/2014 06:17:41)
  • Oracle AUTOTRACE 统计信息  (02/18/2013 08:25:40)
  • Linux Oracle服务启动&停止脚本与  (12/16/2012 14:42:37)
  • Oracle入门教程:把表和索引放在不  (07/13/2013 11:21:40)
  • Oracle直接路径加载--append的深度  (02/07/2013 08:26:36)
  • Oracle Connect By用法  (12/16/2012 13:36:10)
本文评论 查看全部评论 (0)
表情: 姓名: 字数