【赵渝强老师】Oracle的闪回事务查询

本文涉及的产品
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: Oracle数据库的闪回事务查询(Flashback Transaction Query)是闪回版本查询的扩充,可用于审计或撤销已提交的事务。通过`flashback_transaction_query`视图,可生成还原特定事务的SQL语句。本文介绍了其基本概念,并通过实战演示如何使用该功能:从授权、开启UNDO数据增强,到创建测试表和事务,最后利用闪回查询撤销已提交的事务,验证数据恢复效果。附带视频讲解,帮助深入理解。

b238.png

Oracle数据库的闪回事务查询(Flashback Transaction Query)实际上闪回版本查询的一个扩充,通过它可以审计某个事务甚至撤销一个已经提交的事务。


视频讲解如下:


一、 闪回事务查询简介


闪回事务处理查询是一种诊断工具,可以用来查看在事务处理级对数据库所做的更改。通过这样的方式,可以诊断数据库中的问题并对事务处理执行分析和审计,甚至撤销一个已经提交了的事务。


闪回事务查询的核心是使用flashback_transaction_query视图来确定所有必要的SQL 语句。这些语句可以用来还原特定事务处理或特定时间段内所做的修改。通过下面的语句可以查看flashback_transaction_query视图的结构。


SQL> desc flashback_transaction_query
# 输出的信息如下:
 Name           Null? Type
 ------------------------ -------- --------
 XID                RAW(8)
 START_SCN              NUMBER
 START_TIMESTAMP          DATE
 COMMIT_SCN             NUMBER
 COMMIT_TIMESTAMP         DATE
 LOGON_USER             VARCHAR2(128)
 UNDO_CHANGE#           NUMBER
 OPERATION              VARCHAR2(32)
 TABLE_NAME             VARCHAR2(256)
 TABLE_OWNER            VARCHAR2(386)
 ROW_ID               VARCHAR2(19)
 UNDO_SQL             VARCHAR2(4000)


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


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


(1)使用管理员登录数据库,并授权c##scott用户执行事务查询的权限。

SQL> conn / as sysdba
SQL> grant select any transaction to c##scott;
# 执行事务查询查看flashback_transaction_query视图,
# 需要select any transaction的权限。


(2)开启UNDO数据的增强信息。

SQL> alter database add supplemental log data;
SQL> alter database add supplemental log data (primary key) columns;


(3)切换到c##scott用户,并创建一张新表flashback4。

SQL> conn c##scott/tiger
SQL> create table flashback4(tid number, tname varchar2(20));


(4)使用c##scott用户执行第一个事务。

SQL> insert into flashback4 values(1,'Tom');
SQL> insert into flashback4 values(2,'Mary');
SQL> insert into flashback4 values(3,'Mike');
SQL> commit;


(5)使用c##scott用户执行第二个事务。

SQL> update flashback4 set tname='Mary123' where tid=2;
SQL> delete from flashback4 where tid=1;
SQL> commit;
# 当第二个事务执行完成后,如何撤销第二个事务呢?
# 由于该事务已经提交,因此不可能再通过执行rollback语句来撤销了。
# 但是可以通过闪回事务查询来获取撤销事务的SQL语句,最终达到撤销事务的目的。


(6)通过使用闪回版本查询,获取表flashback4上的事务信息。

SQL>select tid,tname,versions_operation,versions_xid
    from flashback4
    versions between timestamp minvalue and maxvalue
    order by versions_xid;
# 输出的信息如下:
TID     TNAME   V VERSIONS_XID
------ --------------- --- -----------------
   3    Mike    I   03001A0009030000
   2    Mary    I   03001A0009030000
   1    Tom     I   03001A0009030000
   2    Mary123   U   0700210004030000
   1    Tom     D   0700210004030000
# 这里的VERSIONS_XID表示事务的ID号。
# 从输出的信息中可以看出第二个事务的ID为0700210004030000。


(7)查询视图flashback_transaction_query以获取撤销第二个事务的SQL语句。

SQL>select undo_sql 
    from flashback_transaction_query
    where xid='0700210004030000';
# 输出的信息如下:
UNDO_SQL
----------------------------------------------------------------------------
insert into "C##SCOTT"."FLASHBACK4"("TID","TNAME") values ('1','Tom');
update "C##SCOTT"."FLASHBACK4" set "TNAME" = 'Mary' where ROWID = 'AAATIvAAHAAAAIWAAB';


(8)执行第(7)步中输出的UNDO_SQL语句。

