热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

oracle闪回表介绍

oracle闪回表介绍FLASHBACKTABLE目的:1.使用闪回表语句恢复表到出现人为或应用错误事件之前的状态。2.可以闪回到过去多长时间取决于系统中undo数据量的大小。3.并且oracle数据库无法恢复通过DDL语句修改...SyntaxHighlighter.all()

oracle闪回表介绍
 
FLASHBACK TABLE
目的:
1. 使用闪回表语句恢复表到出现人为或应用错误事件之前的状态。
2. 可以闪回到过去多长时间取决于系统中undo数据量的大小。
3. 并且oracle数据库无法恢复通过DDL语句修改了结构的表。
注:oracle强烈建议设置UNDO_MANAGEMENT为AUTO(自动管理回滚数据)。另外,设置UNDO_RETENTION (回滚数据的保留时间)为一个合适的时间间隔。
 
详细说明请参考:the documentation on the UNDO_MANAGEMENT http://docs.oracle.com/cd/B19306_01/server.102/b14237/initparams221.htm#REFRN10224 andUNDO_RETENTION  http://docs.oracle.com/cd/B19306_01/server.102/b14237/initparams222.htm#REFRN10225 initialization parameters.
还有,你不能回滚flash back语句,然而你可以使用另外一个flash back语句并且指定一个当前时间之前的时间点。
因此,在声明一个flash back语句之前最好先记录下当前的SCN号!
 
预备知识:
 
1. 我们需要有在指定表上有flashback的权限或者FLASHBACK ANYTABLE权限才能闪回一个表到之前的时间点;
2.必须有对表的SELECT, INSERT, DELETE, andALTER object privileges一系列权限;
3.除非是使用TO BEFORE DROP,对于分区表的闪回都应该开启Row movement (alter table test_move enable row movement;)
一般用于分区表,某一行更新时,如果更新的是分区列,并且更新后的列值不属于原来的这个分区,如果开启了这个选项,就会把这行从这个分区中delete 掉,并加到更新后所属的分区。相当于一个隐式的delete+insert,但是不会触发insert/delete触发器。如果没有开启这个选项,就会在更新时报错。
 
4.恢复一个表到一个还原点,必须拥有SELECT ANY DICTIONARY orFLASHBACKANY TABLE system privilege or theSELECT_CATALOG_ROLE role。
 
语法:

Description of flashback_table.gif follows
 
语法说明:
 
FLASHBACK TABLE
   [ schema. ]table
     [, [ schema. ]table ]...
   TO { { SCN | TIMESTAMP } expr
      | RESTORE POINT restore_point
      }
        [ { ENABLE | DISABLE } TRIGGERS ]
      | BEFORE DROP [ RENAME TO table ]
      } ;
 
FLASHBACK TABLE 
 
        [方案名.] 表名
 
          [, [方案名.] 表名]
 
     TO {  { 系统改变号 | 时间戳 } 表达式
 
             | 恢复点 恢复点名
 
            }
 
                [ { 启用 | 禁用 } 触发器]
 
            | 删除前 [重命名表]
 
            };
 
例子:
 
1.恢复表到之前的状态:
 
[sql] 
CREATE TABLE employees_demo   
  AS SELECT * FROM employees;  
 
[sql] 
SELECT salary  
  FROM employees_test  
  WHERE salary <2500;  
  
    SALARY  
----------  
      2400  
      2200  
      2100  
      2400  
      2200  
 
注:由于是新建的表,在使用以下闪回语句之前需要等待至少5分钟让SCN传送到被闪回的映像表上。
 
[sql] 
ALTER TABLE employees_test  
   ENABLE ROW MOVEMENT;  
 
[sql] 
UPDATE employees_test  
  SET salary = salary * 1.1  
  WHERE salary <2500;  
  
5 rows updated.  
COMMIT;  
 
[sql] 
SELECT salary  
  FROM employees_test  
  WHERE salary <2500;  
  
    SALARY  
