【赵渝强老师】Oracle的闪回版本查询

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 本文介绍了Oracle数据库的闪回版本查询(Flashback Version Query)功能,通过示例详细讲解了其使用方法。闪回版本查询可获取指定时间区间内行的不同版本,利用`versions between`子句实现。文中包含视频讲解,并通过创建测试表、插入数据及执行查询等步骤,演示如何获取历史版本信息和伪列详情,帮助用户深入了解该功能的实际应用。

b234.png

Oracle数据库的闪回版本查询(Flashback Version Query)提供了一个审计行改变的查询功能,通过它可以查找到所有已经提交了的行记录。视频讲解如下:


一、 闪回版本查询简介


使用闪回版本查询可以获取在给定的时间区间中,指定的行的不同版本。当commit语句被执行时,一个新的行版本将被创建。闪回版本查询使用了select语句的versions between子句来指定时间区间。闪回版本查询的语法格式如下所示:


select 列1,列2,.....
from 表名
versions between [scn|timestamp] [表达式|minvalue]
         and [表达式|maxvalue] as of [scn|timestamp] 表达式;
# 其中:
# between...and:用于指定时间区间。
# scn|timestamp:用于指定使用SCN,还是使用时间戳。
# as of:用于恢复单个版本的数据。
# minvalue:代表SCN或者时间戳的最小值。
# maxvalue:代表SCN或者时间戳的最大值。


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


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


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

sqlplus c##scott/tiger


(2)创建一张表用于测试闪回版本查询,并往表中插入数据。

SQL> create table flashback2(tid number,tname varchar2(20));
SQL> insert into flashback2 values(1,'Tom');
SQL> commit;
SQL> insert into flashback2 values(2,'Mary');
SQL> commit;
SQL> insert into flashback2 values(3,'Mike');
SQL> commit;
SQL> update flashback2 set tname='Mary123' where tid=2;
SQL> commit;

# 由于这里执行了四次commit语句,
# 因此在表flashback2上产生四个版本的信息。


(3)执行一个简单的查询语句。

SQL> select * from flashback2;
# 输出的信息如下:
TID   TNAME
-------------- --------------------
   1    Tom
   2    Mary123
   3    Mike
   
# 由于这里的查询没有指定具体的版本信息,
# 因此在默认情况下将查询表的最新版本数据。


(4)执行闪回版本查询获取表上所有的历史版本信息。

SQL> select * from flashback2
      versions between scn minvalue and maxvalue;
# 输出的信息如下:
TID   TNAME
------------- --------------------
   2    Mary123
   3    Mike
   2    Mary
   1    Tom
   
# 通过指定关键字versions表明将执行闪回版本查询,
# scn minvalue and maxvalue用于指定查询版本的区间范围。
# 这里的范围是从最小的SCN号查询到最大的SCN号,
# 即:查询表上面的所有版本,这里一共返回了4个版本。


(5)使用闪回版本查询的伪列获取每个版本的详细信息。

SQL> select tid,tname,
     versions_starttime,versions_endtime,versions_operation
     from flashback2
     versions between scn minvalue and maxvalue
     order by 1,3;
     
# 输出的信息如下:
TID   TNAME   VERSIONS_STARTTIME       VERSIONS_ENDTIME         VERSIONS_OPERATION
----- ------- --------------------- ----------------------- ------------------
 1    Tom                                                          I
 2    Mary    25-MAR-25 11.00.23 AM    25-MAR-25 11.00.38 AM       I
 2    Mary123 25-MAR-25 11.00.38 AM                                U
 3    Mike    25-MAR-25 11.00.32 AM                                I

# 其中的伪列:
# VERSIONS_STARTTIME:代表当前版本的起始时间。
# VERSIONS_ENDTIME:代表当前版本的结束时间。
# VERSIONS_OPERATION:代表当前版本执行的具体操作。
# 由于在第(2)步操作中执行了一条update语句将Mary改了Mary123,
# 因此可以看出Mary的生命周期是
# 从25-MAR-25 11.00.23 AM到25-MAR-25 11.00.38 AM。


