利用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能闪回多久,利用ORACLE的闪回功能恢复数据相关推荐

  1. oracle ods平台建立,如何利用Oracle表分区技术建设ODS平台

    龙源期刊网 http://www.wendangwang.com 如何利用Oracle表分区技术建设ODS平台作者:李永强 来源:<电脑知识与技术>2010年第11期 摘要:该单位目前要在 ...

  2. oracle工作每月1号,利用oracle定时任务生成每月从1开始的流水号

    --创建序列 --入库 create sequence rk_seq; --出库 create sequence ck_seq; --移库 create sequence yk_seq; --创建存储 ...

  3. oracle里有limit怎么用,[ORACLE]ORACLE 实现mysql中的limit 功能

    [ORACLE]ORACLE 实现mysql中的limit 功能 项目从mysql迁移到ORACLE中遇到移植问题,mysql中支持limit 而ORACLE say no . 解决方法 利用ORAC ...

  4. oracle 一个实例创建多个数据库_Oracle闪回,为你的数据库上一个安全防线

    概述 Oracle 9i 开始支持闪回,Oracle10g开始全面支持闪回功能,Oracle11g有所完善,为我们快速的恢复数据,查询历史数据提供了很大的便捷方法. 今天主要对Oracle常用闪回使用 ...

  5. oracle 闪回空间爆满,基于ORA-19815闪回空间爆满问题的处理方法

    下面小编就为大家分享一篇基于ORA-19815闪回空间爆满问题的处理方法,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 闪回区爆满问题也是经常会遇到的问题,最关键的是闪回设置大小以及 ...

  6. oracle9i能闪回吗,[转]Oracle 9i的闪回查询概述

    key words: Oracle闪回 flash 1.Oracle 9i的闪回查询功能 在Oracle 9i之前,如果用户错误操作数据后,除了不完全恢复外,没有好的解决办法.Oracle 9i中提供 ...

  7. oracle时间戳找回数据库,【备份恢复】 闪回数据库(三) 基于时间戳闪回数据库...

    1.创建测试表,并插入测试数据 SCOTT@PROD1>create table fbdb_time as select * from fbdb_scn where 1=2; Table cre ...

  8. Oracle的闪回特性之恢复truncate删除表的数据

    /* 2008/06/06 *环境:Windows XP +Oracle10.2.0.1 *循序渐进oracle--数据库管理.优化与备份恢复 *循序渐进oracle第8章:Oracle的闪回特性之恢 ...

  9. 【转载】oracle闪回技术详解之闪回drop(神奇的flashback)

    写在前面:删库跑路,相信这是绝大多数程序员会经常听到的一个词.俗话说:常在河边走,哪有不湿鞋,作为经常和数据打交道的程序员也好,运维实施也好,有时难免会出现数据误删除,误操作等情况.如果你是一个ora ...

最新文章

  1. java虚拟机(二)
  2. java数组二分查找_java 13-1 数组高级二分查找
  3. Java小青蛙跳台街,青蛙跳台阶问题:Java版,递归算法和循环
  4. LAMP+LNMP(三)Apache(httpd)安装实践
  5. java第一句_Java如何开始第一个项目?
  6. Mybatis批量删除Oracle语句,mybatis-oracle(ssi2)批量删除
  7. 如何在network monitor中查找试图建立TCP连接的帧?
  8. 微信小程序 获取php值,微信小程序如何获取javascript里的数据
  9. 一款超级炫酷的编辑代码的插件 Power Mode
  10. 拼多多打印订单有哪些软件?哪个软件好用呢?
  11. 需求分析报告或需求调研报告和需求规格说明书有什么区别?
  12. 整理了20个数据可视化大屏,源码限时领取!
  13. 利用标准差剔除异常数据
  14. 检查xml写的格式是否正确的方法
  15. 没赶上互联网,也没赶上移动互联网,微软到底赶上了什么?
  16. Purism向linux手机开炮
  17. PS5连接OPPO K9电视不支持2160P/4K
  18. 什么是Tomcat?Tomcat是什么意思?
  19. Docker安装Jenkins
  20. MD5算法和SHA-1算法

热门文章

  1. iphone11 的静音设计有问题
  2. java调用uaa接口认证过,如何实现SpringCloud中独立UAA与其他Micro-Service微服务的缓存设计?...
  3. VulnHub渗透实战Billu_b0x
  4. Linux中的程序和进程的概念,PID和PPID的区别
  5. 计算机用户账户好处,用户账户在电脑中起什么作用?
  6. 截取mat文件一部分数据
  7. 备受瞩目 | 烤仔2019世界区块链大会行程集锦
  8. Android手机应用接口大全
  9. 类变量,局部变量,实例变量
  10. IntelliJ IDEA 生成变量名快捷键