Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пак Новакова + / LabSQL3(6-11)ЯрославцеваСоловьёв.doc
Скачиваний:
50
Добавлен:
03.06.2014
Размер:
1.52 Mб
Скачать

Часть 3-10. Управление транзакциями и блокировками

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

Задание: Использование операторов BEGIN TRANSACTION и COMMIT TRANSACTION, чтобы понять, как влияют данные операции на изменение данных.

Упражнение 1 - Применение транзакций

Откроем файл Tran1.sql. В сценарии производится обновление записи в таблице Person.Contact. Инструкция SELECT и глобальная переменная @@trancount используютcя, чтобы показать ход выполнения транзакции. Нашли комментарий START TRANSACTION HERE и добавили команду BEGIN TRANSACTION.

Транзакция все еще активна и блокировки удерживаются. Внесенные изменения не зафиксированы в базе данных. Вставим команду COMMIT TRANSACTION после комментария END TRANSACTION HERE. Теперь изменения будут зафиксированы.

USE AdventureWorks

-- START TRANSACTION HERE

BEGIN TRANSACTION

SELECT @@trancount AS 'Transaction Count'

SELECT FirstName, MiddleName, LastName FROM Person.Contact WHERE ContactID = 342

UPDATE Person.Contact SET FirstName = 'Lin' WHERE ContactID = 342

-- END TRANSACTION HERE

COMMIT TRANSACTION

SELECT FirstName, MiddleName, LastName FROM Person.Contact WHERE ContactID = 342

SELECT @@trancount AS 'Transaction Count'

Запустим запрос и посмотрим результат:

Рис 1. Применение тразакции

В итоге изменения в базе данных зафиксировались.

Упражнение 2 - Выполнение отката транзакций

Откроем файл Tran2.sql. В сценарии с помощью команды UPDATE обновляется другая запись в таблице Person.Contact. Команда SELECT и глобальная переменная @@trancount используются, чтобы показать ход выполнения транзакции.

USE AdventureWorks

BEGIN TRANSACTION

SELECT @@trancount AS 'Transaction Count'

SELECT FirstName, MiddleName, LastName FROM Person.Contact WHERE ContactID = 7454

UPDATE Person.Contact SET FirstName = 'Dom' WHERE ContactID = 7454

SELECT FirstName, MiddleName, LastName FROM Person.Contact WHERE ContactID = 7454

SELECT @@trancount AS 'Transaction Count'

-- END TRANSACTION HERE

ROLLBACK TRANSACTION

SELECT FirstName, MiddleName, LastName FROM Person.Contact WHERE ContactID = 7454

SELECT @@trancount AS 'Transaction Count'

Рис 2. Результат отката

Упражнение 3 - Просмотр сведений о блокировках

  1. Открываем Activity Monitor. Выбираем опцию «Процессы». Посмотрим сведения по разделам:

Рис 3. Монитор активности

  1. Напишем запрос к динамическому представлению в текущем соединении.

Рис 4. Результат запроса

  1. Открываем файл Lock1.sql. В сценарии присутствует команда BEGIN TRANSACTION , но нет команд ROLLBACK TRANSACTION и COMMIT TRANSACTION.

Выполняем:

USE AdventureWorks

BEGIN TRANSACTION

UPDATE Person.Contact

SET FirstName = 'Fran'

WHERE ContactID = 6

-- For the purpose of the exercise, COMMIT TRANASACTION or ROLLBACK TRANSACTION are not used.

SELECT @@spid AS 'spid'

-- Use the SPID to identify the connection when using sys.dm_tran_locks.

Рис. 5. Результат

Далее пишим запрос:

SELECT resource_type,request_type,request_status,request_session_id

FROM sys.dm_tran_locks

Рис. 6. Результат запроса

  1. Добавляем в сценарий команду ROLLBACK, чтобы убедиться в том, что блокировки сняты.

Рис. 7