首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle12c中的FLASHBACK_TRANSACTION_QUERY视图不返回任何行

Oracle12c中的FLASHBACK_TRANSACTION_QUERY视图不返回任何行
EN

Stack Overflow用户
提问于 2018-10-07 21:48:39
回答 2查看 552关注 0票数 3

我正在学习Oracle 12c中的闪回事务查询。我执行了一些DDL和DML语句。最后,为了查看UNDO_SQL值,我在FLASHBACK_TRANSACTION_QUERY视图上执行了一条select语句,但它没有返回任何行。我很好奇,为什么它没有给我行。我研究发现,必须首先启用补充日志(SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;)。此值为YES。

查询如下:

代码语言:javascript
复制
CREATE TABLE TestAgain
(
   Fld1 VARCHAR2(3),
   Fld2 NUMBER(3)
);

INSERT INTO TestAgain values ('XYZ', 1);
INSERT INTO TestAgain VALUES ('PQR', 2);

COMMIT;

DELETE FROM TestAgain;

SELECT UNDO_SQL FROM FLASHBACK_TRANSACTION_QUERY
WHERE XID = (SELECT DISTINCT(RAWTOHEX(VERSIONS_XID))
FROM TestAgain VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE);

最后一个查询没有返回任何行。请帮我找出我在这里遗漏了什么。附言:我只是一个SQL初学者。

EN

回答 2

Stack Overflow用户

发布于 2018-10-08 15:41:35

将你的查询分解到下面,这将给你带来问题的痛点。如果您尝试在启动事务之前和启动事务之后使用下面的sql。

代码语言:javascript
复制
SQL> select current_scn,systimestamp from v$database;

这将为您提供SCN。使用它来获取XID的值

代码语言:javascript
复制
 select descr,versions_xid from TestAgain
 versions between scn pre and post;

在flashback_transaction_query中使用此XID的值

代码语言:javascript
复制
 select xid, undo_sql from flashback_transaction_query
 where xid = hextoraw('03000100EE0A0000');
票数 0
EN

Stack Overflow用户

发布于 2020-12-16 06:36:44

在使用闪回事务查询sys> alter database添加补充日志数据之前,必须启用最小补充日志;

除了闪回查询的最低补充日志外,您还需要添加主键和外键的补充日志,以便在闪回事务查询中跟踪它们的更改。

SYS> alter database添加补充日志数据(主键)列;SYS> alter database添加补充日志数据(外键)列;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52689125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档