<span style="font-size:18px;">   oracle 自9i之后增加了flashback特性,本来想自己总结下关于这个知识点,但是看到<a target=_blank target="_blank" href="http://blog.chinaunix.net/uid-74941-id-3180228.html">http://blog.chinaunix.net/uid-74941-id-3180228.html</a>,<a target=_blank target="_blank" href="http://blog.csdn.net/chenweitang123/article/details/6163455">http://blog.csdn.net/chenweitang123/article/details/6163455</a>这两位兄台的总结,感觉比自己总结的好很多。所以就学习这两位仁兄的吧。</span>

在使用这个特性的时候要谨记,使用回闪是到万不得已的时候才采取的,平时对数据的操作依旧要小心谨慎。因为回闪和很多参数有关。如果参数设置不正确可能就达不到你想要的效果。比如undo段如果设置的小,而且数据已经commit很长时间,就会遇到ORA-01555:snapshot too old错误。该错误的原因是:你查询之前某个时间段的undo段,但是现在由于某种原因,该undo段信息已经不存在或者被更改了。也就无法完成你想做的回闪。

/*

11g的flashbackup 分好几种,分别用途不一样。

A.flashback database 闪回数据库,简单理解就是把数据库闪回到某个以前的时间点,

能恢复到的最早的SCN, 取决与Flashback Log中记录的最早SCN

B.flashback drop 回收数据库表,用于表误drop后恢复。类似Windows的回收站。

C.flashback query 闪回表记录,用于数据表记录的恢复

D.falshabck Table 闪回数据库表,

后两个是重点,下面说明。

*/

– A.flashback database相关

/*

1.默认情况数据库的flashback database是关闭,可以在mount exclusive状态下打开。

在设置了闪回恢复区后,可以启动闪回数据库功能。

*/

–1.检查是否启动了flash recovery area

show parameter db_recovery_file

–2.检查是否启用了归档

archive log list;

–3.flashback database 默认是关闭的,查看方法

select flashback_on from v$database;

–4.查询当前的scn

SELECT CURRENT_SCN FROM V$DATABASE;

–5.查询当前的时间

select to_char(sysdate,’yy-mm-dd hh24:mi:ss’) time from dual;

–6.查看SCN 和 timestamp 之间的对应关系:

select scn,to_char(time_dp,’yyyy-mm-dd hh24:mi:ss’)from sys.smon_scn_time;

–7.恢复到时间点,或者恢复到SCN

flashback database to timestamp to_timestamp(’09-10-14 14:37:05′,’yy-mm-dd hh24:mi:ss’);

flashback database to scn 947921;

– B. flashback table 恢复误drop表

drop table sphsy.login_table;

select * from flash_table;

–purge table sphsy.login_table;清空回收站

flashback table sphsy.login_table to before drop;

select * from sphsy.login_table;

– C. flashback query 实现行级恢复

/*

flashback查询用于获取先前时间点的表行级数据。当使用flashback查询时,

需要在表名后指定as of timestamp子句或as of SCN子句,其中as of timestamp用于指定早期时间点,

而as of SCN用于指定早期的SCN值,示例如下:

*/

– 1.查原始记录 ,区间内有62 行

select *

from sphsy.login_table a

where a.id > 201204171078

and a.id < 201204171141

order by a.id ;

– 2.晚于区间的有 3016

select program,count(*)

from sphsy.login_table a

where a.id >= 201204171141

group by program ;

–3. 删除

delete from sphsy.login_table a

where a.id > 201204171078

and a.id < 201204171141

–4.利用闪回特性查到区间内,有62行

select * from sphsy.login_table

as of timestamp to_timestamp(’2012-04-17 17:20:30′,’YYYY-MM-DD HH24:MI:SS’)

where id > 201204171078

and id < 201204171141

– 5.不利用闪回特性,直接查询发现没有

select * from sphsy.login_table

where id > 201204171078

and id < 201204171141

– 6.进行数据恢复

– 禁止表上的触发器

alter trigger sphsy.T_INS_LOGIN_TABLE disable ;

– 恢复数据

insert into sphsy.login_table

select * from sphsy.login_table

as of timestamp to_timestamp(’2012-04-17 17:20:30′,’YYYY-MM-DD HH24:MI:SS’)

where id > 201204171078

and id < 201204171141

– 恢复触发器

alter trigger sphsy.T_INS_LOGIN_TABLE enable ;

– 7.晚于区间的数据回来了3130 = 3016 +62 + 后来的数据。实现了区间恢复误删除。

select program,count(*)

from sphsy.login_table a

where a.id >= 201204171078

group by program ;

– D. flashback table 恢复表到先前状态

