Flashback oracle что это

Обновлено: 19.05.2024

Представление FLASHBACK_TRANSACTION_QUERY позволяет идентифицировать транзакцию или транзакции, отвечающие за определенные изменения данных таблицы, которые произошли за указанный интервал времени. Flashback Transaction Query просто опрашивает представление FLASHBACK_TRANSACTION_QUERY и предоставляет информацию о транзакциях, включая операторы SQL, необходимые для отмены изменений, проведенных либо одиночной транзакцией, либо набором транзакций за указанный период времени. Это средство позволяет не только исправлять логические ошибки, но также проводить аудит транзакций в базе данных.

Flashback Transaction Query получает всю информацию о транзакциях из сегментов отмены. Поэтому значение, установленное для параметра UNDO_RETENTION, определяет, насколько глубоко в прошлое можно вернуться, чтобы получить данные отмены.

В случае применения инструмента Oracle LogMiner для отмены SQL-операторов Oracle приходится последовательно читать файлы журналов повторного выполнения для получения необходимой информации. Средство Flashback Transaction Query позволяет использовать индексированный путь доступа для прямого получения требуемых данных отмены, вместо прохода по всему файлу журнала повторного выполнения. Можно также отменить отдельную транзакцию или набор транзакций за определенный период времени.

Flashback Queries в Oracle

Flashback Queries (ретроспективные запросы) – это сравнительно старая возможность СУБД Oracle, позволяющая восстанавливать данных из сегмента отката. Впервые она появилась в версии 9iR1 и в дальнейшем только совершенствовалась.
Начну рассказ с полезного примера. Представим ситуацию, с которой я сталкивался не раз: во время разработки хранимого кода теряется свежая версия пакета, которая еще не попала в систему управления версиями. Попробуем достать исходный код из словаря, используя ретроспективные запросы.

Для примера создадим функцию, которая возвращает имя пользователя в БД:

SQL> create or replace function myfunc return varchar2
2 is
3 begin
4 return user;
5 end myfunc;
6 /

Меняем функцию, теперь она возвращает имя пользователя в операционной системе:

SQL> create or replace function myfunc return varchar2
2 is
3 begin
4 return sys_context('USERENV','OS_USER');
5 end myfunc;
6 /

Чтобы вернуться к первому варианту функции, выполним запрос (необходимы административные привилегии):

SQL> select s.text
2 from all_source as of timestamp (systimestamp - interval '10' minute) s
3 where s.type = 'FUNCTION'
4 and s.name = 'MYFUNC'
5 order by s.line;

6 rows selected

Второй вариант отката с помощью пакета DBMS_FLASHBACK:

SQL> select text from all_source where type = 'FUNCTION' and name = 'MYFUNC' order by line;

TEXT
----------------------------------------------------
function myfunc return varchar2
is
begin
return sys_context('USERENV','OS_USER');
end myfunc;

6 rows selected

SQL> select dbms_flashback.get_system_change_number from dual;

SQL> exec dbms_flashback.enable_at_system_change_number(1060120);

PL/SQL procedure successfully completed

SQL> select text from all_source where type = 'FUNCTION' and name = 'MYFUNC' order by line;

6 rows selected

SQL> exec dbms_flashback.disable;

PL/SQL procedure successfully completed

Для работы ретроспективных запросов необходимо установить параметр инициализации UNDO_MANAGEMENT=AUTO. Кроме того, на возможность отката влияют размер табличного пространства UNDO и параметр UNDO_RETENTION (в секундах).

Выходим на уровень эксперта! 50 оттенков экзамена 1Z0-047 (сертификация Oracle Database SQL Certified Expert)

Всем привет! В этой статье пойдет речь об одной из базовых сертификаций от ORACLE — Oracle Database SQL Certified Expert.

image

Чтобы получить сертификат, нужно сдать экзамен 1Z0-047.

Стоит экзамен для разных стран по-разному. Для Азербайджана – это 150 USD. Также есть опция купить тесты для практики от Transcender вместе с ваучером на экзамен (bundle). Это обойдется Вам в 200 USD. И это выгодней, нежели покупать тесты отдельно.

