oracle闪回技术总结之闪回查询(DML)

我们需要把时间显示出来set time on;就可以显示出时间。先把表delete删除,然后在插入几行数据。

 

SQL> set time on;

SQL> create table emp1 as select * from scott.emp;

01:27:52 SQL> delete from emp1;

14 rows deleted.

01:28:44 SQL> commit;

Commit complete.

01:29:10 SQL> insert into emp1 select * from scott.emp whererownum<=3;

3 rows created.

01:29:22 SQL> commit;

Commit complete.

01:30:25 SQL> select count(*) from emp1;

  COUNT(*)

----------

 3

我们需要闪回查询出,时间为上面的操作时间,在01:27:52delete删除的emp1这个表。然后,你在需要确定一下数据库的年月日,我这里的年月日就是今天20151123日。

01:35:03SQL> select * from emp1 as of timestampto_timestamp('2015-11-23 01:27:52','yyyy-mm-dd hh24:mi:ss');

 

     EMPNO ENAME     JOB               MGRHIREDATE              SAL        COMM          DEPTNO

-------------------- --------- ---------- ------------ ---------- ---------- ----------

      7369 SMITH     CLERK              790217-DEC-80              800                      20

      7499 ALLEN     SALESMAN              769820-FEB-81             1600         300              30

      7521 WARD      SALESMAN              769822-FEB-81             1250         500              30

      7566 JONES     MANAGER              783902-APR-81             2975                      20

      7654 MARTIN    SALESMAN              769828-SEP-81             1250        1400              30

      7698 BLAKE     MANAGER              783901-MAY-81             2850                      30

      7782 CLARK     MANAGER              783909-JUN-81             2450                      10

      7788 SCOTT     ANALYST              756619-APR-87             3000                      20

      7839 KING       PRESIDENT          17-NOV-81             5000                      10

      7844 TURNER    SALESMAN              769808-SEP-81             1500           0              30

      7876 ADAMS     CLERK              778823-MAY-87             1100                      20

 

     EMPNO ENAME     JOB               MGRHIREDATE              SAL        COMM          DEPTNO

-------------------- --------- ---------- ------------ ---------- ---------- ----------

      7900 JAMES     CLERK              769803-DEC-81              950                      30

      7902 FORD      ANALYST              756603-DEC-81             3000                      20

      7934 MILLER    CLERK              778223-JAN-82             1300                      10

14 rowsselected.

这时,我们已经闪回查询看到了在01:27:52时的emp11的表了。

 

这时我们需要把查询出来的结果,放在一个新表中保存,这个新表需要自己创建然后插入。新表的名字是epm1_bak

01:38:02 SQL> create table emp1_bak as select * from emp1 as oftimestamp to_timestamp('2015-11-23 01:27:52','yyyy-mm-dd hh24:mi:ss');

 

Table created.

 

之前我们在emp1中,又插入了三条不要的垃圾数据,这时把原来那三条数据truncate掉。

01:38:21 SQL> select count(*) from emp1;

  COUNT(*)

----------

 3

01:39:38 SQL> truncate table emp1;

Table truncated.

 

这时候emp1的表数据已经清空了,我们在把新表epm1_bak的数据插入到emp1中即可,数据已经得到了恢复

01:39:44 SQL>insert into emp1 select * from emp1_bak;

 

14 rows created.

查看一下emp1的数据总数,应该为原来的14条。

01:40:52 SQL> select count(*) from emp1;

  COUNT(*)

----------

14

 


你可能感兴趣的:(oracle)