一,Flashback Table功能描述
将数据表恢复到之前的一个时间点或SCN号。
注意:该功能将改变当前表及附属对象统一闪回到之前的一个状态。

二,需要修改的系统参数
undo_management,参数需要是“AUTO”,保证回滚段使用模式是SMU mode
undo_retention,单位是秒,调整可回滚的时间范围
确认系统的相关参数

三,原理
闪回表(Flashback table)与闪回查询(Flashback query)的原理大致相同,也是利用undo信息来恢复表对象到以前的某一个时间点(一个快照),因此也要确

保AUM(automatic undo management)有足够的Retention值。Flashback  table技术是以Undo segment中的内容为基础的, 因此受限于UNDO_RETENTON参数。要

使用flashback 的特性,必须启用自动撤销管理表空间。

但闪回表不等于闪回查询,其区别如下:
闪回查询只是查询以前的一个快照而已,并不改变当前表的状态。
闪回表则是将恢复当前表及附属对象一起回到以前的时间点。

四,特性:
1.  在线操作
2.  恢复到指定的时间点(或者SCN)的任何数据
3.  自动恢复相关属性
4.  满足分布式的一致性
5.  数据的一致性,所有相关对象将自动一致。

五,语法:
 SQL> flashback table flashback_table_test to timestamp to_timestamp('2012-12-29 16:44:17', 'yyyy-mm-dd hh24:mi:ss');
 SQL> flashback table flashback_table_test to scn 662421;
 SQL> flashback table flashback_table_test to timestamp to_timestamp('2012-12-29 16:44:17', 'yyyy-mm-dd hh24:mi:ss') enable triggers;

六,运用闪回表前提
  1,普通用户中需要有Flashback any table的系统权限。命令如:
  2.,有该表的select、insert、delete、alter权限。
  3,必须保证该表有row movement(行移动)。

七,下面是具体的实验:
SQL> show parameter undo

NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
undo_management                      string                 AUTO
undo_retention                       integer                900
undo_tablespace                      string                 UNDOTBS1

1.创建flashback_table_test表
SQL> conn hr/hr
Connected.
SQL> create table flashback_table_test as select * from employees;

Table created.

2.查询flashback_table_test表中数据量
SQL> select count(*) from flashback_table_test;

COUNT(*)
----------
       107

3.为flashback_table_test表创建索引和触发器(触发器为null,不做任何操作)
SQL>create index ind_test on flashback_table_test(employee_id);

SQL> create or replace trigger tr_test
after update on flashback_table_test
for each row
begin
       null;
end
tr_test;
/

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
-------------------------------------- --------------------------------------------------------------------------------
2012-12-29 16:44:17                    662421

oracle 10g可以通过下面得到SCN。
SQL> SELECT current_scn from v$database;

CURRENT_SCN
-----------
     662403

5.删除flashback_table_test表中数据
SQL> delete from flashback_table_test;

107 rows deleted.

SQL> commit;

Commit complete.

6.查询删除数据后的flashback_table_test,确定其表中已没有数据
SQL> select count(*) from flashback_table_test;

COUNT(*)
----------
         0

7.删除flashback_table_test表中索引ind_test

SQL> drop index ind_test;

Index dropped

8.更改tr_test触发器

SQL> create or replace trigger tr_test
after insert on flashback_table_test
for each row
begin
       null;
end
tr_test;
/

Trigger created

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

SQL> alter table flashback_table_test enable row movement;

Table altered

10.恢复flashback_table_test表到刚记录的时间点(或scn),由于表中存在触发器,因此使用了关键字enable triggers;
SQL>  flashback table flashback_table_test to timestamp to_timestamp('2012-12-29 16:44:17', 'yyyy-mm-dd hh24:mi:ss') enable triggers;

Flashback complete.

11.查看恢复结果如下:(数据回来了)
SQL> select count(*) from flashback_table_test;

COUNT(*)
----------
       107

但是索引没有回来
SQL> select index_name from user_indexes where table_name = 'flashback_table_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 line 100
SQL> set long 2000
SQL> select text from user_source t where t.name = 'TR_TEST';
trigger tr_test
after insert on flashback_table_test
for each row
begin
       null;
end
tr_test;

7 rows selected.

总结:

1. Flashback table在真正的高可用环境中,使用意义不大,受限比较多,要必须确保行迁移功能
2. Flashback table过程中,阻止写操作
3. 使用flashback table可以将delete方式删除的表闪回到之前某个时间点,而表中索引却不能正常恢复,因为drop索引的过程是不记录undo的。
4. 恢复的触发器本身还是修改后的,并不随表flashback到修改以前的时间点。说明关键字enable triggers只能保证触发器的状态正常,而不是内容回滚.
5. 由于原理利用其undo信息,来恢复其对象,因此也是不能恢复truncate数据
6. 恢复数据用flashback query实现比较好
7,flashback table功能不能够将被truncate的表内容恢复出来,原因也是truncate操作过程是不记录undo信息。