Готовился сам по следующим книгам и документам + практика на базе:

Не могу сказать, что экзамен простой.

Поэтому решил поделиться примочками и скрытыми уловками, которые Вас там поджидают.

1. SQL является декларативным языком программирования, который описывает какие вычисления следует произвести, но не как. Как — это удел императивных языков.

2. Когда Вас просят оценить код либо схему или таблицу, не тратьте время на подробное изучение таковых. Сначала изучите вопрос полностью. Возможно, Вам даже и не понадобятся ни таблица, ни схема, ни SQL-выражение.

3. Максимальная размерность типа NUMBER – 38 знаков.

4. Маска для даты по умолчанию – DD-MON-YY. Хоть и видны только две последние цифры года, по умолчанию все равно хранятся все четыре.

5. Самая распространённая форма для транзакционных БД – это 3-я нормальная форма.

6. FOREIGN KEY может быть привязан не обязательно к PRIMARY KEY. Единственное условие – данное поле должно быть UNIQUE.

7. Максимальная размерность VARCHAR2, NVARCHAR2, RAW:

  • 32767 байт – если MAX_STRING_SIZE = EXTENDED
  • 4000 байт – если MAX_STRING_SIZE = STANDARD

9. Размерность фракционных секунд для TIMESTAMP (всех подвидов) – может быть от 0 до 9. Но по умолчанию – 6.

10. Всего на экзамене рассматриваются:

  • 5 DML команд: SELECT, INSERT, UPDATE, DELETE, MERGE
  • 8 DDL команд: CREATE, ALTER, DROP, RENAME, TRUNCATE, COMMENT, FLASHBACK, PURGE
  • 2 DCL команды: GRANT, REVOKE
  • 3 TCL команды: COMMIT, ROLLBACK, SAVEPOINT

12. Количество джойнов = количество таблиц в джойнах – 1.

13. Использовать имя таблицы или алиасы в USING запрещено!

14. SELECT реализует основные три концепции: PROJECTION, SELECTION, JOINING.

15. Будьте внимательны к пунктуации. Составители тестов могут преднамеренно допустить ошибку в коде!

16. Любая арифметическая операция с NULL обязательно вернет NULL.

17. Ошибочно предполагать, что результат арифметической операции с датами также будет типа даты. Нет. Как правило, тип ответа либо типа INTERVAL, либо типа NUMBER.

18. DISTINCT можно использовать с любой из агрегирующих функций.

19. Порядок выполнения команд в обычном запросе:

  • FROM
  • WHERE
  • GROUP BY
  • HAVING
  • SELECT
  • ORDER BY

21. Чтобы дать привилегию всем юзерам, надо дать ее PUBLIC.

22. У INDEX-ов и CONSTRAINT-ов – свой неймспейс.

23. Агрегирующие функции запрещены в блоке WHERE.

24. GROUP BY может быть использован без HAVING, но HAVING – может быть использован только с GROUP BY.

25. CONSTRAINT типа NOT NULL не может быть создана вне описания поля при создании таблицы, а только вместе с описанием поля.

26. В функции MONTHS_BETWEEN() при подстановке параметров разрешается в качестве первого параметра ставить меньшую дату, а потом большую. Просто ответ будет отрицательным.

27. Тип DATE не может хранить фракционные секунды и часовые пояса.

28. Вместе с ROLLUP можно использовать любую агрегирующую функцию.

29. Группирующие функции могут быть вложены максимум на 2 уровня.

30. В ORDER BY к колонке можно обратиться 3-мя способами:

  • По имени колонки.
  • По ее алиасу.
  • По порядковому номеру.

32. В разделе FROM может быть бесконечное количество вложенных подзапросов, но в разделе WHERE – максимум 255.

33. Всего существует 3 вида подзапросов: SINGLE-ROW, MULTIPLE-ROW и CORRELATED.

34. Отсчет символов в строке начинается с 1, а не с 0.

35. Единственный SET OPERATOR, при котором строки не сортируются – UNION ALL.

36. Случаи, когда транзакция насильно завершается:

  • Пользователь сам издал команду COMMIT или ROLLBACK.
  • Пользователь издал любую DDL или DCL команду.
  • Сессия пользователя истекла.
  • Сломался ORACLE (Не дай Бог, конечно!)
  • Поля внешних ключей.
  • Поля, наиболее часто используемые в WHERE, GROUP BY и ORDER BY.

39. То, что COUNT(1) быстрее COUNT(*) – всего лишь миф.

40. Невозможно поменять часовой пояс БД, если есть хотя бы одна таблица с полем типа TIMESTAMP WITH LOCAL TIME ZONE.

41. Функция может принять от 0 или более параметров. Но возвращает всегда 1 значение. Не больше и не меньше.

42. COUNT никогда не сможет вернуть NULL. При отсутствии строк вернет 0.

43. SELECT COUNT (ALL DUMMY) FROM DUAL – синтаксически верный запрос.

44. SEMIJOIN – это запрос с использованием оператора EXISTS.

45. Если был вызван NEXTVAL, то счетчик сработает независимо от того успешно ли был выполнен запрос или нет.

46. Если был создан синоним для объекта, а объект ликвидирован, то синоним продолжает существовать.

47. FLASHBACK TABLE невозможно откатить.

48. Для n выражений, CUBE возвращает 2 в степени n группировок.

49. SQL, PL/SQL и JAVA являются нативными языками для ORACLE DB.

50. Для формирования иерархического запроса, наличие START WITH или CONNECT BY – обязательно!

Совместное использование Flashback Transaction Query и Flashback Versions Query

Средство Flashback Versions Query позволяет извлекать различные версии строки, вместе с их уникальными идентификаторами, временными метками версии строки, номерами SCN и т.п. Оно показывает, что было в строке, и что случилось с ней. Средство Flashback Transactions Query, с другой стороны, не только идентифицирует тип операции, выполненный с каждой версией строки, но также предоставляет код SQL, необходимый для возврата ее в оригинальное состояние. Оно показывает, как вернуться к предыдущей версии строки.

Возможности этих двух средств можно комбинировать, используя их последовательно для проведения аудита и связанных с ним действий. Рассмотрим пример, демонстрирующий, как комбинировать средства Flashback Versions Query и Flashback Transactions Query для отмены нежелательных изменений в данных.

Для начала воспользуемся Flashback Versions Query для идентификации всех версий строки в определенной таблице, которые изменились за определенный период времени, как показано в листинге ниже (это идентично первому листингу в данной статье).

Предположим, что в листинге выше идентифицирована вторая строка, которая показывает операцию удаления (D). По ошибке один из пользователей неправильно удалил строку. Все, что потребуется сделать, чтобы получить корректный SQL-оператор для отмены этого удаления — это взять идентификатор транзакции (XID) из этого результата Flashback Versions Query и найти его в представлении FLASHBACK_TRANSACTION_QUERY.В листинге ниже показан запрос, который нужно выполнить.

Запрос из листинга выше дает точный оператор SQL, необходимый для отмены операции удавления, которая выполнена транзакцией с идентификатором XID, равным 0020030002D. Как видите, Flashback Versions Query и Flashback Transaction Query представляют собой взаимодополняющие средства. Их можно использовать вместе не только для отмены логических ошибок данных, но также для проведения аудита транзакций в базе данных. С помощью этих двух средств можно точно выяснить, как определенная строка получила определенный набор значений, и затем при необходимости извлечь операторы SQL, необходимые для отмены этих изменений.

Oracle Flashback Reduces Recovery Time from Hours to Minutes

Despite preventive measures, human errors do happen. Oracle Database Flashback Technologies are a unique and rich set of data recovery solutions that enable reversing human errors by selectively and efficiently undoing the effects of a mistake. Before Flashback, it might take minutes to damage a database but hours to recover it. With Flashback, correcting an error takes about as long as it took to make it. In addition, the time required to recover from this error is not dependent on the database size, a capability unique to the Oracle Database.

