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

м
Бот: добавление заголовков в сноски; исправление двойных сносок, см. ЧаВо
(объединил по итогу обсуждения)
м (Бот: добавление заголовков в сноски; исправление двойных сносок, см. ЧаВо)
 
== Обработка транзакций ==
Обработка транзакций направлена на поддержание компьютерной системы (как правило, [[БД|базы данных]] или каких-либо современных [[файловая система|файловых систем]]) в известном, согласованном состоянии, путём обеспечения того, чтобы любые операции, осуществляющиеся в системе, являются взаимозависимыми и либо все успешно завершены, либо полностью и успешно отменены.<ref name="автоссылка1">Ahmed K. Elmagarmid (Editor), Transaction Models for Advanced Database Applications, Morgan-Kaufmann, 1992, {{ISBN|1-55860-214-3}}</ref>
 
Например, рассмотрим типичную банковскую транзакцию, которая включает в себя перемещение 700 долларов с сберегательного счета клиента на расчетный счет клиента. Эта транзакция является одной операцией для банка, но она включает в себя, по крайней мере, две отдельные операции в компьютерных терминах: зачисляются на депозитный счет 700 долларов, а также кредитуется расчетный счет на 700 долларов. Если дебетовые операции прошли успешно, а кредитные нет (или наоборот), в книгах банка не будет остатка на конец дня. Поэтому должен быть способ гарантировать, что обе операции либо имели успех, либо провалились, так что никогда не бывает каких-либо несоответствий в базе данных банка в целом. Обработка транзакций предназначена для обеспечения этого.
Обработка транзакций защищает от аппаратных и программных ошибок, которые могут оставить транзакцию, завершенной частично, с системой, оставленной в неизвестном, противоречивом состоянии. Если в компьютерной системе происходит сбой в середине транзакция, обработка транзакций гарантирует, что все операции в любых незафиксированных (то есть, не полностью обработанных) транзакциях будут отменены.
 
Транзакции оформлены в строгом хронологическом порядке. Если сделка N+1 намерена коснуться той же части базы данных что и транзакция N, транзакция N+1 не начинается до момента совершения транзакции N. До совершения любых транзакций, все остальные транзакции, затрагивающие ту же часть системы, также должны быть завершены; не может быть никаких «дырок» в последовательности предыдущих транзакций.<ref name="автоссылка2">Gerhard Weikum, Gottfried Vossen, ''Transactional information systems: theory, algorithms, and the practice of concurrency control and recovery'', Morgan Kaufmann, 2002, {{ISBN|1-55860-508-8}}</ref><ref>Ahmed K.name="автоссылка1" Elmagarmid (Editor), Transaction Models for Advanced Database Applications, Morgan-Kaufmann, 1992, {{ISBN|1-55860-214-3}}</ref>
 
=== Методология ===
;[[Rollback (SQL)|Откат]] ({{lang-en|rollback}})
 
Системы обработки транзакций обеспечивают целостность базы данных при помощи записи промежуточного состояния базы данных перед её изменением, а затем, используя эти записи, восстанавливают базу данных до известного состояния, если транзакция не может быть совершена. Например, копии информации в базе данных до её изменения транзакцией, делаются системой перед транзакцией, которая может сделать любые изменения (иногда это называют ''before image''). Если какая-либо часть транзакции не удается до её совершения, эти копии используются для восстановления базы данных в состояние, в котором она находилась до начала транзакции (''Rollback'').<ref>Gerhard Weikum,name="автоссылка2" Gottfried Vossen, ''Transactional information systems: theory, algorithms, and the practice of concurrency control and recovery'', Morgan Kaufmann, 2002, {{ISBN|1-55860-508-8}}</ref>
 
;Прогон ({{lang-en|rollforward}})
 
Кроме того, можно вести отдельный журнал всех изменений базы данных (иногда это называется ''after images''); это не требует отката неудачных операций, но это полезно для обновления базы данных в случае отказа базы данных, поэтому некоторые системы обработки транзакций обеспечивают эту функцию. Если база данных отказывает совсем, она должна быть восстановлена из последней резервной. Резервные копии не будут отражать операции, совершенные после её создания. Однако, как только будет восстановлена база данных, журнал ''after images'' может быть применен к базе данных (''rollforward''), чтобы привести её в актуальное состояние. Любые транзакции, которые находятся в процессе на момент сбоя, могут быть свернуты. Результат представляет собой базу данных в известном согласованном состоянии, которое включает результаты всех транзакций, совершенных до момента отказа.<ref>Gerhard Weikum,name="автоссылка2" Gottfried Vossen, ''Transactional information systems: theory, algorithms, and the practice of concurrency control and recovery'', Morgan Kaufmann, 2002, {{ISBN|1-55860-508-8}}</ref>
 
;[[Взаимная блокировка]] ({{lang-en|deadlocks}})