SQL> insert into "C##SCOTT"."FLASHBACK4"("TID","TNAME") values ('1','Tom');
SQL> update "C##SCOTT"."FLASHBACK4" set "TNAME" = 'Mary' where ROWID = 'AAATIvAAHAAAAIWAAB';


(9)验证第二个事务是否撤销,查询表flashback4的数据。

SQL> select * from flashback4;
# 输出的信息如下:
TID   TNAME
---------- --------------------
   2  Mary
   3  Mike
   1  Tom
# 此时表flashback4便恢复到了第一个事务结束的状态。


(10)提交UNDO_SQL产生的事务。

SQL> commit;


相关文章
|
6天前
|
Oracle 关系型数据库 数据库
【赵渝强老师】在PostgreSQL中访问Oracle
本文介绍了如何在PostgreSQL中使用oracle_fdw扩展访问Oracle数据库数据。首先需从Oracle官网下载三个Instance Client安装包并解压,设置Oracle环境变量。接着从GitHub下载oracle_fdw扩展,配置pg_config环境变量后编译安装。之后启动PostgreSQL服务器,在数据库中创建oracle_fdw扩展及外部数据库服务,建立用户映射。最后通过创建外部表实现对Oracle数据的访问。文末附有具体操作步骤与示例代码。
【赵渝强老师】在PostgreSQL中访问Oracle
|
2月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的闪回版本查询
本文介绍了Oracle数据库的闪回版本查询(Flashback Version Query)功能,通过示例详细讲解了其使用方法。闪回版本查询可获取指定时间区间内行的不同版本,利用`versions between`子句实现。文中包含视频讲解,并通过创建测试表、插入数据及执行查询等步骤,演示如何获取历史版本信息和伪列详情,帮助用户深入了解该功能的实际应用。
71 13
|
1月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回数据库
Oracle闪回数据库功能类似于“倒带按钮”,可快速将数据库恢复至 earlier 状态,无需还原备份。本文介绍了闪回数据库的使用方法及实战案例:包括设置归档模式、开启闪回功能、记录SCN号、执行误操作后的恢复步骤等。通过具体 SQL 操作演示了如何利用闪回数据库恢复被误删的用户数据。注意,使用此功能前需确保数据库为归档模式。
|
1月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回数据归档
本文介绍了Oracle闪回数据归档(Flashback Data Archive)的功能与实现方法。闪回数据归档可将表中的历史数据进行归档,支持全面的历史数据查询,引入了“Oracle Total Recall”概念。文中通过具体实战步骤演示了如何创建和启用闪回数据归档:包括创建表空间、数据归档,设置默认归档,授予用户权限,开启表的归档功能,并展示了误操作后如何通过归档恢复数据。最后通过执行计划验证了数据来源于归档。
|
2月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle数据库的闪回表
本文介绍了Oracle数据库中的闪回表(Flashback Table)功能,它能够将表的数据快速恢复到特定时间点或系统改变号(SCN),无需备份。文章通过实战示例详细演示了如何使用闪回表恢复数据,包括授权、创建测试表、记录时间与SCN号、删除数据、启用行移动功能、执行闪回操作以及验证恢复结果等步骤。同时,还展示了如何通过触发器禁止插入操作,并在闪回过程中处理触发器的启用问题。文末附有视频讲解,帮助读者更好地理解闪回表的使用方法。
102 10
|
1月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的闪回删除
本文介绍了Oracle数据库的闪回删除(Flashback Drop)功能,该功能可从回收站恢复已删除的对象至删除前状态。文章详细讲解了回收站的工作原理及操作步骤,包括检查回收站功能是否开启、删除表、查看回收站内容以及使用闪回删除恢复数据等实战操作。通过具体示例,演示了如何恢复被删除的员工表及其数据,并处理同名表冲突问题。文末还附有视频讲解,帮助读者更直观地理解操作流程。
|
运维 Oracle 关系型数据库
Oracle运维笔记之事务回滚处理
Oracle运维笔记之事务回滚处理
1381 0
|
1月前
|
Oracle 安全 关系型数据库
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
320 28
|
2月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle数据库的闪回查询
本文介绍了Oracle数据库的闪回查询(Flashback Query)功能及其实际应用。闪回查询通过`AS OF`子句,结合时间戳或SCN号,可查询历史数据状态,帮助分析数据差异。文中通过具体示例演示了如何使用闪回查询:创建测试表、记录当前SCN号、更新数据并提交事务,最后通过闪回查询获取历史数据。附带的视频和代码块详细展示了操作步骤与结果。

推荐镜像

更多