Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 17 BLOB +UDF.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
407.04 Кб
Скачать

3 Транзакции. Механизм транзакций

Современные СУБД являются многопользовательскими. Следовательно, всегда есть возможность одновременного обращения нескольких пользователей к одной базе данных, и даже – к одним и тем же данным. При этом возникает масса проблем, связанных с попытками одновременного изменения или удаления данных.

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

Все команды, выполняемые пользователями на сервере, производятся в теле транзакций. По умолчанию, каждая команда выполняется как отдельная транзакция. Пользователь может объединить несколько команд в одну транзакцию, явно указав ее начало и конец.

SQL Server 2000 поддерживает три способа определения транзакции:

  • явное

  • автоматическое

  • неявное (подразумеваемое)

Явные транзакции

Для явной транзакции требуется явное указание начала и конца транзакции:

Начало транзакции

BEGIN TRAN[SACTION]

[tran_name | @tran_name_var

[WITH MARK [‘descr’]]]

где

− tran_name – имя транзакции ( до 32 допустимых для именования символов) – используется для именования вложенных транзакций

− @tran_name_var – имя переменной типа char, nchar, varchar, nvarchar, содержащей имя транзакции – используется для именования вложенных транзакций

− WITH MARK – маркирует транзакцию в журнале транзакций для того, чтобы при восстановлении журнала транзакций, вернуть базу данных в состояние, предшествующее или следующее за отметкой

− Descr – текст отметки

Успешное завершение транзакции

COMMIT [WORK] |

COMMIT [TRAN[SACTION]

[tran_name | @tran_name_var] ]

Прерывание транзакции и ее откат

ROLLBACK [WORK] |

ROLLBACK [TRAN[SACTION]

[tran_name | @tran_name_var | savepoint_name | @savepoint_var ] ]

где

− @savepoint_name – имя контрольной точки

− @savepoint_var – имя переменной, в которой хранится имя контрольной точки

Автоматические транзакции

(autocommit transactions, по умолчанию в SQL Server 2000)

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

Переход в режим автоматических транзакций выполняется установкой параметра сервера IMPLICIT_TRANSACTION в положение OFF.

SET IMPLICIT_TRANSACTION OFF

Неявные (подразумеваемые) транзакции

(implicit transactions)

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

Автоматическое завершение транзакции в этом случае возможно, если сервер встречает одну из команд: ALTER TABLE, CREATE, DROP, SELECT, INSERT, DELETE, UPDATE, GRANT, REVOKE, OPEN, FETCH.

Переход в режим автоматических транзакций выполняется установкой параметра сервера IMPLICIT_TRANSACTION в положение ON.

SET IMPLICIT_TRANSACTION ON

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