/*

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简单,有可能数据丢失。

*/

Oracle的数据恢复——Flashback用法汇总的更多相关文章

  1. Oracle中group by用法

    Oracle中group by用法 在select 语句中可以使用group by 子句将行划分成较小的组,一旦使用分组后select操作的对象变为各个分组后的数据,使用聚组函数返回的是每一个组的汇总 ...

  2. Oracle to_date()函数的用法

    Oracle to_date()函数的用法 to_date()是Oracle数据库函数的代表函数之一,下文对Oracle to_date()函数的几种用法作了详细的介绍说明,供您参考学习. 在Orac ...

  3. Oracle 中 decode 函数用法

    Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译 ...

  4. Oracle trunc()函数的用法

    Oracle trunc()函数的用法 /**************日期********************/1.select trunc(sysdate) from dual --2013-0 ...

  5. oracle之to_char,to_date用法

    [转载自]http://www.jb51.net/article/45591.htm 这篇文章主要介绍了oracle中to_date详细用法示例,包括期和字符转换函数用法.字符串和时间互转.求某天是星 ...

  6. oracle获取本月第一天和最后一天及Oracle trunc()函数的用法

    select to_char(trunc(add_months(last_day(sysdate), -1) + 1), 'yyyy-mm-dd') "本月第一天", to_cha ...

  7. oracle正则表达式regexp_like的用法详解

    oracle正则表达式regexp_like的用法详解 /*ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与IN ...

  8. oracle中to_date详细用法示例(oracle日期格式转换)

    这篇文章主要介绍了oracle中to_date详细用法示例,包括期和字符转换函数用法.字符串和时间互转.求某天是星期几.两个日期间的天数.月份差等用法 TO_DATE格式(以时间:2007-11-02 ...

  9. Oracle trunc()函数的用法--来着心静禅定ing

    1.TRUNC(for dates) TRUNC函数为指定元素而截去的日期值. 其具体的语法格式如下: TRUNC(date[,fmt]) 其中: date 一个日期值 fmt 日期格式,该日期将由指 ...

随机推荐

  1. HTML5游戏引擎Phaser初体验

    首发:个人博客,更新&纠错&回复 一个小小的游戏在这里,试试看能不能过关?提示一下,方向键走路,空格键发炮,每发炮弹消耗12个积分,变大情况下可以发炮. 每秒60次的循环重绘,在其中判 ...

  2. android 学习随笔十七(服务 )

    1.Service 四大组件之一 运行于后台,没有前台界面的组件,用于运行需要在后台运行的代码 可以理解为没有前台的Activity 定义方式:创建java类继承Service,清单文件中注册该类 p ...

  3. android 学习随笔十(网络:get、post提交数据)

    1.get public class Tools { public static String getTextFromStream(InputStream is){ byte[] b = new by ...

  4. python通过win32api轻松获取控件的属性值

    1.如何利用句柄操作windows窗体 首先,获得窗体的句柄  win32api.FindWindows() 第二,获得窗体中控件的id号,spy++ 第三,根据控件的ID获得控件的句柄(hwnd)  ...

  5. linux设备驱动归纳总结(四):4.单处理器下的竞态和并发【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-67005.html linux设备驱动归纳总结(四):4.单处理器下的竞态和并发 xxxxxxxxxx ...

  6. java几道简单的面试题目

    1.   请问以下程序会输出什么? public   class   Test   {  public   static   void   main(String[]   args)   {  Par ...

  7. ORACLE 日期函数

    ORACLE 日期函数 SYSDATE  当前的数据库系统时间 ADD_MONTHS(加减指定的月份) MONTHS_BETWEEN(取两个日期之间相隔的月数) LAST_DAY(取指定日期所在月的最 ...

  8. PHP中关于 basename、dirname、pathinfo 详解

    basename(url)      返回路径中的文件名部分. dirname(url)       返回路径中的目录名称部分. pathinfo(url)      返回关于文件路径的信息. bas ...

  9. WPF:获取控件内的子项

    一.界面内容(部分:仅供参考) <Window> <Window.Resources> <!--工具数据源--> <XmlDataProvider x:Key ...

  10. 搭建LAMP

    RPM包和源码包存放位置 /usr/local/src 源码包编译安装位置 /usr/local/apache /usr/local/mysql /usr/local/php 默认MySQL 数据库位 ...