我正在学习Oracle 12c中的闪回事务查询。我执行了一些DDL和DML语句。最后,为了查看UNDO_SQL值,我在FLASHBACK_TRANSACTION_QUERY视图上执行了一条select语句,但它没有返回任何行。我很好奇,为什么它没有给我行。我研究发现,必须首先启用补充日志(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);最后一个查询没有返回任何行。请帮我找出我在这里遗漏了什么。附言:我只是一个SQL初学者。
发布于 2018-10-08 15:41:35
将你的查询分解到下面,这将给你带来问题的痛点。如果您尝试在启动事务之前和启动事务之后使用下面的sql。
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');发布于 2020-12-16 06:36:44
在使用闪回事务查询sys> alter database添加补充日志数据之前,必须启用最小补充日志;
除了闪回查询的最低补充日志外,您还需要添加主键和外键的补充日志,以便在闪回事务查询中跟踪它们的更改。
SYS> alter database添加补充日志数据(主键)列;SYS> alter database添加补充日志数据(外键)列;
https://stackoverflow.com/questions/52689125
复制相似问题