ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle的flashback功能

Oracle的flashback功能

原创 Linux操作系统 作者:xz43 时间:2013-06-17 16:10:13 0 删除 编辑
从Oracle 10g开始,通过使用flashback table语句不仅可以快速恢复表,而且也不影响任何其他表空间和其他表。在Oracle 10g中,当执行drop table操作时,表结构和数据不会被立即清除,而是被放在数据库的回收站(Recyclebin)中。如果表段所在表空间足够大,那么其内容可能永远不会被清除,此时通过flashback table可以快速恢复。

SQL>  flashback table emp to before drop;
或者
SQL> flashback table emp to before drop rename to emp3;

其实除了上面的DDL外,DML也可以通过flashback来恢复。

SQL> create table emp(sal number(10,1),id number);

Table created.

SQL> insert into emp values(2000,1);

1 row created.

SQL> insert into emp values(3000,2);

1 row created.

SQL> insert into emp values(3500,3);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from emp;

       SAL         ID
---------- ----------
      2000          1
      3000          2
      3500          3

SQL> select to_char(sysdate,'yyyy-MM-dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY
-------------------
2013-06-17 15:57:52

SQL> update emp set sal=sal*1.1 ;        

3 rows updated.

SQL> commit;

Commit complete.

SQL> select * from emp;

       SAL         ID
---------- ----------
      2200          1
      3300          2
      3850          3

SQL> alter table emp enable row movement;

Table altered.

SQL> update emp set sal=sal*1.1 ;        

3 rows updated.

SQL> commit;

Commit complete.

SQL> select * from emp;

       SAL         ID
---------- ----------
      2420          1
      3630          2
      4235          3

SQL> flashback table emp to timestamp to_timestamp('2013-06-17 15:57:52','yyyy-MM-dd hh24:mi:ss');

Flashback complete.

SQL> select * from emp;

       SAL         ID
---------- ----------
      2000          1
      3000          2
      3500          3

SQL> 

可以看到,即使已经修改过2次,通过flashback table 还是可以把数据表的数据闪回到指定的时间点。唯一需要注意的是,必须激活表的行移动特性。另外,flashback table 所能恢复到的最早时间受限于初始化参数db_flashback_retention_target。
SQL> show parameter db_flashback_retention_target

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target        integer     1440

除了上面的flashback table功能外,从oracle 10g开始,增加了flashback database功能可以将数据库快速恢复到先前时间点。flashback database不能用于恢复介质失败,并且使用flashback database必须满足以下条件:
1)数据库必须处于 ARCHIVELOG 模式
2)必须激活数据库的 flashback 特征
3)必须合理配置初始化参数db_flashback_retention_target,该参数用于控制可以恢复到的最早时间点。
配置数据库支持:
SQL> startup mount
SQL> alter database archivelog;
SQL> alter system set db_recovery_file_dest_size=2g;
SQL> alter system set db_recovery_file_dest='/app/flash_recovery_area';
SQL> alter database flashback on;
SQL> alter system set db_flashback_retention_target=3600;
SQL> alter database open;
虽然激活了数据库的flashback,仍可以禁止特定表空间的flashback特征:
SQL> alter tablespace TEST flashback off;

通过查询试图 v$flashback_database_log 可以确定flashback database命令可以恢复到的最早时间点:
SQL> select oldest_flashback_scn,oldest_flashback_time from v$flashback_database_log;
 
最后,通过SQL或者RMAN方式使用flashback database命令,以及 to scn选择或 to time选项。
SQL> startup mount
SQL> flashback database to scn 199468094;
SQL> alter database open resetlogs;
或者
RMAN> shutdown immediate
RMAN> startup mount
RMAN> flashback database to time ‘2013-08-22 10:20:13’;
RMAN> alter database open resetlogs;
为保险起见,可以先不要以resetlogs的形式打开数据,而是采用read only的方式打开,确认结果不对,则继续flashback,确认结果成功,则用resetlogs的方式打开。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9399028/viewspace-764135/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
鱼儿的学习空间

注册时间:2010-11-16

  • 博文量
    433
  • 访问量
    1863790