当前位置: 首页> 健康> 美食 > 安徽新冠疫情最新消息_网页设计服务_seo超级外链_中国去中心化搜索引擎

安徽新冠疫情最新消息_网页设计服务_seo超级外链_中国去中心化搜索引擎

时间:2025/7/11 18:03:47来源:https://blog.csdn.net/zhaoyuqiang/article/details/146966973 浏览次数:0次
安徽新冠疫情最新消息_网页设计服务_seo超级外链_中国去中心化搜索引擎

在这里插入图片描述

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

视频讲解如下

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

一、 闪回事务查询简介

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

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

SQL> desc flashback_transaction_query# 输出的信息如下:Name						Null?	Type------------------------ -------- --------XID								RAW(8)START_SCN							NUMBERSTART_TIMESTAMP					DATECOMMIT_SCN							NUMBERCOMMIT_TIMESTAMP					DATELOGON_USER							VARCHAR2(128)UNDO_CHANGE#						NUMBEROPERATION							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_xidfrom flashback4versions between timestamp minvalue and maxvalueorder by versions_xid;# 输出的信息如下:
TID			TNAME		V	VERSIONS_XID
------ --------------- --- -----------------3 		Mike 		I 	03001A00090300002 		Mary 		I 	03001A00090300001 		Tom			I 	03001A00090300002 		Mary123		U 	07002100040300001 		Tom			D 	0700210004030000# 这里的VERSIONS_XID表示事务的ID号。
# 从输出的信息中可以看出第二个事务的ID为0700210004030000。

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

SQL>select undo_sql from flashback_transaction_querywhere 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 	Mary3 	Mike1 	Tom# 此时表flashback4便恢复到了第一个事务结束的状态。

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

SQL> commit;

《Oracle数据库从零开始》

关键字:安徽新冠疫情最新消息_网页设计服务_seo超级外链_中国去中心化搜索引擎

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: