0302_Попов_Билоблоцкий_Л10. Управление транзакциями и блокировками
Скачать 293.06 Kb.
|
МИНОБРНАУКИ РОССИИ Санкт-Петербургский государственный электротехнический университет «ЛЭТИ» им. В.И. Ульянова (Ленина) Кафедра САПР Отчет по лабораторной работе №10 по дисциплине «Распределенные базы данных и базы знаний» Тема: Управление транзакциями и блокировками
Санкт-Петербург 2022 1. Цель работы Получить представление о транзакциях и блокировках. 2. Ход выполнения работы 2.1. Упражнение 1 –Обновить запись в таблице Person.Contact выполнив транзакцию. 1) Скрипт, выполняющий транзакцию (рис.2.1.1). SQL-скрипт создающий таблицу с ограничениями /* Starts a transaction to read the record of Linda Gonzales and update her first name. Second select shows the uncommitted update. @@trancount shows the number of open transactions. */ 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' Рис.2.1.1. Выполнение транзакции 2.2. Упражнение 2 – Откатить внесенные в таблицу изменения отменив транзакцию 1) Скрипт, хранимую процедуру для GetDiscountsForCategory. (рис.2.2.1). SQL-скрипт, отменяющий транзакцию: /* Starts a transaction to read the record of Dominic Gonzalez and update his first name. Second SELECT shows the uncommitted update. @@trancount showS the number of open transactions. Then the transaction is rolled back and the record read again. */ 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.2.1. Откат совершенной транзакции 2.3. Упражнение 3 – Просмотреть сведений о блокировках при выполнении транзакции и при её откате. 1) Скрипт, просматривающий сведения о транзакциях. (рис.2.3.1 – 2.3.2). SQL-скрипт, создающий хранимую процедуру: SELECT resource_type, request_mode, request_type, request_status, request_session_id FROM sys.dm_tran_locks /* Update a record in the Person.Contact table in the AdventureWorks database. */ 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. ROLLBACK TRANSACTION Рис.2.3.1. Создание хранимой процедуры Рис.2.3.2. Монитор активности после транзакции После отката транзакции: Рис.2.3.3. Откат транзакции 2.4. Упражнение 4 – Применить настройки для блокировки транзакций 1) Скрипт, совершающий транзакцию с предварительной настройкой блокировки (рис.2.4.1.1). SQL-скрипт, совершающий транзакцию: /* Read and update a record in the Person.Contact table in the AdventureWorks database. */ USE AdventureWorks SET TRANSACTION ISOLATION LEVEL SERIALIZABLE SET lock_timeout 5000 BEGIN TRANSACTION SELECT * FROM Person.Contact WHERE ContactID = 10 UPDATE Person.Contact SET FirstName = 'Frances' WHERE ContactID = 6 -- For the purpose of the exercise, COMMIT TRANSACTION or ROLLBACK TRANSACTION are not used. SELECT @@spid AS 'SPID' -- Use the SPID to identify the connection when using sp_lock. -- ROLLBACK TRANSACTION Рис.2.4.1.1 Совершение транзакции с предварительной настройкой блокировки 2) Скрипт, запрос из системной таблицы (рис.2.4.1.2) SQL-скрипт, совершающий запрос: SELECT resource_type, request_mode,request_type, request_status, request_session_id FROM sys.dm_tran_locks Рис.2.4.1.2. Выполненный запрос 3. Вывод В ходе выполнения лабораторной работы были изучены способы применения транзакций для обновления записей в таблице, этапы работы и ход выполнения транзакций, способы просмотра сведений о блокировках и процессах, настройка параметров блокировки и проверка результата. Список литературы Образовательные ресурсы SQL Microsoft//Azure SQL for Beginners, [Электронный ресурс] Режим доступа: https://learn.microsoft.com/ru-ru/sql/sql-server/educational-sql-resources?view=sql-server-ver15 (дата обращения 13.10.2022). |