FlashBack Query

flashback query  是oracle 9i 之后推出来的一个特性,借助它,我们有可能很方便的恢复误操作(dml 操作)之前的数据。
   简单的说,flashback query 允许你查看过去某个时间点的数据,比如说,你可以查看5分钟,或一个小时之前的某个表的数据。这样的话,通过过去数据和现在实际数据的对比,我们就可以很容易的得到误操作所影响到的数据。
  flashback 闪回是要用到 undo 的,因此,关于undo_retention 参数的设置和 flashback query 特性是有关系的。
undo_retention 基本上(10g 有特性保证绝对保证) 保证了受dml 影响的数据前影像在undo segment 中至少保留多长时间,那么这个时间保留的越长,允许你flashback query 至过去时刻的范围就越大。undo_retention 要适当设置。

不多说了,看例子。

总的来说,有两个2,第一个2 是说, flashback query 的特性可以使用scn 或者timestamp 来 指定要闪回的时间点;第二个2 是说,flashback query 有两种形式的用法,一种是  select 后面的 as of , 一种是 通过 dbms_flashback 包的 enable_at_time 或者 enable _at_system_change_number 来指定过去的时间点。


SQL> desc  test
 名称                                      是否为空? 类型
 ----------------------------------------- -------- -------------------------

 ID                                                 NUMBER

SQL> set time on
23:07:24 SQL> select *  from test;

        ID
----------
         1
         2
         3
         4
         5
         6
         7
         8
         9
        10
        11

已选择11行。

23:07:29 SQL> delete  from  test;

已删除11行。

23:07:53 SQL> commit;

提交完成。

23:08:00 SQL> select *  from test;

未选定行

23:08:03 SQL> select *  from test as of timestamp (sysdate - 1/1440);               -- 查看一分钟之前的数据

        ID
----------
         1
         2
         3
         4
         5
         6
         7
         8
         9
        10
        11

已选择11行。

23:08:28 SQL> select dbms_flashback.get_system_change_number from dual;    --获得当前的scn 号

GET_SYSTEM_CHANGE_NUMBER
------------------------
                  699693

23:08:52 SQL> select *  from test as of scn 699690;

未选定行

23:09:05 SQL> select *  from test as of scn 699666;

未选定行

23:09:14 SQL> select *  from test as of scn 699600;

        ID
----------
         1
         2
         3
         4
         5
         6
         7
         8
         9
        10
        11

已选择11行。

23:09:23 SQL>

 

-- 可以从如下的语句中大致判断下 scn 是在什么时间范围
SQL> select sequence#,first_change#,next_change#,to_char(first_time,'YYYYMMDD HH24:MI:SS')  FROM v$log_history;

 SEQUENCE# FIRST_CHANGE# NEXT_CHANGE# TO_CHAR(FIRST_TIME,'YYYYMMDDHH
---------- ------------- ------------ ------------------------------
         1        534907       565899 20080411 23:19:27
         2        565899       573451 20080411 23:23:10
         3        573451       612334 20080411 23:28:57
         4        612334       639840 20040101 00:07:31
         5        639840       661519 20080413 10:00:18
         6        661519       688384 20080413 21:44:24

6 rows selected

SQL>

 

-- 下面是 dbms_flashback 包的方式
23:16:52 SQL> connect dbmgr
输入口令:
已连接。
23:17:00 SQL> exec  dbms_flashback.enable_at_time(sysdate-20/1440);

PL/SQL 过程已成功完成。

23:17:21 SQL> select *  from sys.test;

        ID
----------
         1
         2
         3
         4
         5
         6
         7
         8
         9
        10

已选择10行。

23:17:32 SQL> exec  dbms_flashback.disable;

PL/SQL 过程已成功完成。

23:17:43 SQL> select *  from sys.test;

未选定行


本文出处:http://blog.csdn.net/kongkongye/archive/2008/04/15/2292341.aspx

 

 

 

 

Oracle 10g 中FlashBack的增强

     从ORACLE 9I开始,ORACLE 引入FLASHBACK QUERY特性,10g对这个性能加以增强

 

1. Flashback database

2. Flashback drop

3. Flashback versions QUERY

4. Flashback Transaction QUERY

5. Flashback Table

不过除了 Flashback database 是基于Flashback log 其他都是基于UNDO DATA.

Flashback drop 提供虚拟回收站,允许删除对象重建。

Flashback versions QUERY, Flashback transation QUERY 用语识别或确定要恢复到当前状态的数据行。

Flashback Table 用于恢复单独的表,比如错误的更新了表。

 

Flashback database 能使整个数据库闪会至特定的时间点,闪会数据库不能对删除数据文件,缩小数据文件恢复,闪回数据库比传统恢复速度更快。

1. flashback 不能解决媒介故障。

2. 数据文件截断。

3. 不能删除表空间并并resetlogs恢复

4. 不能超出回的界限.(SCN时间点)

Flashback area 通过数据库初始文件建立,文件保留长度由RMAN的保留策略决定.

RMAN CONFIGURE RETENTION POLICY 决定.

Alter system set db_recovery_file_dest_size=10M scope=Both;

Alter system set db_recovery_file_dest=’C:oraceflash_recovery_Areaora_t’;

Alter system set db_recovery_file_dest_size=’25M’;--改变flashback area大小.

Alter system set db_recovery_file_dest=’’ 停用flashback area

 

配置闪回数据库,数据库必须为归档模式:

connect / as sysdba ;

startup mount ;

alter database set db_flashback_retention_target=4320;(分钟为单位,也就是3)

alter database flashback on;

alter database open;

 

RMAN中用flashback database 就很简单:

select oldest_flashback_scn,oldest_flashback_time from v$flashback_database_log可以得到时间或SCN,然后数据库重启动到MOUNT状态:

flashback database to time/scn (to sequence thread number)

alter database open resetlogs;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值