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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 本文介绍了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表空间从历史数据中得到相应时间点上的数据。


相关文章
|
5月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
477 93
|
4月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】使用NetManager创建Oracle数据库的监听器
Oracle NetManager是数据库网络配置工具,用于创建监听器、配置服务命名与网络连接,支持多数据库共享监听,确保客户端与服务器通信顺畅。
275 0
|
5月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
400 8
|
5月前
|
数据库
【赵渝强老师】达梦数据库实例的状态
达梦数据库实例包含NORMAL、PRIMARY和STANDBY三种模式,以及MOUNT、OPEN和SUSPEND三种状态。模式之间可在MOUNT状态下相互转换,不同状态与模式适用于数据库的启动、配置及运行需求。
337 1
|
6月前
|
存储 关系型数据库 MySQL
【赵渝强老师】MySQL数据库的多实例环境
MySQL多实例是指在一台服务器上运行多个MySQL服务,通过不同端口提供独立的数据服务。各实例共享安装程序,但使用各自的配置文件和数据文件,实现资源高效利用。本文详细介绍了如何通过“mysqld_multi”工具配置和启动多个MySQL实例,并演示了目录创建、初始化、配置文件修改及实例启动等操作步骤。
290 1
|
7月前
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
369 11
|
6月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL数据库的WAL日志与数据写入的过程
PostgreSQL中的WAL(预写日志)是保证数据完整性的关键技术。在数据修改前,系统会先将日志写入WAL,确保宕机时可通过日志恢复数据。它减少了磁盘I/O,提升了性能,并支持手动切换日志文件。WAL文件默认存储在pg_wal目录下,采用16进制命名规则。此外,PostgreSQL提供pg_waldump工具解析日志内容。
598 0
|
6月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle客户端与服务器端连接建立的过程
Oracle数据库采用客户端-服务器架构,客户端通过其网络环境与服务器通信,实现数据库访问。监听程序负责建立连接,通过命令lsnrctl可启动、停止及查看监听状态。本文介绍了监听器的作用及相关基础管理操作。
291 0
|
7月前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL中的数据库对象
本教程详细介绍了MySQL数据库中的常见对象,包括表、索引、视图、事件、存储过程和存储函数的创建与管理。内容涵盖表的基本操作、索引的使用、视图简化查询、事件调度功能等,并通过具体示例演示相关SQL语句的使用方法。
151 0
|
7月前
|
Oracle 关系型数据库 数据库
数据库数据恢复—服务器异常断电导致Oracle数据库报错的数据恢复案例
Oracle数据库故障: 某公司一台服务器上部署Oracle数据库。服务器意外断电导致数据库报错,报错内容为“system01.dbf需要更多的恢复来保持一致性”。该Oracle数据库没有备份,仅有一些断断续续的归档日志。 Oracle数据库恢复流程: 1、检测数据库故障情况; 2、尝试挂起并修复数据库; 3、解析数据库文件; 4、导出并验证恢复的数据库文件。

推荐镜像

更多