Flashback Technologies Features

Overview

Flashback supports recovery at all levels including the row, transaction, table, and the entire database. Flashback provides an ever growing set of features to view and rewind data back and forth in time, namely:

  • Flashback Database: restore the entire database to a specific point-in-time, using Oracle-optimized flashback logs, rather than via backups and forward recovery.
  • Flashback Table: easily recover tables to a specific point-in-time, useful when a logical corruption is limited to one or a set of tables instead of the entire database.
  • Flashback Drop: recover an accidentally dropped table. It restores the dropped table, and all of its indexes, constraints, and triggers, from the Recycle Bin (a logical container of all dropped objects).
  • Flashback Transaction: undo the effects of a single transaction, and optionally, all of its dependent transactions. via a single PL/SQL operation or by using an Enterprise Manager wizard.
  • Flashback Transaction Query: see all the changes made by a specific transaction, useful when an erroneous transaction changed data in multiple rows or tables.
  • Flashback Query: query any data at some point-in-time in the past. This powerful feature can be used to view and logically reconstruct corrupted data that may have been deleted or changed inadvertently.
  • Flashback Versions Query: retrieve different versions of a row across a specified time interval instead of a single point-in-time.
  • Total Recall: efficiently manage and query long-term historical data. Total Recall automatically tracks every single change made to the data stored inside the database and maintains a secure, efficient and easily accessible archive of historical data.

The Flashback features offer the capability to query historical data, perform change analysis, and perform self-service repair to recover from logical corruptions while the database is online. With Oracle Flashback Technology, you can indeed undo the past.

Использование средства Flashback Transaction Query

Для опроса представления FLASHBACK_TRANSACTION_QUERY понадобится системная привилегия SELECT ANY TRANSACTION. Это представление содержит столбцы, позволяющие идентифицировать временную метку транзакции, пользователя, выполнившего транзакцию, тип операции, выполненной в процессе транзакции, а также сегменты отмены, необходимые для извлечения исходной строки. В листинге ниже показана структура представления FLASHBACK_TRANSACTION_QUERY.

Представление FLASHBACK_TRANSACTION_QUERY включает следующие столбцы.

На заметку! Если в столбце OPERATION находится значение UNKNOWN, это значит, что в табличном пространстве отмены недостаточно информации, чтобы корректно идентифицировать точный тип операции транзакции.

  • LOGON_USER, TABLE_NAME и TABLE_OWNER представляют имя пользователя, имя таблицы и имя схемы.
  • UNDO_SQL показывает точный оператор SQL, который необходимо выполнить для отмены транзакции. Вот пример типа данных, который можно встретить в столбце UNDO_SQL:

В случае если любая из таблиц, участвующих в операции Flashback Transaction Query, содержит связанные строки, или если используются кластеризованные таблицы,перед применением Flashback Transaction Query в базе данных следует включить дополнительное протоколирование. Это делается с помощью следующего оператора SQL:

Приведенный ниже запрос отобразит все транзакции, как зафиксированные, так и активные, во всех сегментах отмены:

Запрос в листинге ниже показывает, как определить операцию, которая отменит транзакцию, и конкретный оператор SQL, который выполнит такую отмену:

Столбец OPERATION в листинге выше показывает, что за период времени, указанный в запросе, было выполнено две вставки. Столбец UNDO_SQL показывает точный оператор SQL, который потребуется выполнить для отмены изменений — эту информацию запрос извлекает из сегментов отмены. В этом простом примере мы видим только два оператора delete, которые вы должны выполнить, если захотите отменить вставки, показанные запросом. Однако транзакции обычно содержат несколько операторов DML, и в этом случае нужно применить отмену изменений в той последовательности, в которой это вернул запрос, чтобы корректно восстановить данные в их исходное состояние.