----------  
      2420  
      2310  
      2420  
 
 闪回表到更新数据之前的状态:
 
[sql] 
SQL> flashback table employees_test  
  2  to timestamp to_timestamp (&#39;2012-08-02 19:12:20&#39;,&#39;yyyy-mm-dd hh24:mi:ss&#39;);  
  
闪回完成。  
 
[sql] 
SQL> select salary from employees_test where salary <2500;  
  
    SALARY  
----------  
      2400  
      2200  
      2100  
      2400  
      2200  
 
2. 恢复被删除的表,通过表空间的Recyclebin(回收站)实现找回被删除的数据:
 
[sql] 
SQL> drop table employees_test;  
  
表已删除。  
  
SQL> select object_name, original_name, operation, type, droptime from recyclebin;  
  
OBJECT_NAME                    ORIGINAL_NAME                    OPERATION TYPE                      DROPTIME  
------------------------------ -------------------------------- --------- ------------------------- -------------------  
BIN$Bj8Ym5tKQR6kWeBVn9y0fA==$0 EMPLOYEES_TEST                   DROP      TABLE                     2012-08-02:19:26:54  
 
[sql] 
SQL> flashback table employees_test to before drop;  
  
闪回完成。  
  
SQL> select object_name, original_name, operation, type, droptime from recyclebin;  
  
未选定行  
 
[sql] 
SQL> drop table employees_test;  
  
表已删除。  
  
SQL> flashback table employees_test to before drop rename to employees_demo;  
  
闪回完成。  
  
SQL> select * from employees_test;  
select * from employees_test  
              *  
第 1 行出现错误:  
ORA-00942: 表或视图不存在  
 
以上内容为简单的闪回表操作,内容来自oracle官方文档。
 

作者 IndexMan

推荐阅读
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文介绍如何在 FireDAC 环境下实现 FDMEMTable 字段的自动获取,为开发人员提供便捷的数据处理方式。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
  • 本文探讨了在Oracle数据库中,动态SQL语句的执行及其对事务管理的影响,特别是关于回滚操作的有效性。重点讨论了一个具体场景:将预警短信从当前表迁移到历史表时遇到的字段长度不匹配问题及相应的异常处理。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文详细介绍了Python编程语言的学习路径,涵盖基础语法、常用组件、开发工具、数据库管理、Web服务开发、大数据分析、人工智能、爬虫开发及办公自动化等多个方向。通过系统化的学习计划,帮助初学者快速掌握Python的核心技能。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 本文将深入探讨使用IMPDP工具进行分区表导入时需要注意的事项,涵盖最佳实践和常见问题。通过详细的分析与解释,帮助读者更好地理解和应用这些知识。 ... [详细]
  • PostgreSQL 10 离线安装指南
    本文详细介绍了如何在无法联网的服务器上进行 PostgreSQL 10 的离线安装,并涵盖了从下载安装包到配置远程访问的完整步骤。 ... [详细]
  • 探讨如何使用正则表达式从类 SQL 查询语句中提取字段及其对应的值。 ... [详细]
  • TCP长连接设备管理平台:架构与功能概览
    本文介绍了基于TCP长连接的设备管理平台的设计理念、技术选型及主要功能模块。最初,项目旨在实现简单的协议测试,但随着需求扩展,逐步演变为一个完整的前后端分离系统。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • 使用Pandas高效读取SQL脚本中的数据
    本文详细介绍了如何利用Pandas直接读取和解析SQL脚本,提供了一种高效的数据处理方法。该方法适用于各种数据库导出的SQL脚本,并且能够显著提升数据导入的速度和效率。 ... [详细]
  • 本文介绍了如何在 Oracle 数据库中结合使用 UPDATE 和 SELECT 语句,以实现复杂的数据更新操作。首先准备测试环境和数据表,然后通过嵌套查询的方式从其他表中获取需要更新的值,最后执行更新操作并验证结果。 ... [详细]
author-avatar
guoqiuping98_376
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有