/*

flashback查询可以用于恢复被误删除的表行数据,但是用户在表上执行了其他的DML语句误操作(insert或update),则不能直接使用flashback查询将表数据恢复到先前时间点,从oracle10g开始,使用flashback table语句可以将表恢复到先前时间点,通过使用该特征,可以避免执行基于时间点的不完全恢复,注意如果要在某个表上使用flashback table特征,则要求必须具有以下条件:

a.用户必须具有flashback any table系统权限或flashback对象权限

b.用户必修在表上具有select insert delete和alter权限

c.必须合理设置初始化参数undo_retention,以确保UNDO信息保留足够时间

d.必须激活行移动特征:alter table table_name enable row movement;

*/

– 1.查原始记录 ,区间内有62 行

select *

from sphsy.login_table a

where a.id > 201204171078

and a.id < 201204171141

order by a.id ;

– 2.晚于区间的有 3074

select count(*)

from sphsy.login_table a

where a.id >= 201204171141;

–3. 删除 ,先记下时间点,2012-04-17 17:43:46

select to_char(sysdate,’YYYY-MM-DD HH24:MI:SS’) from dual ;

delete from sphsy.login_table a

where a.id > 201204171078

and a.id < 201204171141

– 4.删除之后表 sphysy.login_table继续有修改 ,行3082

select count(*)

from sphsy.login_table a

where a.id >= 201204171141;

–5.激活行移动特征

alter table sphsy.login_table enable row movement

–6.利用闪回特性,直接恢复到删除时间点前

flashback table sphsy.login_table to timestamp to_timestamp(’2012-04-17 17:43:46′,’YYYY-MM-DD HH24:MI:SS’);

– 7.晚于区间的数据 回到了3080 ,说明时间点之后的修改丢失。

select count(*)

from sphsy.login_table a

where a.id >= 201204171141

– 8.往前推1分,恢复到删除之前,删除的62条也回来了。

flashback table sphsy.login_table to timestamp to_timestamp(’2012-04-17 17:40:46′,’YYYY-MM-DD HH24:MI:SS’);

– 62 行

select count(*)

from sphsy.login_table a

where a.id > 201204171078

and a.id < 201204171141

– 删除之后的数据为3074,代表还有修改丢失。

select count(*)

from sphsy.login_table a

where a.id >= 201204171141

/*

总结:方法C,方法D均可以用数据恢复。

方法C安全,恢复麻烦。方法D简单,有可能数据丢失。

*/

补充一点小技巧:

select count(*) from t as of timestamp sysdate-1/24;查询一个小时前某个表t的数据
select  sysdate-1/24 from dual;

2013-09-15补充

对flashback一直有几点不是很了解,今天又学习了一下,作为补充。

1.undo表空间与回收站recyclebin.

flashback 大致分为四个级别

1. flashback数据库(将整个数据库恢复到某时点);

2.flashback drop恢复删除的table。

3.flashback  闪回查询 as of 恢复某个表中某些记录;

4.flashback  table。将这个table恢复到之前的某个时点。

这四个级别原理不是完全相同的:

1. flashback数据库(将整个数据库恢复到某时点),基于闪回日志。使用之前需要dba进行配置

–1.检查是否启动了flash recovery area

show parameter db_recovery_file

–2.检查是否启用了归档

archive log list;

–3.flashback database 默认是关闭的,查看方法

select flashback_on from v$database;

由于没有做这个测试,而且说一般恢复整个database 很少使用这个,因此只是简单介绍下。如有遗漏,具体还要再实际操作。
2.flashback drop   这个是恢复误删除的table。是从oracle的回收站中将数据恢复,不是从undo表空间。这也是我之前将二者混淆的地方。
回收站是将删除的表信息保存起来,而undo空间是为了将事务进行回滚,保存之前的数据状态。两者各有各的用处。
3.和4.都是为了恢复表记录或者表到之前的某个状态,因此使用的也是undo表空间。
由此,总结如下:
使用recyclebin回收站 :    flashback table to before drop
使用undo_tbs:       flashback table to timestamp ....
使用undo_tbs:       select text from dba_source as of timestamp...
使用flashback log: flashback database.....
2.关于undo_retention参数:
undo 有几个重要的参数,undo_management、undo_tablespace、undo_retention可以通过show parameter + 参数名进行查看。
        之前对undo_rentention不是很理解,后来才知道,这个参数的单位是秒,意思是在undo空间足够大的情况下,数据最少可以保留多久。所以数据在undo中保存的情况不只是由这个参数决定的。 它只是一个参考。具体还要看undo空间。

SQL> SELECT * FROM DBA_RECYCLEBIN;
OWNER                          OBJECT_NAME                    ORIGINAL_NAME                    OPERATION TYPE                      TS_NAME                        CREATETIME          DROPTIME               DROPSCN PARTITION_NAME                   CAN_UNDROP CAN_PURGE    RELATED BASE_OBJECT PURGE_OBJECT      SPACE
------------------------------ ------------------------------ -------------------------------- --------- ------------------------- ------------------------------ ------------------- ------------------- ---------- -------------------------------- ---------- --------- ---------- ----------- ------------ ----------
SCOTT                          BIN$cyTZoWfNSMmgZkOX78CakQ==$0 TEMP_EMP                         DROP      TABLE                     USERS                          2015-05-14:15:53:43 2015-05-14:15:56:32    2254049                                  YES        YES            75054       75054        75054          8
 
