方便起见一般:执行如下即可不用往下看:

 ① 启用行移动功能

 alter table tbl_a  enable row movement;

 ② 闪回表数据到某个时间点

 flashback table tbl_a   to timestamp to_timestamp('2013-07-19 15:10:00','yyyy-mm-dd hh24:mi:ss');

 详解:

 利用ORACLE的闪回功能恢复数据

 一、 闪回表数据

     从9i开始,Oracle提供了闪回(FLASHBACK)功能。使用FLASHBACK TABLE语句从撤消段中(undo segment)读取该表的过去映像,并利用Oracle9i中引入的回闪查询重建表行。UNDO_RETENTION给出了闪回支持的最小时间。也就是说,FLASHBACK最少可以支持UNDO_RETENTION给出的时间,如果系统比较闲,则可以闪回更长的时间。(当然,如果回滚表空间的空间分配不足,当系统处于忙时,有可能重用还没有达到UNDO_RETENTION时间限制的数据的空间)。使用闪回的一个前提是表不能进行DDL操作。不但不能对DDL操作进行回闪,而且,也无法闪回到DDL操作以前的数据了。

 SQL> select * from v$version;

 BANNER

 ----------------------------------------------------------------

 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

 PL/SQL Release 10.2.0.1.0 - Production

 CORE    10.2.0.1.0      Production

 TNS for 32-bit Windows: Version 10.2.0.1.0 - Production

 NLSRTL Version 10.2.0.1.0 – Production

 --获得系统变更号

 C:\Documents and Settings\linyuefeng>sqlplus /nolog

 SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 10月 26 20:41:28 2006

 Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 SQL> conn scott/scott@ora10g;

 已连接。

 SQL> var scn number

 SQL> exec :scn :=dbms_flashback.get_system_change_number

 PL/SQL 过程已成功完成。

 SQL> print scn

        SCN

 ----------

 914958

 SQL> select count(*) from emp;

   COUNT(*)

 ----------

         14

 SQL> delete from emp;

 已删除14行。

 SQL> select count(*) from emp;

   COUNT(*)

 ----------

          0

 SQL> commit;

 提交完成。

 SQL> select count(*) from emp as of scn :scn;

   COUNT(*)

 ----------

         14

 SQL> flashback table emp to scn :scn;

 flashback table emp to scn :scn

                 *

 第 1 行出现错误:

 ORA-08189: 因为未启用行移动功能, 不能闪回表

 SQL> alter table emp enable row movement;

 表已更改。

     这个命令的作用就是允许ORACLE修改分配给行的rowid。在ORACLE中,插入一行时就会为它分配一个rowid,而且这一行永远拥有这个rowid。闪回表处理时会对EMP表完成DELETE 操作,并且重新插入行,这样就会为这些行分配一个新的rowid。要支持闪回功能就必须允许ORACLE执行这个操作。

 SQL> flashback table emp to scn :scn;

 闪回完成。

 SQL> select count(*) from emp;

   COUNT(*)

 ----------

         14

 ---也可以通过时间进行闪回

 SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')  TIME from dual;

 TIME

 -------------------

 2006-10-26 20:55:48

 SQL> select count(*) from emp;

   COUNT(*)

 ----------

         14

 SQL> delete from emp;

 已删除14行。

 SQL> commit;

 提交完成。

 SQL> flashback table emp to timestamp to_date('2006-10-26 20:55:48','yyyy-mm-dd

 hh24:mi:ss');

 闪回完成。

 SQL> select count(*) from emp;

   COUNT(*)

 ----------

         14

 二、 闪回删除的表

     flashback drop特性从Oracle10g开始才有的,这个新特性,允许你从当前数据库中恢复一个被drop了的对象。在执行drop操作时,现在Oracle不是真正删除它,而是将该对象自动将放入回收站(一个虚拟的容器,用于存放所有被删除的对象)。对于一个对象的删除,ORACLE的操作仅仅就是简单的重令名而已。

     在回收站中,被删除的对象将占用创建时的同样的空间,可以利用flashback功能来恢复它, 这个就是flashback drop功能。

 SQL> create table emp_test as select * from emp;

 Table created

 SQL> drop table emp_test;

 Table dropped

     当一个表被删除并移动到"回收站"中,它的名字要进行一些转换。这样的目的显而易见是为了避免同类对象名称的重复。

 SQL> select owner,object_name,original_name,DROPTIME from dba_recyclebin order by droptime;

 OWNER  OBJECT_NAME                       ORIGINAL_NAME      DROPTIME

 ------------------------------ ------------------------------

 SCOTT   BIN$rtpdTNe6SIysmO+ZB0t3aQ==$0    EMP_TEST          2006-10-26:22:23:06

 SQL> create table emp_test as select * from emp;

 Table created

 SQL> drop table emp_test;

 Table dropped

 SQL> select owner,object_name,original_name, DROPTIME from dba_recyclebin order by droptime;

 OWNER  OBJECT_NAME                     ORIGINAL_NAME   DROPTIME

 ------------------------------ ------------------------------

 SCOTT  BIN$rtpdTNe6SIysmO+ZB0t3aQ==$0  EMP_TEST        2006-10-26:22:23:06

 SCOTT  BIN$roQhkx6tQneThvaRlsjrhw==$0  EMP_TEST        2006-10-26:22:23:50

 --使用flashback table 进行恢复,默认恢复最近删除的表

 SQL> flashback table emp_test to before drop;

 Done

 SQL> select owner,object_name,original_name,DROPTIME from dba_recyclebin order by droptime;

 OWNER   OBJECT_NAME                      ORIGINAL_NAME   DROPTIME

 ------------------------------ ------------------------------

 SCOTT   BIN$rtpdTNe6SIysmO+ZB0t3aQ==$0   EMP_TEST        2006-10-26:22:23:06

 --也可以指定表名进行恢复

 SQL> flashback table "BIN$rtpdTNe6SIysmO+ZB0t3aQ==$0" to before drop;

 flashback table "BIN$rtpdTNe6SIysmO+ZB0t3aQ==$0" to before drop

 ORA-38312: 原始名称已被现有对象使用

     此时被恢复的表名称仍然采用以前的名字,我们之前已经恢复一次EMP_TEST,所以现在恢复就出现了重名,不过可以为其指定新的名字。

 SQL> flashback table "BIN$rtpdTNe6SIysmO+ZB0t3aQ==$0" to before drop rename to emp_test2;

 Done

 SQL> select table_name from user_tables where table_name like '%EMP_TEST%';

 TABLE_NAME

 ------------------------------

 EMP_TEST

 EMP_TEST2

 --删除回收站里的对象,不能使用DROP命令进行删除,必须使用PURGE命令

 SQL> drop table emp_test;

 Table dropped

 SQL> drop table emp_test2;

 Table dropped

 SQL> select owner,object_name,original_name,DROPTIME from dba_recyclebin order by droptime;

 OWNER   OBJECT_NAME                      ORIGINAL_NAME    DROPTIME

 ------------------------------ ------------------------------

 SCOTT   BIN$M4Q0Pb94SOWSFGarOpI5Og==$0   EMP_TEST         2006-10-26:22:46:07

 SCOTT   BIN$7P+osQdjSs+5CcSXBc0NAA==$0   EMP_TEST2        2006-10-26:22:46:10

 SQL> drop table "BIN$M4Q0Pb94SOWSFGarOpI5Og==$0";

 drop table "BIN$M4Q0Pb94SOWSFGarOpI5Og==$0"

 ORA-38301: 无法对回收站中的对象执行 DDL/DML

 SQL> purge table "BIN$M4Q0Pb94SOWSFGarOpI5Og==$0";

 Done

 SQL> select owner,object_name,original_name,DROPTIME from dba_recyclebin order by droptime;

 OWNER    OBJECT_NAME                     ORIGINAL_NAME    DROPTIME

 ------------------------------ ------------------------------

 SCOTT    BIN$7P+osQdjSs+5CcSXBc0NAA==$0  EMP_TEST2        2006-10-26:22:46:10

 --删除整个回收站里的对象

 SQL> purge recyclebin;

 Done

 SQL> select owner,object_name,original_name,DROPTIME from dba_recyclebin order by droptime;

 OWNER    OBJECT_NAME                     ORIGINAL_NAME    DROPTIME

 ------------------------------ ------------------------------

 未选定行

oracle_利用闪回功能恢复数据的更多相关文章

  1. 利用闪回查看Oracle表历史时刻数据

    利用闪回查看Oracle表历史时刻数据 1.查看表历史时刻数据 select * from tab_test AS OF TIMESTAMP to_timestamp('20140917 10:00: ...

  2. 【Oracle】Oracle 10g利用闪回挽救误删的数据

    我们在开发和运维过程中,经常遇到数据被误删除的情况.无论是在应用开发中的Bug,还是修改数据的时候,如果提交了错误数据修改结果,会带来很多问题.一般来说,一旦提交commit事务,我们是不能获取到之前 ...

  3. Oracle 中利用闪回查询确定某表在某时间点之后的修改内容,并恢复至该时间点

    Oracle 中利用闪回查询确定某表在某时间点之后的修改内容: 1.查看 DELETE 及 UPDATE 操作修改的数据: SQL> SELECT * FROM tab AS OF TIMEST ...

  4. 【DG】利用闪回数据库(flashback)修复Failover后的DG环境

    利用闪回数据库(flashback)修复Failover后的DG环境 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能, ...

  5. Oracle 闪回 找回数据的实现方法

    Oracle 闪回 找回数据的实现方法 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复.这篇文章主要介绍了Oracle 闪回 找回 ...

  6. Flashback Version Query、Flashback Transaction Query快速闪回细粒度数据

    Flashback Version Query 闪回版本查询 使用Flashback Version Query  返回在指定时间间隔或SCN间隔内的所有版本,一次commit命令就会创建一个版本. ...

  7. Oracle 闪回 找回数据

    使用闪回技术,实现基于磁盘上闪回恢复区的自动备份与还原. 一.恢复表对象 1.创建学生表 create table STUDENT ( idno INTEGER, name VARCHAR2(30), ...

  8. oracle flashback data archive闪回数据归档天坑之XID重用导致闪回查询数据重复

    我们有个系统使用了Oracle flashback data archive闪回数据归档特性来作为基于时间点的恢复机制,在频繁插入.更新期间发现SYS_FBA_HIST_NNNN表中的XID被两个事务 ...

  9. binlog2sql闪回恢复数据

    用途: .数据快速回滚 .从binlog生成标准sql 使用限制: .必须设置binlog_format=ROW .binlog_row_image=full,该参数默认为FULL .恢复用户拥有的最 ...

随机推荐

  1. 程序员联盟有自己的论坛啦!基于Discuz构建,还不来注册~

    我把程序员联盟网站的论坛建好了,哈哈哈.用的是Discuz这个腾讯旗下的中文bbs建设软件.正在完善论坛,添加各种模块和应用.大家可以先去注册一下:coderunity.com/bbs/forum.p ...

  2. C++使用对象指针

    //定义结构 Box.h: #ifndef BOX_H #define BOX_H struct Box{ double length; double width; double height; do ...

  3. OpenStack路: OpenStack建筑设计指南 - 概要(摘录和翻译)

    OpenStack它是在云技术领先的黄金工艺,作为一个组织,使各类企业,具有较大的灵活性和速度被发现,向市场推出自助服务云计算和基础架构即服务(IaaS)积.然,为了能够真正享受到这些好处,云计算必须 ...

  4. jconsole 连接 eclipse启动项

    eclipse 启动java项目默认情况下不开启jmx远程观看,假设需要看看内存使用情况对项目执行的线程等信息,能eclipse添加启动参数: -Dcom.sun.management.jmxremo ...

  5. mysql出现Data truncated for column

    1.首先叙述,描述你自己的问题. 假设你想把同意为空值的勾去掉.. .恰巧数据库中的数据 processed_f 为空没有值. . . .这时候你对数据表结构做更改的时候就会出现Data trunca ...

  6. SynchronousQueue、LinkedBlockingQueue、ArrayBlockingQueue性能测试(转)

    听说JDK6对SynchronousQueue做了性能优化,避免对竞争资源加锁,所以想试试到底平时是选择SynchronousQueue还是其他BlockingQueue. 对于容器类在并发环境下的比 ...

  7. Finding awesome developers in programming interviews(转)

    英文原文:Finding awesome developers in programming interviews 我曾在一次面试中要求一个很有经验的嵌入式软件开发人员写出一个反转一段字符串并输出到屏 ...

  8. Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)

    本文将讲解如何做一个类似MyEclipse启动画面的闪屏,为Java Swing应用程序增添魅力. 首先看一下效果图吧, 原理很简单,就是创建一个Dialog,Dialog有一个进度条和一个Label ...

  9. 第一次QQ群视频教育有感

    标题:第一次QQ群视频教育有感 作者:丁又专, 时间:2014.08.16     教育的目的:启示学生心智,发现个人优势,激发探索欲望.     今天早上看到 中国大学MOOC<文献管理与信息 ...

  10. Android中集成第三方库的方法和问题

    Android中集成第三方库的方法和问题 声明: 1. 本文參考了网上同学们的现有成果,在此表示感谢,參考资料在文后有链接. 2. 本文的重点在第三部分,是在开发中遇到的问题及解决的方法.第一,第二部 ...