- атомарность (atomity) - транзакция является неделимой, она выполняется полностью или не выполняется вообще; если транзакция прерывается на середине, то база данных должна остаться в том состоянии, которое она имела до начала транзакции;
- параллельность (concurrency) - эффект от параллельного выполнения нескольких транзакций должен быть таким же, как от их последовательного выполнения; выполняющиеся транзакции не должны накладываться друг на друга;
- целостность (integrity) - транзакция переводит база данных из одного непротиворечивого (целостного) состояния в другое; в ходе выполнения транзакции база данных может временно пребывать в нецелостном состоянии;
- долговременность (duration) - после того, как транзакция завершена и зафиксирована, результат ее выполнения гарантированно сохраняется в базе данных.
AUTOCOMMIT
. Когда этот режим выключен, все приложение составляет одну транзакцию (если в нем не задано явное управление транзакциями), которая завершается с завершением приложения. Когда же этот режим включен, каждый SQL-оператор в приложении выполняется как отдельная транзакция, даже если в приложении имеются операторы явного управления транзакциями. Оператор является минимальной единицей транзакции: некоторые операторы могут включать в себя сложные действия над множеством строк, но все эти операции СУБД выполняет как одну транзакцию.При выключенном режиме
AUTOCOMMIT
приложение может само управлять разбиением выполняемых им действий на транзакции. Первый SQL-оператор, выполняемый в приложении, начинает новую транзакцию. Все последующие операторы продолжают эту транзакцию, пока не встретится оператор COMMIT
или ROLLBACK
.Оператор фиксации -
COMMIT
- завершает текущую транзакцию и фиксирует ее результаты. После выполнения оператора COMMIT
результаты транзакции гарантированно сохраняются в базе данных и начинается новая транзакция. Оператор отката - ROLLBACK
- завершает текущую транзакцию "с откатом". После выполнения этого оператора восстанавливается то состояние базы данных, в котором она была перед началом транзакции, и начинается новая транзакция. При выполнении оператора COMMIT
или ROLLBACK
снимаются все наложенные в транзакции блокировки (о блокировках - см. ниже).Стандартом SQL/92 не предусматриваются какие-либо дополнительные возможности операторов
COMMIT
и ROLLBACK
, поэтому их стандартный синтаксис очень прост (см. рис.5.1).Рисунок 5.1 - Операторы
COMMIT
и ROLLBACK
SAVEPOINT
, и в операторе ROLLBACK
имеется возможность отката транзакции не к началу, а к указанной точке сохранения.С учетом этой возможности синтаксис операторов
SAVEPOINT
и ROLLBACK
в Oracle показан на рис. 5.2, а в DB2 (это новая возможность версии 7.1.) - на рис. 5.3.Рисунок 5.2 - Операторы
ROLLBACK
и SAVEPOINT
в OracleРисунок 5.3 - Операторы
ROLLBACK
и SAVEPOINT
в DB2SAVEPOINT
с тем же именем точки отменяет предыдущую точку сохранения.Выше мы отметили, что внутри транзакции состояние базы данных в принципе может быть нецелостным. В Oracle в описании ограничений целостности может быть задано ключевое слово
DEFERRED
(отсроченный) - для ограничения, проверка которого откладывается до окончания транзакции. Отключение ограничений может выполняться также оператором SET CONSTRAINT
, что соответствует стандарту SQL/92. В DB2 отключения ограничений целостности могут быть сделаны только явным образом - оператором SET INTEGRITY
. Подробное описание этих возможностей содержится в [7, 9].
Немає коментарів:
Дописати коментар