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

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 本文介绍了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表空间从历史数据中得到相应时间点上的数据。


相关文章
|
19天前
|
Oracle 安全 关系型数据库
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
212 28
|
7天前
|
SQL 关系型数据库 数据库
【赵渝强老师】创建PostgreSQL的数据库
本文介绍了在PostgreSQL中通过SQL命令“create database”创建数据库的方法。首先查询系统目录pg_database以查看现有数据库集合,然后使用“create database”命令创建新数据库,并了解其在$PDATA/base目录下对应的文件夹生成。最后重新查询数据库集合确认创建结果,附带视频讲解便于理解操作步骤及注意事项。
|
17天前
|
存储 运维 监控
【赵渝强老师】TiDB数据库从零开始
《TiDB数据库从零开始》是一门系统介绍TiDB分布式数据库的课程,共11章。内容涵盖TiDB体系架构、安装部署、用户安全管理、数据库对象操作、事务与锁机制、备份恢复、数据迁移与同步、TiSpark/TiProxy/TiFlash组件使用,以及监控诊断与故障处理。通过视频讲解和详细文本,帮助学员全面掌握TiDB的核心功能与应用场景。
|
1月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的闪回版本查询
本文介绍了Oracle数据库的闪回版本查询(Flashback Version Query)功能,通过示例详细讲解了其使用方法。闪回版本查询可获取指定时间区间内行的不同版本,利用`versions between`子句实现。文中包含视频讲解,并通过创建测试表、插入数据及执行查询等步骤,演示如何获取历史版本信息和伪列详情,帮助用户深入了解该功能的实际应用。
61 13
|
29天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回数据库
Oracle闪回数据库功能类似于“倒带按钮”,可快速将数据库恢复至 earlier 状态,无需还原备份。本文介绍了闪回数据库的使用方法及实战案例:包括设置归档模式、开启闪回功能、记录SCN号、执行误操作后的恢复步骤等。通过具体 SQL 操作演示了如何利用闪回数据库恢复被误删的用户数据。注意,使用此功能前需确保数据库为归档模式。
|
25天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回数据归档
本文介绍了Oracle闪回数据归档(Flashback Data Archive)的功能与实现方法。闪回数据归档可将表中的历史数据进行归档,支持全面的历史数据查询,引入了“Oracle Total Recall”概念。文中通过具体实战步骤演示了如何创建和启用闪回数据归档:包括创建表空间、数据归档,设置默认归档,授予用户权限,开启表的归档功能,并展示了误操作后如何通过归档恢复数据。最后通过执行计划验证了数据来源于归档。
|
1月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle数据库的闪回表
本文介绍了Oracle数据库中的闪回表(Flashback Table)功能,它能够将表的数据快速恢复到特定时间点或系统改变号(SCN),无需备份。文章通过实战示例详细演示了如何使用闪回表恢复数据,包括授权、创建测试表、记录时间与SCN号、删除数据、启用行移动功能、执行闪回操作以及验证恢复结果等步骤。同时,还展示了如何通过触发器禁止插入操作,并在闪回过程中处理触发器的启用问题。文末附有视频讲解,帮助读者更好地理解闪回表的使用方法。
77 10
|
27天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回事务查询
Oracle数据库的闪回事务查询(Flashback Transaction Query)是闪回版本查询的扩充,可用于审计或撤销已提交的事务。通过`flashback_transaction_query`视图,可生成还原特定事务的SQL语句。本文介绍了其基本概念,并通过实战演示如何使用该功能:从授权、开启UNDO数据增强,到创建测试表和事务,最后利用闪回查询撤销已提交的事务,验证数据恢复效果。附带视频讲解,帮助深入理解。
|
28天前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的闪回删除
本文介绍了Oracle数据库的闪回删除(Flashback Drop)功能,该功能可从回收站恢复已删除的对象至删除前状态。文章详细讲解了回收站的工作原理及操作步骤,包括检查回收站功能是否开启、删除表、查看回收站内容以及使用闪回删除恢复数据等实战操作。通过具体示例,演示了如何恢复被删除的员工表及其数据,并处理同名表冲突问题。文末还附有视频讲解,帮助读者更直观地理解操作流程。
|
1月前
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库

推荐镜像

更多
下一篇
oss创建bucket