oracle_利用闪回功能恢复数据
方便起见一般:执行如下即可不用往下看:
① 启用行移动功能
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_利用闪回功能恢复数据的更多相关文章
- 利用闪回查看Oracle表历史时刻数据
利用闪回查看Oracle表历史时刻数据 1.查看表历史时刻数据 select * from tab_test AS OF TIMESTAMP to_timestamp('20140917 10:00: ...
- 【Oracle】Oracle 10g利用闪回挽救误删的数据
我们在开发和运维过程中,经常遇到数据被误删除的情况.无论是在应用开发中的Bug,还是修改数据的时候,如果提交了错误数据修改结果,会带来很多问题.一般来说,一旦提交commit事务,我们是不能获取到之前 ...
- Oracle 中利用闪回查询确定某表在某时间点之后的修改内容,并恢复至该时间点
Oracle 中利用闪回查询确定某表在某时间点之后的修改内容: 1.查看 DELETE 及 UPDATE 操作修改的数据: SQL> SELECT * FROM tab AS OF TIMEST ...
- 【DG】利用闪回数据库(flashback)修复Failover后的DG环境
利用闪回数据库(flashback)修复Failover后的DG环境 1.1 BLOG文档结构图 1.2 前言部分 1.2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能, ...
- Oracle 闪回 找回数据的实现方法
Oracle 闪回 找回数据的实现方法 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复.这篇文章主要介绍了Oracle 闪回 找回 ...
- Flashback Version Query、Flashback Transaction Query快速闪回细粒度数据
Flashback Version Query 闪回版本查询 使用Flashback Version Query 返回在指定时间间隔或SCN间隔内的所有版本,一次commit命令就会创建一个版本. ...
- Oracle 闪回 找回数据
使用闪回技术,实现基于磁盘上闪回恢复区的自动备份与还原. 一.恢复表对象 1.创建学生表 create table STUDENT ( idno INTEGER, name VARCHAR2(30), ...
- oracle flashback data archive闪回数据归档天坑之XID重用导致闪回查询数据重复
我们有个系统使用了Oracle flashback data archive闪回数据归档特性来作为基于时间点的恢复机制,在频繁插入.更新期间发现SYS_FBA_HIST_NNNN表中的XID被两个事务 ...
- binlog2sql闪回恢复数据
用途: .数据快速回滚 .从binlog生成标准sql 使用限制: .必须设置binlog_format=ROW .binlog_row_image=full,该参数默认为FULL .恢复用户拥有的最 ...
随机推荐
- Android Framework 其中A记录
一个简短的引论 以往的研究太偏应用层的功能,实现了,原则上不进入非常理解,现在,研究人员framework该框架层. 创纪录的 1.下载源代码,文件夹例如以下: 2.Android系统的层次例如以下: ...
- VB高清图标制作方法
我隆重介绍一个软件:ResHacker !!! 这个软件可以修改软件的很多东西包括图标和标题,下面看**作. 运行ResHacker打开要更改图标的exe文件, 图标组--1--右键0--替换资源-- ...
- [生产环境数据恢复]innobackupex: fatal error: OR no 'datadir' option in group 'mysqld' in MySQL options
1 运行恢复命令 [xxx@xxx-c001db1 tmp]$ time /usr/bin/innobackupex --rsync --user="user" --passwo ...
- Java泛型Restletclient
写一个与restletserver通信的client类.用于測试通信是否成功.而且进行交互.为了方便其它人使用.于是,写一个通用的方法封装起来,但是中途却放生了一些问题. 依照正常写法,顺序走下来是这 ...
- 采用WindowManager添加您自己的自定义视图
原文地址:使用WindowManager加入自己定义视图 在写手机卫士的时候,用户拨打|接听电话须要显示号码归属地,然后出现了一些异常.在此留下记号,希望对麻友们有帮助: BUG教程 在使用 view ...
- net开发过程中Bin目录net开发过程中Bin目录下面几种文件
.net开发过程中Bin目录下面几种文件格式的解释 在.NET开发中,我们经常会在bin目录下面看到这些类型的文件: .pdb..xsd..vshost.exe..exe..exe.config..v ...
- The C5 Generic Collection Library for C# and CLI
The C5 Generic Collection Library for C# and CLI https://github.com/sestoft/C5/ The C5 Generic Colle ...
- XCL-Charts画一个图(CurveChart)
情节线图与往常不同的是,它是一个比较特殊线位置计算.所以我得到一个单独的类.相同.只需要输入数据源的基类, 加,控制要添加的.你可以画出你自己主动设置按照预期的效果. 代码: //图基类 chart ...
- 观察者模式(observer行为)c#简单的例子
观察者模式(observer行为)c#简单的例子 几点:模式使观察目标和实现松耦合之间的依赖关系.通知会传播自己主动 样本:玩家击中后发生一系列变化的敌人:后发爆炸.敌人少1一个.... namesp ...
- 大约sql声明优化
最近做的mysql数据库优化,并sql声明优化指南.我写了一个小文件.这种互相鼓励有关! 数据库参数获得的性能优化升级都在一起只占数据库应用系统的性能改进40%左右.其余60%的系统性能提升所有来自相 ...