Flashback oracle что это

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 /

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

Второй вариант отката с помощью пакета 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;

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;

SQL> exec dbms_flashback.disable;

PL/SQL procedure successfully completed

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

Источник

Инструкция FLASHBACK TABLE

Позволяет восстанавливать таблицы до состояния на заданный момент времени с помощью одной инструкции.

Восстанавливает табличные данные вместе со связанными индексами и ограничениями.

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

Flashback oracle что это. Смотреть фото Flashback oracle что это. Смотреть картинку Flashback oracle что это. Картинка про Flashback oracle что это. Фото Flashback oracle что это

Функция Oracle «Flashback Table» позволяет восстанавливать таблицы на заданный момент времени с помощью одной инструкции. Если база данных находится в интерактивном режиме, можно восстановить табличные данные вместе со связанными индексами и константами, отменяя изменения только в указанных таблицах.

Функция Flashback Table сходна со средством автоматического восстановления. Например, если пользователь случайно удалил из таблицы важные строки, а затем захотел восстановить удаленные строки, можно воспользоваться инструкцией FLASHBACK TABLE для восстановления таблицы на момент времени до удаления и просмотреть пропавшие строки в таблице.

При использовании инструкции FLASHBACK TABLE можно вернуть таблицу и ее содержимое в состояние на конкретный момент времени или к изменению системы с номером SCN.

Синтаксис FLASHBACK TABLE

Средство восстановления случайных изменений таблиц:

восстанавливает таблицу до состояния, существовавшего в более ранний момент времени;

преимущества: простота использования, доступность и быстрое выполнение;

выполняется на месте.

FLASHBACK TABLE[schema.]table[,
[ schema.]table ].
TO < TIMESTAMP | SCN >expr
[ < ENABLE | DISABLE >TRIGGERS ];

Flashback oracle что это. Смотреть фото Flashback oracle что это. Смотреть картинку Flashback oracle что это. Картинка про Flashback oracle что это. Фото Flashback oracle что это

Средство автоматического восстановления

Команда FLASHBACK TABLE является средством автоматического восстановления данных в таблице вместе со связанными атрибутами, такими как индексы и представления. Восстановление выполняется в базе данных, находящейся в интерактивном режиме, путем отката назад только последующих изменений заданной таблицы. По сравнению с традицион- ными механизмами восстановления эта функция обладает значительными преимуществами, такими как простота использования, доступность и более быстрое восстановление. Она также устраняет для администратора базы данных необходимость поиска и восстановления свойств приложения. Функция Flashback table не предназначена для восстановления физических повреждений данных, обусловленных плохим состоянием диска.

Использование инструкции FLASHBACK TABLE

Flashback oracle что это. Смотреть фото Flashback oracle что это. Смотреть картинку Flashback oracle что это. Картинка про Flashback oracle что это. Фото Flashback oracle что это

Синтаксис и примеры

Корзина является фактически таблицей словаря данных, содержащей сведения об удаленных объектах. Удаленные таблицы и все связанные объекты, такие как индексы, ограничения, вложенные таблицы и так далее, не удаляются и по-прежнему занимают место на диске. Они продолжают учитываться в дисковых квотах пользователя, пока специально не очищаются из корзины или пока не возникнет ситуация, когда они должны быть очищены базой данных из- за ограничений по месту, занимаемому таблицами.

SELECT * FROM RECYCLEBIN ;

Когда удаляют пользователя, все объекты, принадлежащие этому пользователю, не помещаются в корзину, а все объекты в корзине очищаются.

Корзину можно очистить с помощью следующей инструкции:

Источник

Flashback Transaction Query и Flashback Table в Oracle

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Совместное использование 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, необходимые для отмены этих изменений.

Средство 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 связано несколько ограничений, важнейшие из которых перечислены ниже.

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

Источник

12 Using Oracle Flashback Technology

This chapter explains how to use Oracle Flashback Technology in database applications.

Overview of Oracle Flashback Technology

Oracle Flashback Technology is a group of Oracle Database features that let you view past states of database objects or to return database objects to a previous state without using point-in-time media recovery.

With flashback features, you can:

Perform queries that return past data

Perform queries that return metadata that shows a detailed history of changes to the database

Recover tables or rows to a previous point in time

Automatically track and archive transactional data changes

Roll back a transaction and its dependent transactions while the database remains online

Undo data is persistent and survives a database shutdown. By using flashback features, you can use undo data to query past data or recover from logical damage. Besides using it in flashback features, Oracle Database uses undo data to perform these actions:

Roll back active transactions

Recover terminated transactions by using database or process recovery

Provide read consistency for SQL queries

For additional general information about flashback features, see Oracle Database Concepts

Application Development Features