SQL> flashback table scott.TEMP_EMP before drop;
flashback table scott.TEMP_EMP before drop
ORA-00905: 缺失关键字
 
SQL> flashback table scott.TEMP_EMP to before drop;
Done

flashback的用法相关推荐

  1. FLASHBACK TABLE用法介绍

    1.作用 在人为操作或应用程序错误时,使用FLASHBACK TABLE语句恢复表到一个早期状态.表可以闪回到过去的时间点,依赖于系统中撤销数据的数据量.此外,Oracle数据库不能恢复到通过任何DD ...

  2. flashback query、flashback drop、flashback table用法总结

    /*1.FLASHBACK QUERY*/    --闪回到15分钟前  select *  from orders   as of timestamp (systimestamp - interva ...

  3. Oracle Flashback 技术总结

    写在前面: 2009年的时候结合网上的资料整理了下Flashback的用法. 2011年5月份起,把我这几年来的整理的资料又重新进行了一个整理,暂定为<David Dai Oracle 学习手册 ...

  4. oracle flashback 用法,使用Oracle10g Flashback database功能恢复用户错误

    使用Oracle10g Flashback database功能恢复用户错误 $ ps -ef|grep rvwr|grep -v grep oracle 27231 1 0 17:10:30 ? 0 ...

  5. oracle flashback 用法,使用oracle flashback database

    1闪回的方法 使用闪回方法的目的:修正用户错误. 1.1FLASHBACK DATABASE flashback data1base闪回到过去的某一时刻 闪回点之后的所有工作都将丢失 必须使用rese ...

  6. mysql回滚用法_Mysql误操作后利用binlog2sql快速回滚的方法详解

    前言 在日常工作或者学习中,操作数据库时候难免会因为"大意"而误操作,需要快速恢复的话通过备份来恢复是不太可能的,下面这篇文章主要给大家介绍关于Mysql误操作后利用binlog2 ...

  7. flashback使用

    flashback是从oracle9i开始实现的一种恢复功能,完善在10g.10g中利用recyclebin和flashback query功能可以快速的 恢复被误删除的table,也可以flashb ...

  8. Flashback 技术总结(转贴整理)

    Flashback 技术是以Undo segment中的内容为基础的, 因此受限于UNDO_RETENTON参数与UNDO TABLESPACE大小的限制. 要使用flashback 的特性,必须启用 ...

  9. Flashback Query, Flashback Version Query

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

最新文章

  1. 一起谈.NET技术,asp.net控件开发基础(18)
  2. iOS 通知观察者的被调函数不一定运行在主线程
  3. pytorch学习:xavier分布和kaiming分布
  4. mysql Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT
  5. 用户分群模型:如何打造精细化运营基石?
  6. php curl 使用方法,php curl使用方法与步骤
  7. ubuntu和linux服务器,Linux服务器系统CentOS和Ubuntu Server如何选择? | 偶乃秋辰
  8. thinkphp连mysql增删改查_ThinkPHP5.1框架数据库链接和增删改查操作示例
  9. (译)iOS Code Signing: 解惑
  10. 使用RDPWrapper实现多用户远程登录并限制IP
  11. 清华郝景芳:中国教育还欠缺什么?如何弥补当下教育的不足? (公号回复“郝景芳”下载PDF典藏版)
  12. KEIL5下载并安装STM32包
  13. 收益率的标准差怎么算MATLAB,什么是收益的标准差怎样计算呢
  14. matlab|dsolve解决常微分初值与讲解(含实例使用)
  15. IB数学考试真题题型解析
  16. 推荐一款微信小程序《诗词万卷》
  17. 录音实时转写软件哪个好?这三个软件帮你搞定录音如何转文字
  18. 计算机的手机储存在哪里,手机wps文件保存在哪里?
  19. 模糊测试工具Sulley开发指南(1)——安装Sulley(多图,超详细)
  20. vscode中vue代码格式化的相关配置

热门文章

  1. Apache+php安装整理
  2. 说得清的Epoll原理
  3. NV12 和 NV21的区别
  4. Web(万维网)发展简史
  5. Unity入门(一)
  6. Postgresql日期转字符串
  7. Android中HorizontalScrollView的使用
  8. SSL安全连接是什么意思?HTTPS安全登录指的什么?
  9. C语言(C++)打开有规律名称的多个文件,并写入数据
  10. 暴力破解键盘上所有组合的密码需要多久?