- 浏览: 121686 次
- 来自: ...
最近访客 更多访客>>
文章分类
最新评论
-
dwangel:
给messageSource设置属性
<property ...
Spring i18n的better practice(相对于appfuse) -
dwangel:
spring 的message tag有一个属性text,可以 ...
Spring i18n的better practice(相对于appfuse) -
sn201:
awk高级篇
有问题啊!有问题!有问题!有问题!有问题!
i ...
awk文本处理总结(入门,中级,高级) -
happy_javaboy:
...
Log4j日志管理系统简单使用说明
上一回演示了运用闪回表查询恢复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实现比较好
发表评论
-
Oracle性能调优-优化排序操作
2010-08-07 11:37 1148关于Oracle 10g性能方面,谈论最多的就是新的自动工作负 ... -
Oracle中的外连接简单介绍
2006-08-11 09:53 481在讲外连接之前,先举例介绍内连接,也就是一般的相等连接。 s ... -
SQLServer和Oracle常用函数对比
2006-08-11 09:55 340SQLServer和Oracle是大家经常用到的数据库,在此感 ... -
Oracle SQL 内置函数大全
2006-08-24 10:37 524... -
Oracle PL/SQL入门之慨述
2006-09-05 21:14 503一、PL/SQL出现的目的 结构化查询语言(Structur ... -
Oracle:PL/SQL 中如何使用Array
2006-09-18 20:41 615因为在PL/SQL 中并没有数 ... -
java高级编程:基于JNDI的应用开发
2006-10-02 18:08 570基于JNDI的应用开发 ... -
开源技术之Tomcat数据源配置总结
2006-10-06 14:55 579成功配置环境Tomcat5.0.28+ ... -
Java调用存储过程
2006-10-11 14:22 601摘要:本文阐述了怎 ... -
JNDI配置原理详解
2006-10-11 14:55 646最近写书,写到JNDI,到 ... -
ORACLE SEQUENCE的简单介绍
2006-12-28 11:01 723在oracle中sequence就是所 ... -
oracle系统表查询
2007-07-30 17:03 545数据字典dict总是属于Ora ... -
JOB
2007-09-04 17:42 408var jobno number begin sys.db ... -
网络收集:PLSQL常用方法汇总
2007-10-18 14:03 706网络收集:PLSQL常用方法汇总 在SQLPLUS下,实现中- ... -
oracle pl/sql 创建同义词
2007-10-24 11:05 1280CREATE OR REPLACE Procedure Cre ... -
索引分析和比较
2007-11-21 10:20 713转自:http://tb.blog.csdn.net/Trac ... -
ORACLE索引与高性能SQL介绍
2007-11-21 15:05 461转自:http://blog.csdn.net/annicyb ... -
oracle动态游标的简单实现方法
2008-05-27 09:17 738下面就是例子程序 --明细表打印予处理 通用报表: pro ... -
Oracle触发器
2008-05-27 15:22 608是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用 ... -
Oracle体系结构之-Oracle中各种名称
2008-05-31 15:18 767一、数据库名 数据 ...
相关推荐
Oracle闪回(Flashback)技术.pptx
oracle 表恢复 闪回 flashback
oracle flashback特性(闪回语句,闪回表,闪回数据库).doc
第16章Oracle闪回(Flashback)技术.pptx
oracle数据库FLASHBACK系列功能介绍
MySQL Flashback闪回功能详解.docx
为了使 Oracle 数据库从任何逻辑误操作中迅速地恢复...进行了全面扩展,提供了闪回数据库、闪回删除、闪回表、闪回事物及闪回版本查询等功能,本 文将重点说闪回删除、闪回表的使用。(本文使用oracle 版本10.2.0.3.0)
Oracle中FlashBack技术的应用 1: 闪回数据库; 2: 闪回drop掉的表; 3: 闪回对表数据的修改; 4: 闪回版本查询
Flashback 技术是以Undo segment中的内容为基础的, 因此受限于UNDO_RETENTON参数。要使用flashback 的特性,必须启用自动撤销管理表空间。
必须设定undo保留时间足够大以能够重构需要闪回的数据 ALTER SYSTEM SET UNDO_RETENTION=; seconds值是undo数据保持的秒数。 Flashback view是由undo retention interval来限制的。
BLOG_Oracle_lhr_利用闪回数据库(flashback)修复Failover后的DG环境.pdfBLOG_Oracle_lhr_利用闪回数据库(flashback)修复Failover后的DG环境.pdf
Oracle RAC环境下开启FLASHBACK闪回功能.pdf
全面总结和解释了oracle flashback技术的使用,优势以及限制
MySQL闪回(flashback)利用binlog直接进行回滚,能快速恢复且不用停机。本文将介绍闪回原理,给出笔者的实战经验,并对现存的闪回工具作比较。 开胃菜 某天,小明因种种原因,误删了大批线上用户表的数据。他急忙找到...
Flashback Database闪回数据库 使用闪回数据库可以将数据库快速的闪回到过去某个时间点。在启用闪回数据时,会将修改过的块的前映像作为闪回数据库日志保存在闪回恢复区中,如出现逻辑坏块或用户错误操作需要恢复...
FLASHBACK TABLE CF_IMPORT_RULE TO BEFORE DROP; FLASHBACK COMPLETE 您可能感兴趣的文章:Oracle误删除表数据后的数据恢复详解Oracle7.X 回滚表空间数据文件误删除处理方法Oracle7.X 回滚表空间数据文件误删除...