In application development, you can use these flashback features to report historical data or undo erroneous changes. (You can also use these features interactively as a database user or administrator.)

Oracle Flashback Query

Use this feature to retrieve data for an earlier time that you specify with the AS OF clause of the SELECT statement. For more information, see «Using Oracle Flashback Query (SELECT AS OF)».

Oracle Flashback Version Query

Use this feature to retrieve metadata and historical data for a specific time interval (for example, to view all the rows of a table that ever existed during a given time interval). Metadata for each row version includes start and end time, type of change operation, and identity of the transaction that created the row version. To create an Oracle Flashback Version Query, use the VERSIONS BETWEEN clause of the SELECT statement. For more information, see «Using Oracle Flashback Version Query».

Oracle Flashback Transaction Query

Typically, you use Oracle Flashback Transaction Query with an Oracle Flashback Version Query that provides the transaction IDs for the rows of interest (see «Using Oracle Flashback Transaction Query with Oracle Flashback Version Query»).

Use this feature to set the internal Oracle Database clock to an earlier time so that you can examine data that was current at that time, or to roll back a transaction and its dependent transactions while the database remains online (see Flashback Transaction). For more information, see «Using DBMS_FLASHBACK Package».

Use Flashback Transaction to roll back a transaction and its dependent transactions while the database remains online. This recovery operation uses undo data to create and run the corresponding compensating transactions that return the affected data to its original state. (Flashback Transaction is part of DBMS_FLASHBACK package.) For more information, see «Using DBMS_FLASHBACK Package».

Flashback Data Archive (Oracle Total Recall)

Use Flashback Data Archive to automatically track and archive both regular queries and Oracle Flashback Query, ensuring SQL-level access to the versions of database objects without getting a snapshot-too-old error. For more information, see «Using Flashback Data Archive (Oracle Total Recall)».

Database Administration Features

These flashback features are primarily for data recovery. Typically, you use these features only as a database administrator.

Oracle Flashback Table

Use this feature to restore a table to its state at a previous point in time. You can restore a table while the database is on line, undoing changes to only the specified table.

Oracle Flashback Drop

Use this feature to recover a dropped table. This feature reverses the effects of a DROP TABLE statement.

Oracle Flashback Database

Use this feature to quickly return the database to an earlier point in time, by undoing all of the changes that have taken place since then. This is fast, because you do not have to restore database backups.

Configuring Your Database for Oracle Flashback Technology

Before you can use flashback features in your application, you or your database administrator must perform the configuration tasks described in these topics:

Configuring Your Database for Automatic Undo Management

To configure your database for Automatic Undo Management (AUM), you or your database administrator must:

Create an undo tablespace with enough space to keep the required data for flashback operations.

The more often users update the data, the more space is required. The database administrator usually calculates the space requirement.

For a fixed-size undo tablespace, Oracle Database automatically tunes the system to give the undo tablespace the best possible undo retention.

For an automatically extensible undo tablespace, Oracle Database retains undo data longer than the longest query duration and the low threshold of undo retention specified by the UNDO_RETENTION parameter.

Setting UNDO_RETENTION does not guarantee that unexpired undo data is not discarded. If the system needs more space, Oracle Database can overwrite unexpired undo with more recently generated undo data.

Specify the RETENTION GUARANTEE clause for the undo tablespace to ensure that unexpired undo data is not discarded.

Oracle Database Administrator’s Guide for more information about creating an undo tablespace and enabling AUM

Configuring Your Database for Oracle Flashback Transaction Query

To configure your database for the Oracle Flashback Transaction Query feature, you or your database administrator must:

Ensure that Oracle Database is running with version 10.0 compatibility.

Enable supplemental logging:

Configuring Your Database for Flashback Transaction

To configure your database for the Flashback Transaction feature, you or your database administrator must:

With the database mounted but not open, enable ARCHIVELOG :

Open at least one archive log:

If not done, enable minimal and primary key supplemental logging:

If you want to track foreign key dependencies, enable foreign key supplemental logging:

If you have very many foreign key constraints, enabling foreign key supplemental logging might not be worth the performance penalty.

Enabling Oracle Flashback Operations on Specific LOB Columns

To enable flashback operations on specific LOB columns of a table, use the ALTER TABLE statement with the RETENTION option.

Because undo data for LOB columns can be voluminous, you must define which LOB columns to use with flashback operations.

Granting Necessary Privileges

For Oracle Flashback Query and Oracle Flashback Version Query

To allow access to specific objects during queries, grant FLASHBACK and SELECT privileges on those objects.

To allow queries on all tables, grant the FLASHBACK ANY TABLE privilege.

For Oracle Flashback Transaction Query

Grant the SELECT ANY TRANSACTION privilege.

For DBMS_FLASHBACK Package

For Flashback Data Archive (Oracle Total Recall)

