Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Модели транзакций 2011 10_02Ред.docx
Скачиваний:
11
Добавлен:
26.08.2019
Размер:
185.33 Кб
Скачать

Свойства транзакций. Способы завершения транзакций

Транзакция является последовательностью операций, выполненных как одна логическая единица работы.

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

В настоящий момент выделяют следующие типы транзакций:

  • плоские или классические транзакции

  • цепочечные транзакции

  • вложенные транзакции.

Классические транзакции. Иногда классические транзакции называют ACID-транзакциями.

Плоские, или традиционные, транзакции, характеризуются четырьмя классическими свойствами: атомарности, согласованности, изолированности, долговечности (прочности) — ACID (Atomicity, Consistency, Isolation, Durability). Упомянутые выше свойства означают следующее:

Атомарность - транзакция должна быть атомарной единицей работы; должны быть выполнены либо все входящие в нее модификации данных, либо ни одно из них не должно быть выполнено.

Согласованность - по завершении, транзакция должна оставить все данные в согласованном состоянии. В реляционной базе данных к модификациям транзакции должны быть применены все правила для обеспечения целостности всех данных. Все внутренние структуры данных должны быть правильными в конце транзакции.

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

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

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

Долговечность - после завершения транзакции произведенные ею действия занимают постоянное место в системе. Те изменения в данных, которые были ею произведены, не могут быть потеряны ни при каких обстоятельствах Изменения сохраняются даже в случае системного сбоя.

Возможны два варианта завершения транзакции.

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

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

Фиксация транзакцииэто действие, обеспечивающее запись на диск изменений в базе данных, которые были сделаны в процессе выполнения транзакции. Если все операторы выполнены успешно и в процессе выполнения транзакции не произошло никаких сбоев программного или аппаратного обеспечения, транзакция фиксируется.

До тех пор пока транзакция не зафиксирована, допустимо аннулирование этих изменений, восстановление базы данных в то состояние, в котором она была на момент начала транзакции. Фиксация транзакции означает, что все результаты выполнения транзакции становятся постоянными. Они станут видимыми другим транзакциям только после того, как текущая транзакция будет зафиксирована. До этого момента все данные, затрагиваемые транзакцией, будут "видны" пользователю в состоянии на начало текущей транзакции.

Откат транзакцииэто действие, обеспечивающее аннулирование всех изменений данных, которые были сделаны операторами SQL в теле текущей незавершенной транзакции. Если в процессе выполнения транзакции случилось нечто такое, что делает невозможным ее нормальное завершение, база данных должна быть возвращена в исходное состояние.

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

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

Например, компонент Database Engine обеспечивает следующее:

  • Блокирующие средства, которые сохраняют изоляцию транзакций.

  • Регистрирующие средства, которые гарантируют длительность транзакции. Даже если в аппаратных средствах сервера, операционной системе или экземпляре Database Engine произойдет сбой, после перезапуска экземпляр использует журналы транзакций для автоматического отката любых незавершенных транзакций до момента сбоя системы.

  • Возможности управления транзакциями, которые реализуют атомарность и согласованность транзакции. После начала транзакции она должна быть успешно завершена, иначе экземпляр компонента Database Engine отменяет все изменения данных, сделанные с начала транзакции.

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

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