其他注意:
1.当闪回删除操作之前,如果某个键值如主键被重用,将导致违反主键约束,闪回失败。
2.若闪回所需要的UNDO信息不存在,将引发ORA-08180:no snapshot found based on specified time(未找到基于指定时间的快照)错误
3.如果受闪回影响的记录被其它用户锁定,将引发ORA-00054:resource busy and acquire with NOWAIT specified (资源忙碌)错误
4.表定义在闪回期间不能发生变化,否则导致ORA-01466:unable to read data - table definition has changed(表定义已变化)错误
5.闪回前未启用row movement,将收到ORA-08189: cannot flashback the table because row movement is not enabled 错误
6.对于存在参照关系的情况,建议将主表等一起实施闪回,否则,将收到ORA-02091: transaction rolled back,ORA-02291错误
7.SYS 模式中的表不能使用表闪回技术

Oracle Flashback之flashback table相关推荐

  1. Oracle Flashback之Flashback table和flashback drop

    在Oracle 10g中, Flash back家族分为以下成员: Flashback Database Flashback Drop Flashback Table Flashback Query( ...

  2. Oracle回收站及flashback drop

    Oracle回收站及flashback drop 一.1  BLOG文档结构图 一.2  前言部分 一.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你 ...

  3. Oracle回收站及flashback drop(上)

    Oracle回收站及flashback drop(上) 一.1  BLOG文档结构图 Oracle回收站及flashback drop - 3 - 1.1 BLOG文档结构图 - 3 - 1.2 前言 ...

  4. oracle 10g delete flashback,10g新特性,flashback系列 来自piner

    一 Flashback database falshback database是采用日志 falsgback drop是采用表空间的空间 其它的都是与undo有关... fashback是我对10g一 ...

  5. oracle flashback database,flashback database 使用及注意事项

    适用版本:10.2+(9i+可能也适用) 读者阅读前提: 1. 知道flashback 2. 知道oracle 的启动模式和基本系统视图 v$database中的flashback_on Oracle ...

  6. 【Flashback】Flashback Database闪回数据库功能实践

    [Flashback]Flashback Database闪回数据库功能实践 上一篇 / 下一篇  2012-04-07 21:16:40 / 个人分类:备份与恢复 查看( 278 ) / 评论( 2 ...

  7. Flashback Query, Flashback Version Query

    [Oracle 9i & 10g] Flashback Query, Flashback Version Query, Flashback Table, etc Oracle 9i 引入了fl ...

  8. Oracle PLSQL 导出数据table xx contains one or more CLOB columns 解决方案

    Oracle PLSQL 导出数据table xx contains one or more CLOB columns 解决方案 参考文章: (1)Oracle PLSQL 导出数据table xx ...

  9. oracle flashback database,Flashback Database

    在Flashback Database中创建基于guarantee的restore point,是可以进行快速备份和恢复的方法.这对于RAT中的播放之后的数据库恢复特别有用! 下面的notes详细描述 ...

最新文章

  1. openstack-dbs
  2. html div中怎么引入另一个html文件
  3. Android中的APinner2
  4. WebApiClient的JsonPatch局部更新
  5. 数据离散化 - 等宽等频聚类离散 - Python代码
  6. GitHub推出云端IDE,可在浏览器里使用VS Code了
  7. SAP屏幕设计器专题:表格控件属性的设定(七)
  8. 华为eNSP BUG——Serial线配置ACL问题
  9. 编码人员和美工的配合问题
  10. 内网穿透工具,微信支付支付宝支付的沙箱接口回调地址
  11. 三菱plc控制电动推杆
  12. android 火车购票功能,12306 火车票订票
  13. Youtube羽翼丰满 欲摆脱运营商自建移动版网站
  14. Win7任务管理器显示不全问题解决办法
  15. 2022 裁员风潮着实有点大,席卷全球~
  16. 新星计划·第三季 | 更好的总结、创作
  17. 基于微信小程序的高校图书共享平台
  18. 凶残的挖矿脚本,奴役我数千机器!
  19. Codeforces Round #835 (Div. 4) B. Lost Permutation
  20. MQTT协议——什么是MQTT(一)

热门文章

  1. 百度OCR识别图片文字,解决image format error错误
  2. JZOJ 5603 Xjz
  3. 6.7 广义特征向量与特征空间
  4. jQuery实现简单弹出框
  5. 基于自定义gym环境的强化学习
  6. 递归算法的时间&空间复杂度!
  7. onsubmit和submit()详解
  8. 3D人脸查看器和匹配器
  9. 华为芯片与器件设计工程师_华为芯片与器件设计工程师(实习)一、二面
  10. 移动端网页开发)------响应式网页