3

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

查询如下:-

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);

最后一个查询不返回任何行。请帮我弄清楚我在这里缺少什么。PS:我只是一个新手SQL学习者。

4

2 回答 2

0

将您的查询分解到下面,这将为您提供遇到问题的痛苦区域。如果您在开始事务之前和开始事务之后尝试使用以下 sqls。

SQL> select current_scn,systimestamp from v$database;

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

 select descr,versions_xid from TestAgain
 versions between scn pre and post;

在 flashback_transaction_query 中使用此 XID 值

 select xid, undo_sql from flashback_transaction_query
 where xid = hextoraw('03000100EE0A0000');
于 2018-10-08T07:41:35.437 回答
0

使用闪回事务查询 sys> alter database add supplemental log data 前必须开启最小补充日志;

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

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

于 2020-12-15T22:36:43.863 回答