Совет. Если вы собираетесь пользоваться запросами Oracle Flashback Query или Oracle Flashback Transaction Query для исправления критичных ошибок данных, рассмотрите применение установки RETENTION_GARANTEE для табличного пространства отмены. Это гарантирует, что база данных сохранит необходимые не устаревшие данные отмены во всех сегментах отмены.

Средство Flashback Table

Средство Oracle Flashback Table позволяет восстанавливать таблицу по состоянию на определенный момент времени в прошлом. Это средство полагается на информацию отмены из сегментов отмены базы данных для выполнения восстановления к моменту времени, без восстановления каких-либо файлов данных или применения каких-то архивных файлов журналов повторного выполнения, что требуется при традиционном восстановлении базы к конкретному моменту времени. Средство Flashback Table можно использовать для отката изменений к прошедшему моменту времени, определенному временной меткой или номером SCN.

Поскольку для возврата состояния таблицы (вместо восстановления ваших файлов резервных копий) вы полагаетесь на данные отмены, переводить базу данных или какие-то ее табличные пространства в автономное (отключенное) состояние на период выполнения операции Flashback Table не потребуется. Oracle устанавливает монопольные блокировки DML на восстанавливаемую таблицу или таблицы, но эти таблицы остаются в онлайновом режиме.

На заметку! В Oracle Database 11g есть два средства Flashback, относящиеся к таблицам в целом. Первое — Flashback Table — позволяет вернуть таблицу к состоянию на определенный момент времени. Это средство целиком зависит от доступности необходимых данных отмены, и обсуждается в настоящей статье. Второе средство — Flashback Drop (FLASHBACK TABLE имя_таблицы TO BEFORE DROP) — позволяет извлечь таблицу, которая вообще была удалена. Это средство полезно при восстановлении базы к моменту времени и полагается в этом на корзину (Recycle Bin). Средство Flashback Drop я планирую рассмотреть в будущих статьях моего блога, посвященных восстановлению баз данных Oracle Database.

Как работает средство Flashback Table

Flashback Table использует информацию отмены для восстановления строк данных в блоках таблиц, измененных операторами DML вроде INSERT, UPDATE и DELETE. Давайте последовательно рассмотрим шаги операции Flashback Table.

На заметку! Объекты пользователя SYS восстановить не удастся.

Первым делом следует убедиться, что пользователь, выполняющий операцию Flashback Table, имеет все привилегии, которые могут быть либо FLASHBACK ANY TABLE,либо более специфичная объектная привилегия FLASHBACK на необходимой таблице. Пользователь должен также иметь на таблице привилегии SELECT, INSERT, DELETE и ALTER.

Операции ретроспективы (flashback) не предохраняют ROWID-идентификаторы Oracle, когда они восстанавливают строки в измененных блоках таблицы, поскольку при своей работе выполняют операции DML. Эти операции DML изменяют ROWID-идентификаторы затронутых строк, поэтому вы должны гарантировать разрешение перемещения строк в таблицах с использованием средства Flashback Table:

Разрешив перемещение строк в таблице, вы готовы выполнить ретроспективу таблицы на любой момент времени или к любому номеру SCN в прошлом, при условии наличия необходимой информации в табличном пространстве отмены.

Прежде чем применять средство Flashback Table, ознакомьтесь с его полным синтаксисом:

В этой статье будет показана только часть FLASHBACK TABLE. TO SCN | TIMESTAMP этого оператора FLASHBACK TABLE. В последней строке BEFORE DROP ссылается на средство FLASHBACK DROP, которое будет раскрыто в моих следующих статьях в блоге при обсуждении приемов восстановления баз данных Oracle.

Вот пример, показывающий, как выполнить ретроспективу таблицы к прошлому номеру SCN:

Совет. По завершении операции Flashback Table все индексы, относящиеся к таблицам в списке Flashback Table, также будут возвращены к состоянию на момент времени, к которому возвращается таблица. Однако статистика оптимизатора будет отражать текущие данные в таблице.

Можно также специфицировать время, задавая временную метку вместо номера SCN:

