博客
关于我
Oracle闪回查询总结
阅读量:500 次
发布时间:2019-03-07

本文共 3284 字,大约阅读时间需要 10 分钟。

Oracle闪回查询是一个强大的功能,允许数据库管理员(DBA)通过重做日志和自动回滚段管理(AUM)来恢复数据库的状态。以下是Oracle闪回查询的详细说明:

1.闪回查询的功能描述

在Oracle 9i之后,闪回查询功能提供了一种便捷的数据恢复方式,允许用户在不完全恢复的情况下,通过时间点或系统更改编号(SCN)来恢复数据库的状态。这一功能消除了传统方法中因数据误删或误改导致的繁琐恢复过程。

2.回滚段的作用

回滚段作为Oracle数据库中的关键组成部分,主要负责存储事务操作的前影像。它支持以下功能:

  • 事务回滚:在用户执行ROLLBACK语句时,Oracle利用回滚段中的前影像,将数据修改前的状态恢复。
  • 事务恢复:当事务未提交时,回滚段的信息被记录到重做日志文件中,Oracle在下次数据库启动时利用这些信息恢复未提交的数据。
  • 读一致性:确保在一个会话修改数据时,其他会话看不到该会话的未提交修改,保证了数据的完整性。

3.删除和提交操作的流程

Oracle的DELETECOMMIT操作都需要清晰地理解其数据库内存结构和日志管理机制:

  • 删除操作流程

  • Oracle将相关数据块读入缓冲区。
  • 在重做日志缓冲区中记录DELETE操作的全过程。
  • 在回滚段的事务表中创建回滚条目。
  • 创建前镜像并存入回滚段。
  • 修改数据块,标记为脏(dirty),开始记录到重做日志中。
  • 提交操作流程

  • Oracle生成一个系统更改编号(SCN)。
  • 在回滚段的事务表中标记此事务为已提交(committed)。
  • 日志读写进程将日志缓冲区中的记录写入重做日志文件。

4.闪回查询的实例演示

为了演示闪回查询的实际应用,可以按照以下步骤操作:

  • 准备工作

    • 初始化参数UNDO_MANAGEMENT=AUTOUNDO_RETENTION= n(n决定最大可翻滚时间)。
    • 通过sysdba权限登录,创建闪回用户并授予相应权限:
      conn sys/sys as sysdba  create user flash identified by flash;  grant connect, resource to flash;  grant execute on dbms_flashback to flash;
  • 操作示例

    • 创建并插入数据表:
      create table t_flash (test varchar2(10));  insert into t_flash values('google');  insert into t_flash values('KingXt');
    • 删除特定记录并提交:
      delete t_flash where test = 'google';  commit;
    • 启用闪回查询:
      execute dbms_flashback.enable_at_time(to_date('2010-05-08 17:00:00','yyyy-mm-dd hh24:mi:ss'));  execute dbms_flashback.disable;
  • 恢复数据

    • 使用闪回查询恢复数据:
      cursor flash_recover is select * from t_flash;  t_recode t_flash%rowtype;  begin  dbms_flashback.enable_at_time(to_date('2010-05-08 20:35:23','yyyy-mm-dd hh24:mi:ss'));  open FLASH_RECOVER;  dbms_flashback.disable;  loop  fetch FLASH_RECOVER into t_recode;  exit when FLASH_RECOVER%notfound;  insert into t_flash values (t_recode.test);  end loop;  close FLASH_RECOVER;  commit;  end;
  • 5.闪回查询的局限性

    • 每5分钟记录一次SCN,基于时间点的闪回查询可能无法精确恢复到SCN之外的时间段。
    • 需要详细了解回滚段的管理和_used_ الفона составляет,通过设置合理的UNDO_RETENTION参数来优化闪回性能。

    6.Flashback Database

    Flashback Database功能允许数据库管理员快速恢复到任意指定的时间点,而无需依赖物理备份。它通过创建闪回日志记录数据库的变更实例,通过如下命令实现:

    flashback database to time to_timestamp(xxx);  flashback database to scn xxx;

    7.Flashback Table

    Flashback Table功能允许恢复特定表的历史状态,适用于需要快速纠正误操作的场景。操作步骤如下:

  • 启用闪回表功能

    flashback table test to timestamp to_timestamp('2010-05-08 17:00:00','yyyy-mm-dd hh24:mi:ss');
  • 恢复表状态

  • flashback table test to timestamp to_timestamp('2010-05-08 17:00:00','yyyy-mm-dd hh24:mi:ss');

    ### 8.Flashback Drop  Flashback Drop功能类似于回收站,允许暂时保留被删除的表,便于恢复。操作步骤包括:1. **显示回收站信息**:  ```sqlshow recyclebin;
    1. 删除表并显示回收站记录

      drop table test_drop;  show recyclebin;
    2. 恢复被删除的表

      flashback table test_drop to before drop;
    3. 9.Flashback Version Query

      Flashback Version Query允许查看特定时间段内表的变更记录,适合审计操作或分析历史数据:

    4. 查看所有变更

      select versions_starttime, versions_operation, test from t_flash versions between minvalue and maxvalue order by versions_starttime;
    5. 查看指定时间段的变更

      select test from t_flash versions between timestamp to_date('2010-05-07 15:30:00', 'yyyy-mm-dd hh24:mi:ss') and to_date('2010-05-07 16:30:00', 'yyyy-mm-dd hh24:mi:ss');
    6. 10.Flashback Transaction Query

      Flashback Transaction Query允许审计特定事务的详细信息,并可回滚已提交的事务:

    7. 获取事务ID

      delete from test where id=2;  commit;  select xid from v$transaction;  XID ---------------- 04001200AE010000
    8. 审计事务

      select * from FLASHBACK_TRANSACTION_QUERY where xid='04001F0035000000';
    9. 回滚事务

      通过获取相关事务ID,将其回滚到指定状态。

    10. 结语

      Oracle闪回查询是一个强大工具,能够帮助数据库管理员快速恢复误操作或审计操作历史。在实际应用中,合理配置回滚段管理和设置合适的闪回保留时间,可以最大限度地提升闪回性能,保障数据库的稳定性和可靠性。

    转载地址:http://gzmjz.baihongyu.com/

    你可能感兴趣的文章
    排序算法之总结
    查看>>
    微软云Linux服务器 Mysql、tomcat远程连接错误解决办法
    查看>>
    Python数据分析(二): Numpy技巧 (2/4)
    查看>>
    09 . Python3之常用模块
    查看>>
    Python学习笔记-StatsModels 统计回归(3)模型数据的准备
    查看>>
    Velocity.js初步
    查看>>
    yarn出现“There are no scenarios ; must have at least one"
    查看>>
    nginx上配置phpmyadmin
    查看>>
    HustOJ二次开发之修改数据库连接池
    查看>>
    redis集群报错:(error) CLUSTERDOWN Hash slot not served
    查看>>
    一个JAVA应用启动缓慢问题排查 --来自jdk securerandom 的问候
    查看>>
    spring-boot-2.0.3之redis缓存实现,不是你想的那样哦!
    查看>>
    httprunner学习23-加解密
    查看>>
    有道云笔记 同步到我的博客园
    查看>>
    阿里云“网红"运维工程师白金:做一个平凡的圆梦人
    查看>>
    李笑来必读书籍整理
    查看>>
    vue书籍整理
    查看>>
    记Java中有关内存的简单认识
    查看>>
    http头部 Expect
    查看>>
    Hadoop(十六)之使用Combiner优化MapReduce
    查看>>