Средство Flashback Transaction служит для отмены нежелательной транзакции. Отменить можно не только одну нежелательную транзакцию, но также все зависимые от нее транзакции — единственным щелчком. Если для этого используется Database Control, а не процедура PL/SQL, то средство Flashback Transaction обеспечивает намного лучшую альтернативу по сравнению восстановлению резервных копий для отмены транзакций, поскольку при этом база данных Oracle остается в онлайновом режиме для пользователей.
Данные отмены — ключ к средству Flashback Transaction. База данных Oracle Database использует данные отмены для создания и выполнения необходимых компенсирующих транзакций, которые отменят нежелательную транзакцию.
Процедура TRANSACTION_BACKOUT анализирует зависимости транзакций и выполняет необходимые операции DML для отмены изменений, проведенных транзакцией. Выполнение этой процедуры также генерирует отчет о проведенных изменениях. Однако важно знать, что процедура не фиксирует автоматически проведенные ею операции DML, а ожидает явной фиксации транзакции и тогда делает результаты изменений постоянными.
Использование Flashback Transaction
Отменять транзакции можно либо через интерфейс Database Control, либо выполняя процедуры PL/SQL. Чтобы отменить транзакцию вручную, используйте процедуру DBMS_FLASHBACK.TRANSACTION_BACKOUT. Параметры процедуры TRANSACTION_BACKOUT показаны ниже.
PROCEDURE TRANSACTION_BACKOUT
Argument Name Type In/Out Default?
---------------------------- ----------------- ------ --------
NUMTXNS NUMBER IN
XIDS XID_ARRAY IN
OPTIONS BINARY_INTEGER IN DEFAULT
SCNHINT NUMBER IN DEFAULT
PROCEDURE TRANSACTION_BACKOUT
Argument Name Type In/Out Default?
---------------------------- ----------------- ------ --------
NUMTXNS NUMBER IN
XIDS XID_ARRAY IN
OPTIONS BINARY_INTEGER IN DEFAULT
TIMEHINT TIMESTAMP IN
PROCEDURE TRANSACTION_BACKOUT
Argument Name Type In/Out Default?
---------------------------- ----------------- ------ --------
NUMTXNS NUMBER IN
NAMES TXNAME_ARRAY IN
OPTIONS BINARY_INTEGER IN DEFAULT
SCNHINT NUMBER IN DEFAULT
PROCEDURE TRANSACTION_BACKOUT
Argument Name Type In/Out Default?
---------------------------- ----------------- ------ --------
NUMTXNS NUMBER IN
NAMES TXNAME_ARRAY IN
OPTIONS BINARY_INTEGER IN DEFAULT
TIMEHINT TIMESTAMP IN
Как видите, процедура перегружена. Вот что означают ее разные параметры.
- NUMTXNS. Показывает количество транзакций, подлежащих отмене.
- NAMES. Определяет список транзакций для возврата, который можно передать в форме массива, используя XID-идентификаторы или имена транзакций.
- TIMEHINT. Позволяет специфицировать время, если транзакции идентифицируются по именам.
- SCNHINT. Позволяет специфицировать номер SCN для идентификации транзакций.
- OPTIONS. Позволяет специфицировать параметры возврата. Можно использовать следующие значения параметра OPTIONS.
- Cascade. Используйте это для возврата дочерних транзакций перед возвратом родительских транзакций.
- Nocascase. Используйте это, если транзакция не имеет никаких зависимых транзакций.
- Nocascase_force. Используйте это для возврата транзакций, игнорируя все зависимые транзакции.
- Nocascase_only. Используйте это для возврата только изменений, проведенных в неконфликтующих строках транзакции.
Мониторинг возврата транзакций
Для просмотра отчетов, сгенерированных выполнением процедуры TRANSACTION_BACKOUT можно опрашивать представления словаря данных DBA_FLASHBACK_TXN_STATE и DBSA_FLASHBACK_TXN_REPORT.
Теперь рассмотрим механизмы Flashback Transaction Query и Flashback Table более подробно в этой статье.