To allow a specific user to enable Flashback Data Archive on tables, using a specific Flashback Data Archive, grant the FLASHBACK ARCHIVE object privilege on that Flashback Data Archive to that user. To grant the FLASHBACK ARCHIVE object privilege, you must either be logged on as SYSDBA or have FLASHBACK ARCHIVE ADMINISTER system privilege.

To allow execution of these statements, grant the FLASHBACK ARCHIVE ADMINISTER system privilege:

CREATE FLASHBACK ARCHIVE

ALTER FLASHBACK ARCHIVE

DROP FLASHBACK ARCHIVE

To disable Flashback Data Archive for a table that has been enabled for Flashback Data Archive, you must either be logged on as SYSDBA or have the FLASHBACK ARCHIVE ADMINISTER system privilege.

Using Oracle Flashback Query (SELECT AS OF)

To use Oracle Flashback Query, use a SELECT statement with an AS OF clause. Oracle Flashback Query retrieves data as it existed at an earlier time. The query explicitly references a past time through a time stamp or System Change Number (SCN). It returns committed data that was current at that point in time.

Uses of Oracle Flashback Query include:

Recovering lost data or undoing incorrect, committed changes.

For example, if you mistakenly delete or update rows, and then commit them, you can immediately undo the mistake.

Comparing current data with the corresponding data at an earlier time.

For example, you can run a daily report that shows the change in data from yesterday. You can compare individual rows of table data or find intersections or unions of sets of rows.

Checking the state of transactional data at a particular time.

For example, you can verify the account balance of a certain day.

Simplifying application design by removing the need to store some kinds of temporal data.

Oracle Flashback Query lets you retrieve past data directly from the database.

Applying packaged applications, such as report generation tools, to past data.

Providing self-service error correction for an application, thereby enabling users to undo and correct their errors.

Example of Examining and Restoring Past Data

Suppose that you discover at 12:30 PM that the row for employee Chung was deleted from the employees table, and you know that at 9:30AM the data for Chung was correctly stored in the database. You can use Oracle Flashback Query to examine the contents of the table at 9:30 AM to find out what data was lost. If appropriate, you can restore the lost data.

Example 12-1 retrieves the state of the record for Chung at 9:30AM, April 4, 2004:

Example 12-1 Retrieving a Lost Row with Oracle Flashback Query

Example 12-2 restores Chung’s information to the employees table:

Example 12-2 Restoring a Lost Row After Oracle Flashback Query

Guidelines for Oracle Flashback Query

You can specify or omit the AS OF clause for each table and specify different times for different tables.

If a table is a Flashback Data Archive and you specify a time for it that is earlier than its creation time, the query returns zero rows for that table, rather than causing an error. (For information about Flashback Data Archives, see «Using Flashback Data Archive (Oracle Total Recall)».)

You can use the AS OF clause in queries to perform data definition language (DDL) operations (such as creating and truncating tables) or data manipulation language (DML) statements (such as INSERT and DELETE ) in the same session as Oracle Flashback Query.

To use the result of Oracle Flashback Query in a DDL or DML statement that affects the current state of the database, use an AS OF clause inside an INSERT or CREATE TABLE AS SELECT statement.

If a possible 3-second error (maximum) is important to Oracle Flashback Query in your application, use an SCN instead of a time stamp. See «General Guidelines for Oracle Flashback Technology».

You can create a view that refers to past data by using the AS OF clause in the SELECT statement that defines the view.

If you specify a relative time by subtracting from the current time on the database host, the past time is recalculated for each query. For example:

SYSTIMESTAMP refers to the time zone of the database host environment.

You can store the results by preceding Oracle Flashback Query with a CREATE TABLE AS SELECT or INSERT INTO TABLE SELECT statement. For example, this query reinserts into table employees the rows that existed an hour ago:

SYSTIMESTAMP refers to the time zone of the database host environment.

Using Oracle Flashback Version Query

Use Oracle Flashback Version Query to retrieve the different versions of specific rows that existed during a given time interval. A row version is created whenever a COMMIT statement is executed.

Specify Oracle Flashback Version Query using the VERSIONS BETWEEN clause of the SELECT statement. The syntax is:

where start and end are expressions representing the start and end, respectively, of the time interval to be queried. The time interval includes ( start and end ).

Oracle Flashback Version Query returns a table with a row for each version of the row that existed at any time during the specified time interval. Each row in the table includes pseudocolumns of metadata about the row version, described in Table 12-1. This information can reveal when and how a particular change (perhaps erroneous) occurred to your database.

Table 12-1 Oracle Flashback Version Query Row Data Pseudocolumns

Starting System Change Number (SCN) or TIMESTAMP when the row version was created. This pseudocolumn identifies the time when the data first had the values reflected in the row version. Use this pseudocolumn to identify the past target time for Oracle Flashback Table or Oracle Flashback Query.

