Flashback Query — ретроспективные запросы Oracle
Статьи про Oracle -> Программирование
Flashback Query — ретроспективные запросы Oracle
v:1.0 27.07.2014
Петрелевич Сергей
В Oracle есть интересная возможность - извлекать данные по состоянию на заданное время в прошлом.
Эта технология называется Flashback Query. Давайте рассмотрим пример.
--создаем тестовую таблицу create table tTest ( id number, value varchar2(100) ); --вставляем строку: insert into tTest(id,value) values(1,'oldValue'); commit; --смотрим, что получилось: select * from tTest; --вот, что в таблице: Id Value 1 oldValue --Теперь меняем данные и делаем commit update tTest t set t.VALUE='newValue' where t.id=1; commit; -- --смотрим, что возвращает запрос select * from tTest; --он возвращает: Id Value 1 newValue --Все так и должно быть --А теперь смотрим, что было в таблице 10 секунд назад select id, value from tTest as of scn timestamp_to_scn(sysdate-INTERVAL '10' SECOND) where Id=1 --А было в ней вот что: Id Value 1 oldValue --Можно посмотреть и на заданное время В ПРОШЛОМ select id, value from tTest as of scn timestamp_to_scn(to_timestamp('27/07/2014 19:59:00','DD/MM/YYYY HH24:MI:SS')) where id=1; --Видим Id Value 1 oldValue
А время хранения определяется параметром UNDO_RETENTION.
Например, у меня в 12.1.0.1.0 по умолчанию параметр UNDO_RETENTION равен 900 сек.
Но это не значит, что я гарантированно смогу заглянуть на 900 сек. назад.
При высокой транзакционной активности данные в undo могут замениться более новыми и ретроспективный запрос может вернуть ошибку:
"snapshot too old".
Тем не менее для ряда случаев Flashback Query может оказаться очень полезной штукой.
Метки: SQL
Комментарии.
Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: <a>, <b>, <i>, <br>.
jashka34 | Oct 16, 2014 11:27:09 AM | |
Про UNDO_RETENTION. Что все-таки это за параметр? Я так понял, что время, позже которого уже нельзя делать флешбек-запросы? Но я тут проверил - вроде можно. У меня тоже 900 стоит, но без проблем делаются запросы и на более долгое время назад. | ||
jashka34 | Oct 16, 2014 12:31:20 PM | |
Кажется понял про UNDO_RETENTION. Это минимальное время, которое будет хранится undo-информация. Т.е. при значении 900 мы как минимум на 900 (15 минут) секунд назад сможем заглянуть. А вот насколько больше - другой вопрос. | ||
Sergey | Oct 16, 2014 10:39:49 PM | |
Все верно, UNDO_RETENTION - это гарантированное "время хранения", а спустя это время уже как повезет. Все зависит от нагрузки. | ||