FLASHBACK_TRANSACTION_QUERY Представление в Oracle 12c, не возвращающее строк - PullRequest
0 голосов
/ 07 октября 2018

Я изучаю Flashback Transaction Query в Oracle 12c.Я выполнил некоторые операторы DDL и DML.В конце я выполнил оператор select в представлении FLASHBACK_TRANSACTION_QUERY, чтобы увидеть значение 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.

1 Ответ

0 голосов
/ 08 октября 2018

Разбейте ваш запрос ниже, который даст вам область боли, где у вас возникли проблемы.Если вы попытаетесь использовать ниже sqls до начала транзакции и после начала транзакции.

SQL> select current_scn,systimestamp from v$database;

Это даст вам SCN.Используйте его для получения значения XID

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

Используйте это значение XID в flashback_transaction_query

 select xid, undo_sql from flashback_transaction_query
 where xid = hextoraw('03000100EE0A0000');
...