相关文章
|
4月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】在PostgreSQL中访问Oracle
本文介绍了如何在PostgreSQL中使用oracle_fdw扩展访问Oracle数据库数据。首先需从Oracle官网下载三个Instance Client安装包并解压,设置Oracle环境变量。接着从GitHub下载oracle_fdw扩展,配置pg_config环境变量后编译安装。之后启动PostgreSQL服务器,在数据库中创建oracle_fdw扩展及外部数据库服务,建立用户映射。最后通过创建外部表实现对Oracle数据的访问。文末附有具体操作步骤与示例代码。
154 6
【赵渝强老师】在PostgreSQL中访问Oracle
|
5月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回数据库
Oracle闪回数据库功能类似于“倒带按钮”,可快速将数据库恢复至 earlier 状态,无需还原备份。本文介绍了闪回数据库的使用方法及实战案例:包括设置归档模式、开启闪回功能、记录SCN号、执行误操作后的恢复步骤等。通过具体 SQL 操作演示了如何利用闪回数据库恢复被误删的用户数据。注意,使用此功能前需确保数据库为归档模式。
159 9
|
6月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle数据库的闪回表
本文介绍了Oracle数据库中的闪回表(Flashback Table)功能,它能够将表的数据快速恢复到特定时间点或系统改变号(SCN),无需备份。文章通过实战示例详细演示了如何使用闪回表恢复数据,包括授权、创建测试表、记录时间与SCN号、删除数据、启用行移动功能、执行闪回操作以及验证恢复结果等步骤。同时,还展示了如何通过触发器禁止插入操作,并在闪回过程中处理触发器的启用问题。文末附有视频讲解,帮助读者更好地理解闪回表的使用方法。
229 10
|
5月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回数据归档
本文介绍了Oracle闪回数据归档(Flashback Data Archive)的功能与实现方法。闪回数据归档可将表中的历史数据进行归档,支持全面的历史数据查询,引入了“Oracle Total Recall”概念。文中通过具体实战步骤演示了如何创建和启用闪回数据归档:包括创建表空间、数据归档,设置默认归档,授予用户权限,开启表的归档功能,并展示了误操作后如何通过归档恢复数据。最后通过执行计划验证了数据来源于归档。
137 4
|
5月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回事务查询
Oracle数据库的闪回事务查询(Flashback Transaction Query)是闪回版本查询的扩充,可用于审计或撤销已提交的事务。通过`flashback_transaction_query`视图,可生成还原特定事务的SQL语句。本文介绍了其基本概念,并通过实战演示如何使用该功能:从授权、开启UNDO数据增强,到创建测试表和事务,最后利用闪回查询撤销已提交的事务,验证数据恢复效果。附带视频讲解,帮助深入理解。
131 3
|
5月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的闪回删除
本文介绍了Oracle数据库的闪回删除(Flashback Drop)功能,该功能可从回收站恢复已删除的对象至删除前状态。文章详细讲解了回收站的工作原理及操作步骤,包括检查回收站功能是否开启、删除表、查看回收站内容以及使用闪回删除恢复数据等实战操作。通过具体示例,演示了如何恢复被删除的员工表及其数据,并处理同名表冲突问题。文末还附有视频讲解,帮助读者更直观地理解操作流程。
|
2月前
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
11月前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
847 64
|
5月前
|
Oracle 安全 关系型数据库
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
1126 28
|
3月前
|
存储 Oracle 关系型数据库
oracle数据恢复—oracle数据库执行错误truncate命令的数据恢复案例
oracle数据库误执行truncate命令导致数据丢失是一种常见情况。通常情况下,oracle数据库误操作删除数据只需要通过备份恢复数据即可。也会碰到一些特殊情况,例如数据库备份无法使用或者还原报错等。下面和大家分享一例oracle数据库误执行truncate命令导致数据丢失的数据库数据恢复过程。

推荐镜像

更多