Oracle Flashback之flashback table
一,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相关推荐
- Oracle Flashback之Flashback table和flashback drop
在Oracle 10g中, Flash back家族分为以下成员: Flashback Database Flashback Drop Flashback Table Flashback Query( ...
- Oracle回收站及flashback drop
Oracle回收站及flashback drop 一.1 BLOG文档结构图 一.2 前言部分 一.2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你 ...
- Oracle回收站及flashback drop(上)
Oracle回收站及flashback drop(上) 一.1 BLOG文档结构图 Oracle回收站及flashback drop - 3 - 1.1 BLOG文档结构图 - 3 - 1.2 前言 ...
- oracle 10g delete flashback,10g新特性,flashback系列 来自piner
一 Flashback database falshback database是采用日志 falsgback drop是采用表空间的空间 其它的都是与undo有关... fashback是我对10g一 ...
- oracle flashback database,flashback database 使用及注意事项
适用版本:10.2+(9i+可能也适用) 读者阅读前提: 1. 知道flashback 2. 知道oracle 的启动模式和基本系统视图 v$database中的flashback_on Oracle ...
- 【Flashback】Flashback Database闪回数据库功能实践
[Flashback]Flashback Database闪回数据库功能实践 上一篇 / 下一篇 2012-04-07 21:16:40 / 个人分类:备份与恢复 查看( 278 ) / 评论( 2 ...
- Flashback Query, Flashback Version Query
[Oracle 9i & 10g] Flashback Query, Flashback Version Query, Flashback Table, etc Oracle 9i 引入了fl ...
- 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 ...
- oracle flashback database,Flashback Database
在Flashback Database中创建基于guarantee的restore point,是可以进行快速备份和恢复的方法.这对于RAT中的播放之后的数据库恢复特别有用! 下面的notes详细描述 ...
最新文章
- openstack-dbs
- html div中怎么引入另一个html文件
- Android中的APinner2
- WebApiClient的JsonPatch局部更新
- 数据离散化 - 等宽等频聚类离散 - Python代码
- GitHub推出云端IDE,可在浏览器里使用VS Code了
- SAP屏幕设计器专题:表格控件属性的设定(七)
- 华为eNSP BUG——Serial线配置ACL问题
- 编码人员和美工的配合问题
- 内网穿透工具,微信支付支付宝支付的沙箱接口回调地址
- 三菱plc控制电动推杆
- android 火车购票功能,12306 火车票订票
- Youtube羽翼丰满 欲摆脱运营商自建移动版网站
- Win7任务管理器显示不全问题解决办法
- 2022 裁员风潮着实有点大,席卷全球~
- 新星计划·第三季 | 更好的总结、创作
- 基于微信小程序的高校图书共享平台
- 凶残的挖矿脚本,奴役我数千机器!
- Codeforces Round #835 (Div. 4) B. Lost Permutation
- MQTT协议——什么是MQTT(一)