SCN or TIMESTAMP when the row version expired.

Identifier of the transaction that created the row version.

Operation performed by the transaction: I for insertion, D for deletion, or U for update. The version is that of the row that was inserted, deleted, or updated; that is, the row after an INSERT operation, the row before a DELETE operation, or the row affected by an UPDATE operation.

Here is a typical use of Oracle Flashback Version Query:

You can use VERSIONS_XID with Oracle Flashback Transaction Query to locate this transaction’s metadata, including the SQL required to undo the row change and the user responsible for the change—see «Using Oracle Flashback Transaction Query».

Flashback Version Query allows index-only access only with IOTs (index-organized tables), but index fast full scan is not allowed.

Oracle Database SQL Language Reference for information about Oracle Flashback Version Query pseudocolumns and the syntax of the VERSIONS clause

Using Oracle Flashback Transaction Query

The column UNDO_SQL shows the SQL code that is the logical opposite of the DML operation performed by the transaction. You can usually use this code to reverse the logical steps taken during the transaction. However, there are cases where the SQL_UNDO code is not the exact opposite of the original transaction. For example, a SQL_UNDO INSERT operation might not insert a row back in a table at the same ROWID from which it was deleted.

This statement queries the FLASHBACK_TRANSACTION_QUERY view for transaction information, including the transaction ID, the operation, the operation start and end SCNs, the user responsible for the operation, and the SQL code that shows the logical opposite of the operation:

This statement uses Oracle Flashback Version Query as a subquery to associate each row version with the LOGON_USER responsible for the row data change:

If you query FLASHBACK_TRANSACTION_QUERY without specifying XID in the WHERE clause, the query scans many unrelated rows, degrading performance.

Oracle Database Backup and Recovery User’s Guide. for information about how a database administrator can use Flashback Table to restore an entire table, rather than individual rows

Oracle Database Administrator’s Guide for information about how a database administrator can use Flashback Table to restore an entire table, rather than individual rows

Using Oracle Flashback Transaction Query with Oracle Flashback Version Query

In this example, a database administrator does this:

Now emp and dept have one row each. In terms of row versions, each table has one version of one row. Suppose that an erroneous transaction deletes empno 111 from table emp :

Next, a transaction reinserts empno 111 into the emp table with a new employee name:

Results are similar to:

The results table rows are in descending chronological order. The third row corresponds to the version of the row in the table emp that was inserted in the table when the table was created. The second row corresponds to the row in emp that the erroneous transaction deleted. The first row corresponds to the version of the row in emp that was reinserted with a new employee name.

The database administrator identifies transaction 030002002B210000 as the erroneous transaction and uses Oracle Flashback Transaction Query to audit all changes made by this transaction:

Results are similar to:

To make the result of the next query easier to read, the database administrator uses these SQL*Plus commands:

To see the details of the erroneous transaction and all subsequent transactions, the database administrator performs this query:

Results are similar to:

Because the preceding query does not specify the XID in the WHERE clause, it scans many unrelated rows, degrading performance.

Using DBMS_FLASHBACK Package

The DBMS_FLASHBACK package provides the same functionality as Oracle Flashback Query, but Oracle Flashback Query is sometimes more convenient.

You must have the EXECUTE privilege on the DBMS_FLASHBACK package.

To use the DBMS_FLASHBACK package in your PL/SQL code:

Perform regular queries (that is, queries without special flashback-feature syntax such as AS OF ). Do not perform DDL or DML operations.

The database is queried at the specified past time.

Perform INSERT or UPDATE operations to modify the current database state by using the stored results from the past.

Using Flashback Transaction

The transactions being rolled back are subject to these restrictions:

They cannot have performed DDL operations that changed the logical structure of database tables.

They cannot use Large Object (LOB) Data Types:

They cannot use features that LogMiner does not support.

The features that LogMiner supports depends on the value of the COMPATIBLE initialization parameter for the database that is rolling back the transaction. The default value is the release number of the most recent major release.

Flashback Transaction inherits SQL data type support from LogMiner. Therefore, if LogMiner fails due to an unsupported SQL data type in a the transaction, Flashback Transaction fails too.

Some data types, though supported by LogMiner, do not generate undo information as part of operations that modify columns of such types. Therefore, Flashback Transaction does not support tables containing these data types. These include tables with BLOB, CLOB and XML type.

Oracle Data Guard Concepts and Administration for information about data type and DDL support on a logical standby database

Oracle Database SQL Language Reference for information about LOB data types

Oracle Database Utilities for information about LogMiner

Oracle Database Administrator’s Guide for information about the COMPATIBLE initialization parameter

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Pseudocolumn NameDescription