Пиши Дома Нужные Работы

Обратная связь

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

ALTER TABLE FETCH REVOKE
CREATE GRANT SELECT
DELETE INSERT TRUNCATE TABLE
DROP OPEN UPDATE

 

Если соединение уже начало транзакцию, эти инструкции не начинают новую транзакцию.

Транзакция продолжает оставаться активной до тех пор, пока не будет выдана инструкция COMMIT или ROLLBACK(см. далее). После фиксации или отката первой транзакции экземпляр компонента Database Engine автоматически запускает новую транзакцию каждый раз, когда на соединении выполняется какая-либо из этих инструкций. Для запуска таких транзакций ничего делать не нужно; необходимо только фиксировать или выполнять откат каждой транзакции. Режим неявных транзакций формирует непрерывную цепь транзакций.

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

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

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

Для определения явных транзакций используются инструкции Transact-SQL BEGIN TRANSACTION, COMMIT TRANSACTION, COMMIT WORK, ROLLBACK TRANSACTION, ROLLBACK WORKиSAVE TRANSACTION.

BEGIN TRANSACTION - отмечает точку запуска явной транзакции для соединения.

BEGIN { TRAN | TRANSACTION }

[ { transaction_name | @tran_name_variable }

[ WITH MARK [ 'description' ] ]

]

[ ; ]

transaction_name – имя, присвоенное транзакции. Аргумент transaction_name должен соответствовать правилам для идентификаторов, однако не допускаются идентификаторы длиннее 32 символов. Имена транзакций используются только для самых внешних вложенных инструкций BEGIN...COMMIT или BEGIN...ROLLBACK.



@tran_name_variable - имя пользовательской переменной, содержащей допустимое имя транзакции. Переменная должна быть иметь тип данных char, varchar, nchar или nvarchar. Если переменной передается больше 32 символов, используются только 32 первых символа, а остальные усекаются.

WITH MARK [ 'description' ] - указывает, что транзакция отмечается в журнале. Значение аргумента description — это строка, описывающая отметку.

Если используется предложение WITH MARK, необходимо указать имя транзакции.Предложение WITH MARK позволяет восстановить журнал транзакций до именованной отметки.

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

Она сохраняет результаты всех операций, которые имели место после выполнения последней команды COMMIT или ROLLBACK.

COMMIT { TRAN | TRANSACTION } [ transaction_name | @tran_name_variable ] ]

[ ; ]

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

Каждая транзакция продолжается до тех пор, пока она не завершается без ошибок и выполняется инструкция COMMIT TRANSACTION, чтобы внести изменения в базу данных.

 

В случае возникновения ошибок все изменения удаляются с помощью инструкции ROLLBACK TRANSACTION.

ROLLBACK TRANSACTIONилиROLLBACK WORK - используется для удаления транзакции, если были ошибки. Все измененные транзакцией данные возвращаются в то состояние, в котором они были в момент запуска транзакции. Ресурсы, заблокированные транзакцией, высвобождаются.

ROLLBACK { TRAN | TRANSACTION }

[ transaction_name | @tran_name_variable

| имя_точки_сохранения | @savepoint_variable ]

[ ; ]

 

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

 

Она отменяет только те транзакции, которые были выполнены с момента выдачи последней команды COMMIT или ROLLBACK.

Команда SAVEпредназначена для установки в транзакции особых точек, куда в дальнейшем может быть произведен откат (при этом отката всей транзакции не происходит).

SAVE { TRAN | TRANSACTION } { savepoint_name | @savepoint_variable }

[ ; ]

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

 

Поскольку с помощью команды SAVEPOINT крупные транзакции могут быть разбиты на меньшие и поэтому более управляемые группы, ее применение является одним из способов управления транзакциями

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

 

В следующем примере показано, как присвоить транзакции имя.

DECLARE @TranName VARCHAR(20);

SELECT @TranName = 'MyTransaction';

 

BEGIN TRANSACTION @TranName;

USE AdventureWorks;

DELETE FROM AdventureWorks.HumanResources.JobCandidate

WHERE JobCandidateID = 13;

 

COMMIT TRANSACTION @TranName;

GO

В следующем примере показано, как пометить транзакцию. Транзакция CandidateDelete помечена.

BEGIN TRANSACTION CandidateDelete

WITH MARK N'Deleting a Job Candidate';

GO

USE AdventureWorks;

GO

DELETE FROM AdventureWorks.HumanResources.JobCandidate

WHERE JobCandidateID = 13;

GO

COMMIT TRANSACTION CandidateDelete;

GO

 

СУБД сохраняет состояние БД в текущей точке и присваивает сохраненному состоянию имя точки сохранения;

 

Пример. Использование точек сохранения

BEGIN TRAN

SAVE TRANSACTION point1

В точке point1 сохраняется первоначальное состояние таблицы Товар

 

DELETE FROM Товар WHERE КодТовара=2

SAVE TRANSACTION point2

В точке point2 сохраняется состояние таблицы Товар без товаров с кодом 2.

 

DELETE FROM Товар WHERE КодТовара=3

SAVE TRANSACTION point3

В точке point3 сохраняется состояние таблицы Товар без товаров с кодом 2 и с кодом 3.

 

DELETE FROM Товар WHERE КодТовара<>1

ROLLBACK TRANSACTION point3

Происходит возврат в состояние таблицы без товаров с кодами 2 и 3, отменяется последнее удаление.

 

SELECT * FROM Товар

Оператор SELECT покажет таблицу Товар без товаров с кодами 2 и 3.

 

ROLLBACK TRANSACTION point1

Происходит возврат в первоначальное состояние таблицы.

 

SELECT * FROM Товар

COMMIT

Первоначальное состояние сохраняется.

Вложенные транзакции

Вложенными называются транзакции, выполнение которых инициируется из тела уже активной транзакции.

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

Завершение транзакции верхнего уровня откладывается до завершения вложенных транзакций.

Если транзакция самого нижнего (вложенного) уровня завершена неудачно и отменена, то все транзакции верхнего уровня, включая транзакцию первого уровня, будут отменены.

 

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






ТОП 5 статей:
Экономическая сущность инвестиций - Экономическая сущность инвестиций – долгосрочные вложения экономических ресурсов сроком более 1 года для получения прибыли путем...
Тема: Федеральный закон от 26.07.2006 N 135-ФЗ - На основании изучения ФЗ № 135, дайте максимально короткое определение следующих понятий с указанием статей и пунктов закона...
Сущность, функции и виды управления в телекоммуникациях - Цели достигаются с помощью различных принципов, функций и методов социально-экономического менеджмента...
Схема построения базисных индексов - Индекс (лат. INDEX – указатель, показатель) - относительная величина, показывающая, во сколько раз уровень изучаемого явления...
Тема 11. Международное космическое право - Правовой режим космического пространства и небесных тел. Принципы деятельности государств по исследованию...



©2015- 2024 pdnr.ru Все права принадлежат авторам размещенных материалов.