【赵渝强老师】Oracle数据库的闪回查询

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 本文介绍了Oracle数据库的闪回查询(Flashback Query)功能及其实际应用。闪回查询通过`AS OF`子句,结合时间戳或SCN号,可查询历史数据状态,帮助分析数据差异。文中通过具体示例演示了如何使用闪回查询:创建测试表、记录当前SCN号、更新数据并提交事务,最后通过闪回查询获取历史数据。附带的视频和代码块详细展示了操作步骤与结果。

b233.png

Oracle数据库的闪回查询(Flashback Query)是对查询语句select的扩展,它会从还原数据中提取所需要的历史数据以反映数据在历史的某个时间段上的状态。视频讲解如下:


一、 闪回查询简介


使用闪回查询可以用于查询在特定时间点存在的所有历史数据。使用闪回查询功能,可以完成截止到特定时间的查询。在使用select语句的as of子句,可以指定要查看对应数据的时间点。这在分析数据差异时非常有用。下图说明了闪回查询的基本执行过程。

image.png


在查询时通过制度时间戳或者系统的SCN号,闪回查询即可查询出过去时间点上的历史数据。SCN(System Change Number)代表系统改变号,它与时间戳是一一对应的。通过下面的语句可以得到当前时间所对应的SCN号。执行下面的语句:


SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') "current time",
          timestamp_to_scn(sysdate) SCN from dual;   
# 输出的信息如下:
current time      SCN
-------------------- --------------------
2025-03-25 19:51:32   2778099


下面是即将要用到的测试数据。

SQL> select * from emp; 
# 输出的结果如下所示。
     EMPNO ENAME      JOB        MGR HIREDATE     SAL       COMM     DEPTNO
----- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK       7902 17-DEC-80      800           20
      7499 ALLEN      SALESMAN    7698 20-FEB-81     1600        300      30
      7521 WARD       SALESMAN    7698 22-FEB-81     1250        500      30
      7566 JONES      MANAGER   7839 02-APR-81     2975           20
      7654 MARTIN     SALESMAN    7698 28-SEP-81     1250         1400    30
      7698 BLAKE      MANAGER   7839 01-MAY-81     2850           30
      7782 CLARK      MANAGER   7839 09-JUN-81     2450           10
      7788 SCOTT      ANALYST   7566 19-APR-87     3000           20
      7839 KING       PRESIDENT        17-NOV-81     5000           10
      7844 TURNER     SALESMAN    7698 08-SEP-81     1500     0   30
      7876 ADAMS      CLERK       7788 23-MAY-87     1100           20
      7900 JAMES      CLERK       7698 03-DEC-81      950           30
      7902 FORD       ANALYST   7566 03-DEC-81       3000           20
      7934 MILLER     CLERK       7782 23-JAN-82     1300           10
14 rows selected.


二、 【实战】在查询中使用闪回查询


在了解到了什么是Oracle数据库的闪回查询后,下面将通过一个具体是示例来演示如何在查询中使用闪回查询。


(1)使用c##scott用户登录数据库

sqlplus c##scott/tiger


(2)创建一张表用于测试闪回查询

SQL> create table flashback1 as select * from emp;


(3)记录一下当前的时间和SCN号

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') "current time",
          timestamp_to_scn(sysdate) SCN from dual;   
# 输出的信息如下:
current time      SCN
-------------------- ---------------
2025-03-25 20:44:31   2752199


(4)查询员工号为7839的薪水

SQL> select sal from flashback1 where empno=7839; 
# 输出的信息如下:
SAL
----------------
5000


(5)更新员工号为7839的薪水

SQL> update flashback1 set sal=6000 where empno=7839;
# 注意:当update操作成功执行后,历史数据5000将保存在UNDO表空间中。


(6)确定更新员工号为7839的薪水是否成功

SQL> select sal from flashback1 where empno=7839; 
# 输出的信息如下:
SAL
----------------
6000


(7)提交事务

SQL> commit;


(8)使用闪回查询获取员工号为7839的薪水

SQL> select sal from flashback1 as of scn 2752199 where empno=7839 ;
# 输出的信息如下:
SAL
----------------
5000
# 由于在查询中使用了as of关键字,并指定了一个过去的时间点或者SCN,
# Oralce访问UNDO表空间从历史数据中得到相应时间点上的数据。


目录
打赏
0
4
4
1
180
分享
相关文章
【赵渝强老师】Oracle的闪回版本查询
本文介绍了Oracle数据库的闪回版本查询(Flashback Version Query)功能,通过示例详细讲解了其使用方法。闪回版本查询可获取指定时间区间内行的不同版本,利用`versions between`子句实现。文中包含视频讲解,并通过创建测试表、插入数据及执行查询等步骤,演示如何获取历史版本信息和伪列详情,帮助用户深入了解该功能的实际应用。
33 13
【赵渝强老师】Oracle数据库的闪回表
本文介绍了Oracle数据库中的闪回表(Flashback Table)功能,它能够将表的数据快速恢复到特定时间点或系统改变号(SCN),无需备份。文章通过实战示例详细演示了如何使用闪回表恢复数据,包括授权、创建测试表、记录时间与SCN号、删除数据、启用行移动功能、执行闪回操作以及验证恢复结果等步骤。同时,还展示了如何通过触发器禁止插入操作,并在闪回过程中处理触发器的启用问题。文末附有视频讲解,帮助读者更好地理解闪回表的使用方法。
25 10
【赵渝强老师】Oracle数据库的闪回技术
在Oracle数据库操作中,难免会遇到误删表或提交错误事务等问题,可能导致数据丢失甚至数据库停止运行。传统解决方法依赖备份恢复,但需提前准备正确备份。为此,Oracle提供了闪回技术,无需备份即可快速恢复数据。它支持7种类型的操作,如闪回查询、版本查询、表恢复等,能有效应对逻辑损坏和用户错误。闪回技术基于还原(undo)数据管理,启用自动管理后可实现高效恢复。
【赵渝强老师】Oracle数据库的客户端工具
本文介绍了Oracle数据库的三种客户端工具:SQL*Plus、Oracle Enterprise Manager Database Express(EM)和SQL Developer的使用方法。首先通过命令行工具SQL*Plus登录数据库,创建用户并授权,建立部门与员工表,插入数据并查询;接着讲解了如何通过浏览器访问EM界面监控数据库及表空间状态;最后演示了SQL Developer的下载安装、连接配置以及执行查询的过程,帮助用户快速上手Oracle数据库管理与操作。
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
134 82
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
218 42
MySQL生产环境迁移至YashanDB数据库深度体验
这篇文章是作者将 MySQL 生产环境迁移至 YashanDB 数据库的深度体验。介绍了 YashanDB 迁移平台 YMP 的产品相关信息、安装步骤、迁移中遇到的各种兼容问题及解决方案,最后总结了迁移体验,包括工具部署和操作特点,也指出功能有优化空间及暂不支持的部分,期待其不断优化。

推荐镜像

更多