Транзакция (информатика): различия между версиями

* [[Журнализация изменений]] (write ahead logging, WAL)
* [[механизм теневых страниц]] (shadow paging)<ref>[http://zeus.sai.msu.ru:7000/database/articles/aries/ Семейство алгоритмов ARIES<!-- Заголовок добавлен ботом -->]</ref>.
В обоих случаях, блокировки должны быть расставлены на всю информацию, которая обновляется. В зависимости от уровня изоляции и [[имплементация|имплементации]], блокировки записи также расставляются на информацию, которая была прочитана транзакцией.
 
При ''упреждающей журнализации'', используемой в [[Sybase]] и [[MS SQL Server]] до версии 2005, все изменения записываются в журнал, и только после успешного завершения — в базу данных. Это позволяет СУБД вернуться в рабочее состояние после неожиданного падения системы. ''Теневые страницы'' содержат копии тех страниц базы данных на начало транзакции, в которых происходят изменения. Эти копии активизируются после успешного завершения. Хотя теневые страницы легче реализуются, упреждающая журнализация более эффективна<ref> Gray, J., McJones, P., Blasgen, M., Lindsay, B., Lorie, R., Price, T., Putzolu, F., and Traiger, I. The recovery manager of the System R database manager. ACM Comput. Surv. 13, 2 (June 1981).</ref>
 
Дальнейшее развитие технологий управления базами данных привело к появлению безблокировочных технологий. Идея контроля занад параллельным доступом с помощью временных меток (timestamp-based concurrency control) была развита и привела к появлению многоверсионной архитектуры [[MVCC]]. Эти технологии не нуждаются ни в журнализации изменений, ни в теневых страницах. Архитектура, реализованная в [[Oracle (СУБД)|Oracle]] 7.х и выше, записывает ''старые'' версии страниц в специальный сегмент отката, но они все ещё доступны для чтения. Если транзакция при чтении попадает на страницу, временная метка которой новее начала чтения, данные берутся из сегмента отката (то есть используется «старая» версия). Для поддержки такой работы ведётся журнал транзакций, но в отличие от «упреждающей журнализации», он не содержит данных. Работа с ним состоит из трёх логических шагов:
# Записать намерение произвести некоторые операции
# Выполнить задание, копируя оригиналы изменяемых страниц в сегмент отката