Oracle Flashback特性(二)

来源:互联网 发布:java短信验证码接口 编辑:程序博客网 时间:2024/05/25 08:14

Flashback table演示:

       闪回表要用到UNDO表空间信息,是一个删除新数据,重新插入老数据的过程,因此row movement的属性要打开。

SQL> select * from lihm.t;

  ID MSG

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

   1 aaa

   2 bbb

   3 ccc

SQL> select current_scn from  v$database;

CURRENT_SCN

-----------

    2235951

SQL> delete lihm.t;

已删除3 行。

SQL>commit;

提交完成。

SQL> select * from lihm.t;

未选定行

SQL> flashback table lihm.t to scn 2235951;

flashbacktable lihm.t to scn 2235951

                     *

第1 行出现错误:

ORA-08189:因为未启用行移动功能,不能闪回表

SQL> alter table lihm.t enable row movement;

表已更改。

SQL> flashback table lihm.t to scn 2235951;

闪回完成。

SQL> select * fromlihm.t;

  ID MSG

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

   1 aaa

   2 bbb

   3 ccc

或者

FLASHBACK TABLE lihm.t

TO TIMESTAMP TO_TIMESTAMP('2013-10-17 09:30:00', 'YYYY-MM-DD HH:MI:SS');

 

Flash backdrop演示:

        当一个表删除的时候,与之相关的空间并没有被删除,他只是被重命名并放在回收站中了,flash backdrop就是基于回收站找回数据的。

SQL> show parameter recyclebin;

NAME                     TYPE    VALUE

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

recyclebin              string   on

SQL> select owner,object_name,original_name,type from dba_recyclebin;

未选定行

SQL>select * from lihm.t;

    ID MSG

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

     1 aaa

     2 bbb

     3 ccc

SQL> drop table lihm.t;

表已删除。

SQL> select owner,object_name,original_name,type from dba_recyclebin;

OWNER     OBJECT_NAME             ORIGINAL_N TYPE

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

LIHM       BIN$4+Tzos//X1LgQycCqMBD7A==$0 T      TABLE

SQL> select * from lihm.t;

select* from lihm.t

                   *

第1 行出现错误:

ORA-00942:表或视图不存在

SQL> flashback table lihm.t to before drop;

闪回完成。

SQL> select * from lihm.t;

    ID MSG

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

     1 aaa

     2 bbb

     3 ccc

   

 

Flashback Database演示:

        闪回数据库是通过撤销对数据修改的方法来完成的,完成闪回要达到以下条件

1)  没有数据文件丢失或损坏

2)  不能闪回到控制文件重建之前

  查看闪回特性是否启用:

    SQL> select flashback_on from v$database;

FLASHBACK_ON

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

NO

启用闪回特性:

    SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE例程已经关闭。

SQL> startup mount

ORACLE例程已经启动。

TotalSystem Global Area 1636814848 bytes

FixedSize          2288968 bytes

VariableSize       1006633656 bytes

DatabaseBuffers      620756992 bytes

RedoBuffers            7135232 bytes

数据库装载完毕。

SQL> alter database flashback on;

数据库已更改。

SQL> alter database open;

数据库已更改。

SQL> selectflashback_on from v$database;

FLASHBACK_ON

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

YES

查看闪回窗口时间:

    SQL> SELECT OLDEST_FLASHBACK_SCN,OLDEST_FLASHBACK_TIME FROM

        V$FLASHBACK_DATABASE_LOG;

OLDEST_FLASHBACK_SCNOLDEST_FLASHBACK_TI

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

        2258659 2013-08-14 16:28:44

创建还原点:

    Normalrestore point:

     SQL> create restore point test1;

     还原点已创建。

 

    Guaranteerestore point

    SQL> create restore point test2guarantee flashback database;

    还原点已创建。

 

查看还原点类型:

    SQL>l

  1 SELECT NAME, SCN, TIME,

  2     DATABASE_INCARNATION#,

  3     GUARANTEE_FLASHBACK_DATABASE

  4*  FROM V$RESTORE_POINT

SQL>/

 

NAME         SCN TIME                      DATABASE_INCARNATION# GUARAN

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

TEST2        2260674 14-8月 -1304.49.20.000000000 下午             2 YES

TEST1        2259852 14-8月 -1304.36.32.000000000 下午             2 NO

 

RMAN也可以查看还原点:

RMAN>list restore point all;

SCN              RSP 时间   类型       时间       名称

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

2259852                                14-8月-13 TEST1

2260674                     GUARANTEED 14-8月-13 TEST2

 

下面我们还原到最早的时间:

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE例程已经关闭。

SQL> startup mount

ORACLE例程已经启动。

TotalSystem Global Area 1636814848 bytes

FixedSize          2288968 bytes

VariableSize       1006633656 bytes

DatabaseBuffers      620756992 bytes

RedoBuffers            7135232 bytes

数据库装载完毕。

SQL> SELECTOLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME FROM

  2 V$FLASHBACK_DATABASE_LOG;

 

OLDEST_FLASHBACK_SCNOLDEST_FLASHBA

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

        2258659 14-8月 -13

SQL> flashback databaseto scn 2258659;

闪回完成。

SQL> select * fromlihm.t;

select* from lihm.t

                   *

第1 行出现错误:

ORA-01219:数据库或可插入数据库未打开:仅允许在固定表或视图中查询

SQL> alter database open read only;

数据库已更改。

SQL> select * fromlihm.t;

    ID MSG

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

     1 aaa

     2 bbb

     3 ccc

    至此数据库已经闪回并打开,我们可以把丢失数据找回来,或openresetlogs打开,如果想flashback到更早的时间,只要日志支持就可以执行flashback database to scn xxx命令来实现,如果想恢复到闪回前的状态,可以使用recover database命令.

 

查看闪回日志可以用:

    SQL>  select name,bytes,type from V$FLASHBACK_DATABASE_LOGFILE;

NAME                          BYTES TYPE

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

/u01/oracle/fast_recovery_area/ORCL/flas   52428800 NORMAL

hback/o1_mf_90phxvgz_.flb

/u01/oracle/fast_recovery_area/ORCL/flas   52428800 RESERVED

hback/o1_mf_90phxyvp_.flb

关闭闪回数据库特性前,最好删除相应还原点,再删除flashback log,不然下次启动时会检测闪回日志。