Эта команда FLASHBACK TABLE восстанавливает таблицу persons к состоянию на 7:00 30 января 2008 г.

Возврат таблицы на один день назад осуществляется с помощью следующего оператора:

Ретроспективу можно выполнить для более одной таблицы за раз, как показано в следующем примере (сначала необходимо удостовериться, что перемещение строк в таблице разрешено):

Операция Flashback Table выполняется “по месту”, в онлайновом режиме, и потому не требует перевода файлов данных или табличных пространств в автономное состояние, в отличие от традиционного восстановления к определенному моменту времени. СУБД Oracle Database по умолчанию отключает все связанные триггеры и заново включает их по завершении восстановления таблицы, хотя это поведение легко изменить, добавив конструкцию ENABLE TRIGGERS к оператору FLASHBACK TABLE:

В случае отсутствия достаточных данных отмены для возврата таблицы к старому состоянию возникает ошибка, показанная в листинге ниже, и это означает, что часть данных отмены была перезаписана. К сожалению, средство Flashback Table не поможет в этом случае, поскольку оно полностью полагается на присутствие необходимой информации отмены. Единственное решение в этом случае состоит в использовании табличного пространства отмены большего размера или включении средства гарантированного сохранения данных отмены.

Отмена операции Flashback Table

Если окажется, что результаты Flashback Table не удовлетворяют, можно снова выдать оператор FLASHBACK TABLE для возврата таблицы к состоянию, в котором она пребывала перед первым вызовом FLASHBACK TABLE.

Перед запуском операции Flashback Table важно всегда запоминать текущий номер SCN, чтобы при необходимости можно было отменить операцию повторным вызовом FLASHBACK TABLE. TO SCN. Текущий номер SCN базы данных отображается с помощью следующего запроса:

Ограничения средства Flashback Table

Со средством Flashback Table связано несколько ограничений, важнейшие из которых перечислены ниже.

  • Невозможно выполнять ретроспективу таблицы, принадлежащей SYS, восстановленных объектов или удаленной (remote) таблицы.
  • Невозможно выполнять ретроспективу таблицы к моменту, предшествовавшему любой операции DDL, которая включает изменения в структуре таблицы, такие как удаление столбца, усечение таблицы, добавление ограничения или выполнения операций, связанных с разделами, наподобие добавления или удаления раздела.
  • Оператор FLASHBACK включает единственную транзакцию, и операция Flashback либо полностью выполняется, либо нет. Если операция ретроспективы охватывает несколько таблиц, вернуться в состояние на заданный момент времени или номер SCN должны все эти таблицы либо ни одной из них.
  • Если Oracle обнаружит любое нарушение ограничений во время операции Flashback, операция будет отменена, и таблицы останутся в исходном состоянии.
  • При усечении таблицы или изменении любых атрибутов, не относящиеся к хранению (отличных от PCTFREE, INITTRANS и MAXTRANS), выполнять операцию ретроспективы к моменту, предшествовавшему этим изменениям, нельзя.

На заметку! Вся операция ретроспективы выполняется как одна транзакция

Flashback oracle что это

Your search did not match any results.

We suggest you try the following to help find what you’re looking for:

  • Check the spelling of your keyword search.
  • Use synonyms for the keyword you typed, for example, try “application” instead of “software.”
  • Try one of the popular searches shown below.
  • Start a new search.

Oracle Flashback Reduces Recovery Time from Hours to Minutes

Соображения по поводу Flashback Transaction Query

Относительно Flashback Transaction Query необходимо принимать во внимание следующие соображения.

  • Включайте минимальное дополнительное протоколирование, если операции имеют дело со связанными строками и специальными структурами хранения, такими как кластеризованные таблицы.
  • При опросе индекс-таблиц операция обновления всегда отображается как двухшаговая операция удаления/вставки.
  • Если запрос включает удаленную таблицу или удаленного пользователя, он вернет номера объектов и идентификаторы пользователей вместо имен объектов и имен пользователей.

Читайте также: