Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие по БД new.doc
Скачиваний:
11
Добавлен:
18.09.2019
Размер:
687.62 Кб
Скачать
      1. Модели транзакций. Свойства. Способы завершения Поддержка транзакций

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

«Транзакция является логической единицей работы, выполняемой в базе данных. И может быть представлена отдельной программой, являться частью алгоритма или даже отдельной командой (например, командой INSERT или UPDATE языка SQL) и включать произвольное количество операций, выполняемых в базе данных. С точки зрения базы данных, выполнение программы некоторого приложе­ния может расцениваться как серия транзакций, в промежутках между которыми выполняется некоторая обработка данных, осуществляемая вне среды базы данных. Для иллюстрации концепции транзакции рассмотрим два отношения:

Staff (Sno, FName, LName, Address, Tel__No, Position, Sex, DOB, Salary, NIN, Bno)

Property_for_Rent (Pno, Street, Area, City, Pcode, Type, Rooms, Rent, Ono, Sno, Bno)

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

Более сложная транзакция предназначена для удаления сведений о работнике, заданном его учетным номером x. В этом случае, помимо удаления соответствующего кортежа из отношения Staff, по­требуется найти все кортежи отношения Property_for_Rent, описывающие объекты недвижимости, за которые отвечал данный работник, после чего назначить их неко­торому другому работнику, личный номер которого будет иметь значение new_sno, Если все указанные изменения не будут внесены до конца, база данных окажется в несогласованном состоянии - за объект недвижимости будет отвечать несуществую­щий работник компании.

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

Любая транзакция завершается одним из двух возможных способов. В случае ус­пешного завершения результаты транзакции фиксируются (commit) в базе данных, и последняя переходит в новое согласованное состояние. Если выполнение транзакции не увенчалось успехом, она отменяется. В этом случае в базе данных должно быть восстановлено то согласованное состояние, в котором она находилась до начала дан­ной транзакции. Этот процесс называется откатом (roll back) транзакции. Зафикси­рованная транзакция не может быть отменена. Если оказывается, что зафиксирован­ная транзакция была ошибочной, потребуется выполнить другую транзакцию, отме­няющую действия, выполненные первой транзакцией. В некоторых случаях эту транзакцию называют компенсирующей. Следует отметить, что отмененная транзак­ция может быть еще раз запущена позже и, в зависимости от причин предыдущего отказа, вполне успешно завершена и зафиксирована в базе данных.

Никакая СУБД не обладает внутренней возможностью установить, какие именно изменения должны быть восприняты как единое целое, образующее одну логическую транзакцию. Следовательно, должен существовать метод, позволяющий указывать границы каждой из транзакций извне, со стороны пользователя. В большинстве язы­ков манипулирования данными для указания границ отдельных транзакций исполь­зуются операторы BEGIN TRANSACTION, COMMIT и ROLLBACK (или их эквиваленты). Если эти ограничители не были использованы, вся выполняемая программа расценивается как единая транзакция. СУБД автоматически выполнит команду COMMIT при нор­мальном завершении этой программы. Аналогично, в случае ее аварийного заверше­ния в базе данных автоматически будет выполнена команда ROLLBACK.

Свойства транзакций

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

  • Атомарность. Это свойство типа "все или ничего". Любая транзакция представляет собой неделимую единицу работы, которая может быть либо выполнена вся целиком, либо не выполнена вовсе.

  • Согласованность. Каждая транзакция должна переводить базу данных из одного согласованного состояния в другое согласованное состояние.

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

  • Продолжительность. Результаты успешно завершенной (зафиксированной) транзакции должны сохраняться в базе данных постоянно и не должны быть утеряны в результате последующих сбоев.