`
月亮不懂夜的黑
  • 浏览: 151690 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle 闪回操作(flashback)

 
阅读更多

234390216 的留下学习 原文地址 http://haohaoxuexi.iteye.com/blog/1594391

Oracle的闪回功能可以在对数据库进行不完全恢复的情况下,对某一个指定的表进行恢复。闪回数据库是进行时间点恢复的新方法,它能够快速将Oracle恢复到以前的时间,以更正由于逻辑数据损坏或用户错误而引起的问题。当需要恢复时,可以将数据库恢复到错误前的时间点,并且只恢复改变的数据块。

Oracle中的闪回操作包括以下4种:

(1)查询闪回:查询过去某个指定时间、指定实体的数据,恢复错误的数据库更新、删除等。

(2)表闪回:使表返回到过去的某一时间的状态,恢复表、取消对表进行的修改。

(3)删除闪回:可以将删除的表重新恢复。

(4)数据库闪回:可以将整个数据库回退到过去的某个时间点。

1、查询闪回

查询闪回可以查看过去某一时点的任何数据,如果要查询某一表在某一时点的内容,可以把查询目标对象定位为该表在某一时点的表,表在某一时刻的表可以如下表示:

 

Sql代码  收藏代码
  1. table_name as of timestamp real_timestamp; --它作为一个整体表示一个表*/  
 

例如,要查询person表在2012-6-2 19:00:00的状态,可以使用如下语句:

 

Sql代码  收藏代码
  1. select * from person as of timestamp to_timestamp('2012-6-2 19:00:00''yyyy-mm-dd HH24:mi:ss');  
 

知道了表在某一时刻的表之后,我们就可以很容易的把表恢复到某一时刻的样子了,例如我们在2012-6-2 19:00:00这个时候删除了person表中的3条记录,之后我又想把它恢复,那应该如何恢复呢?利用查询闪回我们可以这样操作:

方法一:

第一步,把当前表中的数据全删了:delete from person;

第二步,我们通过查询闪回把2012-6-2 19:00:00这个时点之前的数据拿出来然后插入到当前表中,调用语句如下:

 

Sql代码  收藏代码
  1. insert into person select * from person as of timestamp to_timestamp('2012-6-2 18:59:59''yyyy-mm-dd HH24:mi:ss');  
 

方法二:

先找出从person表中删除的记录,然后再把它们插到person表中,Sql语句如下:

 

Sql代码  收藏代码
  1. insert into person select * from person as of timestamp to_timestamp('2012-6-2 18:59:59''yyyy-mm-dd HH24:mi:ss') p where not exists(select * from person where id=p.id);  
 

因为查询闪回是跟时间有关系的,所以说到这就再说一个设置,在sqlplus中输入set time on语句可以打开时间显示功能,这会使得在每次执行语句后都会在该语句的前面显示该语句的执行时间,使用set time off语句可以关闭该功能。

2、表闪回

利用表闪回可以轻松的取消对表的修改。只有Oracle的企业版才能进行表闪回。

对进行表闪回的表必须row movement为enable。

表闪回的语法格式如下:

 

Sql代码  收藏代码
  1. flashback table [schema.]table_name[,...n] to {[scn] | [timestamp] [[enable | disable] triggers]};  
 

其中,

scn:表示系统改变号,可以从flashback_transaction_query数据字典中查询。

timestamp:表示通过时间戳的形式来进行闪回。

enable|disable triggers:表示触发器恢复之后的状态,默认为disable。

示例代码:

(1)确保需要闪回的表row movement为enable:

 

Sql代码  收藏代码
  1. alter table hello enable row movement;  
 

(2)对表进行闪回:

 

Sql代码  收藏代码
  1. flashback table hello to timestamp to_timestamp('2012-6-3 14:00:00','yyyy-mm-dd HH24:mi:ss');--恢复表到2012-6-3 14:00:00这个时候的样子*/  
 

3、删除闪回

在Oracle数据库中有一个叫recyclebin的回收站,当回收站的功能是启用的时候,被用户drop的对象都会保存在recyclebin中,普通用户可以通过select * from recyclebin;语句查看被自己drop掉的对象的相关信息,当然如果普通用户想查看所有用户的recyclebin信息也是可以的,可以通过查看dba_recyclebin视图,DBA用户不存在recyclebin。来获取,如:select * from dba_recyclebin。如果被删除的对象不是彻底删除,而是放到了回收站的话,我们就可以在需要的时候从回收站中进行恢复了。

为了避免被删除的表与其他对象存在名称冲突,Oracle对被删除的对象进行了重命名,当然Oracle也保存了对象的原始名称。在进行对象恢复的时候可以使用对象的原始名称,也可以使用被重新命名的新名称。

系统参数recyclebin控制表删除后是否到回收站,show parameter recyclebin可以查看该参数的状态。

对于系统参数的修改有两种,全局的修改和会话的修改:

(1)alter system set param_name=param_value;

(2)alter session set param_name=param_value;

show recyclebin:可以显示当前用户recyclebin中的表。

purge tablespace tablespace_name:用于清空指定表空间的recyclebin;

purge tablespace tablespace_name user username:清空指定表空间的recyclebin中指定用户的对象。

purge table table_name:清除回收站中的指定表对象。如:purge table hello语句则将清除回收站中的hello表。这里的table_name既可以是原来的表对象名,也可以是

recyclebin中自动生成的名字。

purge recyclebin:删除当前用户的recyclebin中的对象。

purge dba_recyclebin:删除所有用户的recyclebin中的对象

drop table table_name purge:删除对象且不放在recyclebin中。

删除闪回的语法格式如下:

 

Sql代码  收藏代码
  1. flashback table table_name to before drop [rename to new_name]; --恢复表table_name并重命名为new_name*/  
 

示例代码:

 

Sql代码  收藏代码
  1. flashback table hello to before drop rename to dropped_hello;  
 

4、数据库闪回

数据库闪回可以使数据库回到过去某一时间点或SCN的状态,用户可以不用备份就能快速地实现时间点的恢复。只有Oracle的企业版才能进行数据库闪回。

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    利用oracle闪回技术恢复误删除的表或误更新的记录.pdf

    为了使 Oracle 数据库从任何逻辑误操作中迅速地恢复,Oracle 推出了闪回技术。 该技术首 先以闪回查询( Flashback Query)出现在 Oracle 9i 版本中,后来 Oracle 在 10g 中对该技术 进行了全面扩展,提供了闪回...

    oracle闪回技术

    oracle 的闪回技术 flashback 恢复 delete、update、drop 的误操作

    关于oracle10供了类似操作系统中的回收站功能

    在Oracle10g中,引入了一个回收站(Recycle Bin)的概念。...常常看到开发人员误删除表,我们可以充分利用10g的闪回(FLASHBACK)功能来避免类似的人为操作。不能对已经放到回收站(Recycle Bin)中的对象执行DDL/DML语句。

    oracle 数据库闪回相关语句介绍

    1\将表闪回到某一时间点: 闪回操作前启用行移动功能 Sql代码 alter table emp enable row movement; 执行闪回语句: Sql代码 flashback table emp to timestamp to_timestamp(‘20120709195000′,’YYYYMMDDHH24:MI:...

    oracle 12c 数据库 教程

    (一)什么是闪回 Flashback? 90 (五)闪回查询:Flashback Query 91 (六)闪回版本查询:Flashback Version Query 92 (七)闪回表:Flashback Table 93 (八)闪回数据库:Flashback Database 94 (九)闪回...

    ORACLE FLAHBACK

    Oracle从版本9开始,就开始提供了flashback query(闪回查询)的功能,最初的功能也是很有限的,不仅完全依赖于自动Undo(AUM),对于drop,truncate等DDL操作是毫无办法,而且,由于受到Undo空间限制,能闪回的时间也...

    Oracle10g精简绿色版

    ● 回闪(Flashback)数据库:在Oracle 9i中,Oracle利用AUM提供有限的回闪服务,作用基本不大。在Oracle 10g中,这种服务应用范围有了很大的扩展。利用一种回闪日志,用户可以得到表级任一时刻的点恢复。 ● 回闪备份...

    oracle 9i使用闪回查询恢复数据库误删问题

    Oracle 9i中提供了一项新的技术手段–闪回查询,用户使用闪回查询可以及时取得误操作前的数据,并可以针对错误进行相应的恢复措施,而这一切都无需DBA干预。 因为一时手贱,生产上的数据被我给delete掉了。 用的是...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第2/2部分)

     ●oracle恢复管理器和oracle闪回技术  ●资源管理器  ●oracle自动存储管理  ●oracle调度程序  ●自动工作负荷知识库  ●性能调整 作译者  John Watson就职于BPLC Management Consultants,负责公司欧洲...

    深入解析Oracle.DBA入门进阶与诊断案例

    8.12 Oracle 10g闪回查询特性的增强 378 8.13 ORA-01555成因与解决 382 8.14 Oracle 11g闪回数据归档 389 8.15 AUM下如何重建UNDO表空间 393 8.16 使用Flashback Query恢复误删除数据 394 8.17 诊断案例...

    深入解析OracleDBA入门进阶与诊断案例 4/4

     8.12 Oracle 10g闪回查询特性的增强   8.13 ORA-01555成因与解决   8.14 Oracle 11g闪回数据归档   8.15 AUM下如何重建UNDO表空间   8.16 使用Flashback Query恢复误删除数据   8.17 诊断案例之一...

    深入解析OracleDBA入门进阶与诊断案例 3/4

     8.12 Oracle 10g闪回查询特性的增强   8.13 ORA-01555成因与解决   8.14 Oracle 11g闪回数据归档   8.15 AUM下如何重建UNDO表空间   8.16 使用Flashback Query恢复误删除数据   8.17 诊断案例之一...

    深入解析OracleDBA入门进阶与诊断案例 2/4

     8.12 Oracle 10g闪回查询特性的增强   8.13 ORA-01555成因与解决   8.14 Oracle 11g闪回数据归档   8.15 AUM下如何重建UNDO表空间   8.16 使用Flashback Query恢复误删除数据   8.17 诊断案例之一...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第1/2部分)

     ●oracle恢复管理器和oracle闪回技术  ●资源管理器  ●oracle自动存储管理  ●oracle调度程序  ●自动工作负荷知识库  ●性能调整 作译者  John Watson就职于BPLC Management Consultants,负责公司欧洲...

    oracle误删数据恢复方法小结

    Or(www.jb51.net)acle 9i中提供了一项新的技术手段–闪回查询,用户使用闪回查询可以及时取得误操作前的数据,并可以针对错误进行相应的恢复措施,而这一切都无需DBA干预 因为一时手贱,生产上的数据被我给delete掉...

    FLAHBACK详解

    FLAHBACK举例和使用说明,比较详细,重点介绍了3中方法恢复数据库:1.Flashback database ;...本人也误操作drop了oracle中的一张表,找了半天找到这个方法文档恢复成功了表和数据。很好用,希望大家支持下。

    数据库SCN和时间的互相转换

     用途:在进行数据库的还原和利用数据库的闪回功能时,进行SCN和时间的转换变的非常必要了;  操作方法:  1、通过dbms_flashback.get_system_change_number获得系统当前的SCN值:  SQL> select dbms_...

Global site tag (gtag.js) - Google Analytics