`

闪回表(Flashback table)运用

SQL 
阅读更多

上一回演示了运用闪回表查询恢复delete删除的数据以及其原理,今天了解下闪回表。

原理:

  闪回表(Flashback table)与闪回查询(Flashback query)的原理大致相同,也是利用undo信息来恢复表对象到以前的某一个时间点(一个快照),因此也要确保AUM有足够的Retention值。但闪回表不等于闪回查询,其区别如下:

闪回查询只是查询以前的一个快照而已,并不改变当前表的状态。

闪回表则是将恢复当前表及附属对象一起回到以前的时间点。

特性:

1.  在线操作

2.  恢复到指定的时间点(或者SCN)的任何数据

3.  自动恢复相关属性

4.  满足分布式的一致性

5.  数据的一致性,所有相关对象将自动一致。

语法:

 SQL> flashback table tab_test to timestamp to_timestamp('2010-06-30 22:43:07', 'yyyy-mm-dd hh24:mi:ss');

 SQL> flashback table tab_test to scn 1154953;

 SQL> flashback table tab_test to timestamp to_timestamp('2010-06-30 22:43:07', 'yyyy-mm-dd hh24:mi:ss') enable triggers;

运用闪回表前提

  1.普通用户中需要有Flashback any table的系统权限。命令如:

  SQL>grant flashback any table to scott;

  2.有该表的select、insert、delete、alter权限。

  3.必须保证该表有row movement(行移动)。

示例:

 1.创建tab_test表

SQL> create table tab_test as select * from all_objects;

Table created

2.查询tab_test表中数据量

SQL> select count(*) from tab_test;

 COUNT(*)

----------

    40699

3.为tab_test表创建索引和触发器(触发器为null,不做任何操作)

SQL> create index ind_test on tab_test(object_name);

Index created

SQL> create or replace trigger tr_test

 2 after update on tab_test

 3 for each row

 4 begin

 5     null;

 6 

 7 end tr_test;

 8 /

Trigger created

4.记录当时的时间点,试图恢复到该时间点

SQL> select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') time, to_char(dbms_flashback.get_system_change_number) scn from dual;

TIME               SCN

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

2010-06-30 23:02:37 1160764

5.删除tab_test表中数据

SQL> delete from tab_test;

40699 rows deleted

SQL> commit;

Commit complete

6.查询删除数据后的tab_test,确定其表中已没有数据

SQL> select count(*) from tab_test;

 COUNT(*)

----------

7.删除tab_test表中索引ind_test

SQL> drop index ind_test;

Index dropped

8.更改tr_test触发器

SQL> create or replace trigger tr_test

 2 after insert on tab_test

 3 for each row

 4 begin

 5     null;

 6 

 7 end tr_test;

 8 /

Trigger created

9.确保该表中的行迁移(row movement)功能

SQL> alter table tab_test enable row movement;

Table altered

10.恢复tab_test表到刚记录的时间点(或scn),由于表中存在触发器,因此使用了关键字enable triggers;

SQL> flashback table tab_test to timestamp to_timestamp('2010-06-30 23:02:37', 'yyyy-mm-dd hh24:mi:ss') enable triggers;

Done

11.查看恢复结果如下:

SQL> select count(*) from tab_test;

 COUNT(*)

----------

    40699

SQL> select index_name from user_indexes where table_name = 'TAB_TEST';

INDEX_NAME

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

SQL> select object_name, status from user_objects where object_name in('TR_TEST', 'IND_TEST');

OBJECT_NAME                                                                     STATUS

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

TR_TEST            VALID

SQL> set pages 0

SQL> set lines 1000

Cannot SET LINES

SQL> set long 2000

SQL> select text from user_source t where t.name = 'TR_TEST' order by line;

trigger tr_test

after insert on tab_test

for each row

begin

   null;

end tr_test;

总结:

1. Flashback table在真正的高可用环境中,使用意义不大,受限比较多,要必须确保行迁移功能

2. Flashback table过程中,阻止写操作

3. 表中数据能恢复,而表中索引确不能正常恢复

4. 恢复的触发器本身还是修改后的,并不随表flashback到修改以前的时间点。说明关键字enable triggers只能保证触发器的状态正常,而不是内容回滚.

5. 由于原理利用其undo信息,来恢复其对象,因此也是不能恢复truncate数据

6. 恢复数据用flashback query实现比较好

分享到:
评论

相关推荐

    第16章Oracle闪回(Flashback)技术.pptx

    3. 闪回表(Flashback Table) 闪回表可以将表恢复到过去的某个时间点或某个 SCN 值时的状态。该功能允许选择性地复原某些对象,减小恢复时间。 4. 闪回查询(Flashback Query) 闪回查询可以查询过去某个时间点...

    oracle flashback特性(闪回语句,闪回表,闪回数据库).doc

    Flashback Query 的实现依赖于 undo 表空间的大小,如果闪回的数据量过大,回滚段不够,则会抛出异常。 二、Flashback Table Flashback Table 是 Oracle Flashback 特性中的一部分,它允许用户快速地恢复到一个表...

    Oracle 闪回特性 FLASHBACK & RECYCLEBIN

    Flashback 系列是 Oracle 数据库中的一组功能强大且实用的闪回机制,旨在帮助数据库管理员和开发者快速恢复数据库中的各种对象,包括表、数据、事务等。Flashback 系列的功能可以追溯到 Oracle 9i 版本,并在后续...

    Oracle闪回(Flashback)技术.pptx

    6. 闪回表(Flashback Table):将表恢复到过去的某个时间点或某个 SCN 值时的状态。 闪回数据库的结构是由恢复写入器(RVWR)后台进程和闪回数据库日志组成的。如果要启动闪回数据库功能,RVWR 进程也要启动。闪回...

    oracle 闪回 flashback

    Oracle 10g引入了多种闪回功能,包括Flashback Database、Flashback Drop、Flashback Query以及Flashback Table。 1. **Flashback Database**: - Flashback Database允许用户将整个数据库恢复到过去的一个特定...

    Oracle_FlashBack闪回技术

    2. **闪回表**:使用`FLASHBACK TABLE table_name TO TIMESTAMP TO_TIMESTAMP('YYYY-MM-DD HH24:MI:SS', 'YYYY-MM-DD HH24:MI:SS');`恢复到指定时间点的数据。 #### 六、闪回版本查询 闪回版本查询允许查询表中数据...

    oracle flashback闪回技术

    其次,Flashback Table是用于恢复整个表到先前的状态,这包括表结构和数据。如果一个管理员不小心使用DROP TABLE命令删除了表,可以通过Flashback Table来恢复。命令格式为`FLASHBACK TABLE table_name TO BEFORE ...

    MySQL Flashback闪回功能详解.docx

    MySQL Flashback 闪回功能详解 MySQL Flashback 是 MySQL 中的一种闪回功能,用于快速恢复由于误操作丢失的数据。在 DBA 误操作时,可以把数据库恢复到以前某个时间点(或者说某个 binlog 的某个 pos)。Flashback ...

    oracle中关于flashback闪回的介绍

    ### Oracle Flashback 闪回技术详解 #### 一、引言 在Oracle数据库管理中,闪回技术(Flashback)是一种非常重要的数据恢复工具。它允许用户和管理员以一种简单而有效的方式,恢复误删、误改的数据。本文将详细介绍...

    flashback闪回技术

    ### Flashback闪回技术 #### 一、概述 Flashback技术是Oracle数据库中一项重要的数据恢复工具,它基于Undo Segment中的内容实现,并受到UNDO_RETENTION参数的影响。要使用这项特性,用户必须启用自动撤销管理表...

    oracle_闪回15分钟前的数据操作写法

    Oracle闪回技术主要包括以下几种类型:闪回查询(Flashback Query)、闪回表(Flashback Table)、闪回事务查询(Flashback Transaction Query)、闪回数据库(Flashback Database)和闪回删除(Flashback Drop)。...

    oracle 闪回已删除的表

    除了基本的恢复操作外,Oracle还提供了更高级的闪回表功能,以便于处理更为复杂的情况: 1. **闪回多个版本的表**: - 当多次删除并重建同一个表时,可以在恢复时选择恢复为特定版本的表。 - 示例:创建并删除表...

    Oracle闪回技术详解

    闪回表(Flashback Table)可以将某个表回退到过去某个时间点。工作原理是Oracle会先去查询撤销段,提取过去某个时间点之后的所有变更,构造反转这些变更的SQL语句进行回退。闪回表操作是一个单独的事务,所以若由于...

    Oracle 误删除后的闪回方法

    2. **闪回表(Flashback Table)** 当需要恢复整个表时,可以使用`FLASHBACK TABLE`命令。它将表恢复到最近的删除或重命名操作前的状态。但请注意,这个操作仅适用于DDL操作,且需要在删除或重命名后立即执行,因为...

    BLOG_Oracle_lhr_利用闪回数据库(flashback)修复Failover后的DG环境.pdf

    - **闪回表(Flashback Table)**: 允许表恢复到过去某个时间点的状态。 - **闪回查询(Flashback Query)**: 可以查询过去某个时间点的数据。 #### 3. Failover与Switchover的区别 - **Failover**: 当主数据库...

    利用oracle 闪回技术恢复数据

    3. **闪回表(Flashback Table)**:如果只是个别表出现了问题,可以使用闪回表功能快速恢复。通过`FLASHBACK TABLE`命令,可以将表恢复到之前的状态,包括其结构和数据。 4. **闪回事务(Flashback Transaction)*...

Global site tag (gtag.js) - Google Analytics