Фиксация и откат транзакций в Oracle

Вы должны четко понимать два фундаментальных термина, касающихся транзакций: фиксация (commiting) и откат (rolling back) транзакций. Ниже кратко объясняются оба термина. 

Фиксация транзакции

Когда вы фиксируете транзакцию, скажем, посредством оператора COMMIT, Oracle делает все изменения, выполненные всеми операторами SQL в рамках этой транзакции,постоянной частью базы данных. Прежде чем Oracle зафиксирует результаты транзакции, он делает следующее.

  • Генерирует информацию отмены (undo), которая состоит из значений данных,подлежащих модификации, до изменений. Эти данные сохраняются в сегменте undo, расположенном в табличном пространстве undo.
  • Он также генерирует данные повторного выполнения (redo), содержащие изменения в блоках данных и в блоках отката, в буфер журнала повторного выполнения.База данных может писать на диск содержимое буферов журнала повторного выполнения перед фиксацией транзакции.
  • Проводит изменения в буферах базы данных, находящихся в SGA. База данных может писать модифицированные буферы на диск перед фиксацией транзакции.

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

  • База данных назначает и записывает SCN для фиксируемой транзакции.
  • Писатель журналов пишет элементы журнала повторного выполнения в файл журнала повторного выполнения на диске из буфера журнала повторного выполнения в SGA; он также записывает SCN транзакции в файл журнала повторного выполнения, помечая тем официальную фиксацию транзакции.
  • База данных освобождает все блокировки таблиц и строк.
  • База данных помечает транзакцию как завершенную.

Откат транзакции

Отменить изменения, выполненные транзакцией, которые еще не были зафиксированы, можно с помощью команды ROLLBACK. В то время как журнал повторного выполнения содержит все изменения, проведенные в транзакции, сегмент отмены (undo) содержит все старые значения, которые существовали до момента проведения изменений. Вы можете либо откатить изменения, проведенные всей транзакцией, либо просто вернуться к маркеру, который поместили ранее внутри транзакции, называемому точкой сохранения (savepoint). Существует несколько типов отката, среди которых перечисленные ниже.

  • Откат, запрошенный пользователем.
  • Откат, произошедший из-за ненормального прерывания работы процесса или экземпляра.
  • Откат незафиксированных транзакций во время восстановления.
  • Откат уровня оператора, произошедший из-за ошибки выполнения этого оператора.Независимо от причины отката, процедура всегда одна и та же.
  • База данных использует данные в виде, который они имели до изменения в табличном пространстве undo, чтобы отменить все изменения, проведенные во время транзакции.
  • База данных освобождает все блокировки транзакции и таблицы.
  • База данных завершает транзакцию.

 

Вас заинтересует / Intresting for you:

Oracle Personal Edition
Oracle Personal Edition 5202 просмотров Надин Tue, 21 Nov 2017, 13:32:12
Oracle alerts: генерируемые се...
Oracle alerts: генерируемые се... 4485 просмотров Алексей Вятский Tue, 21 Nov 2017, 13:18:05
Установка Oracle 11g на Linux
Установка Oracle 11g на Linux 15069 просмотров Илья Дергунов Tue, 21 Nov 2017, 13:18:05
Дискретные и автономные транза...
Дискретные и автономные транза... 7172 просмотров Дэн Tue, 25 Sep 2018, 04:21:26
Войдите чтобы комментировать