й необхідно заблокувати ресурс Б, а в цей же час друга транзакція, що заблокувала ресурс Б, потребує блокування ресурсу А.
Кожна з цих транзакцій очікує, поки інша зніме свою блокування, і жодна з них не може завершитися, поки цього не станеться. Якщо не відбудеться зовнішнього впливу або одна з транзакцій завершиться з певної причини (наприклад, за часом очікування), то ця ситуація може тривати нескінченно.
Раніше взаимоблокировки представляли собою серйозну проблему, але тепер SQL Server дозволяє успішно вирішити її.
. 5.1 Створення взаимоблокировки
Найпростіше створити ситуацію взаимоблокировки в SQL Server за допомогою двох підключень в редакторі запитів утиліти Management Studio. Перша і друга транзакції намагаються оновити одні й ті ж рядки, проте в протилежному порядку.
Приклад. Помістіть код в перше вікно запиту і виконаєте його:
- Транзакція 1 - Крок 1
expert_dbTRANSACTIONOrders SET Mass= 1 000 WHERE ID= 1 008
Створіть у редакторі запитів друге вікно і помістіть в нього наступний код:
- Транзакція 2 - Крок 2expert_dbTRANSACTIONTransport SET MaxDistance= 1 000 WHERE ID= 1 Orders SET Distance= 100 WHERE ID= 1 008 TRANSACTION
Друга транзакція очікує зняття блокування на рядок 1 018 в таблиці Orders.
Поверніться у перше вікно, додайте наступний код і запустіть запит.
- Транзакція 1 - Крок 3
Transport SET InRepair= 1 WHERE ID= 1 TRANSACTION
Транзакція 2 ще не завершена, оскільки очікує зняття блокування, тому все ще блокує рядок 1 в таблиці Transport. Транзакція 1 звертається до цієї рядку, продовжуючи блокувати дані. Таким чином 2 транзакції заблокували виконання один одного. Через короткий проміжок часу SQL Server виявить взаємоблокування і автоматично усуне її (малюнок 15).
Малюнок 15 - Створення взаимоблокировки
3 Завдання
Для свого варіанту РБД (див. завдання теми 3) виконати наступне:
1. Вивчити роботу служби DTC.
2. Створити план виконання кількох розподілених транзакцій.
. Виконати запуск транзакцій всіма можливими способами, описаними в роботі.
. Виконати підтвердження і відкат транзакцій.
. Створити блокування різних типів. Виключити блокування.
. Зробити висновки по роботі.
Контрольні питання
1. Визначення розподіленої транзакції і її призначення.
2. Які існують способи виконання транзакцій?
. Яка структура журналу транзакцій?
. Які відмінності розподілених транзакцій Transact-SQL від MS DTC?
. У чому полягає особливість використання розподілених транзакцій замість локальних?
. Які типи блокувань транзакцій існують?
. Як видалити взаимоблокировки?
Висновок
У цій роботі, проаналізувавши та дослідивши предметну область, був вивчений характер роботи бізнесу вантажоперевезень, а також розроблено та реалізовано проект автоматизації процесу вантажоперевезень, розгорнута розподілена база даних компанії, виконана реплікація, створені десятки розподілених запитів. Все це дозволило спростити обробку замовлень, прискорити їх прийом і дозволило збирати статистику, що сприятливо позначилося на прибутку компанії.
Список використаних джерел
.Малихіна М. П. Бази даних. Основи, проектування, використання.- БХВ-Петербург, 2006. - 528 с.
.Нільсен Пол. Microsoft SQL Server 2005. Біблія користувача. Пер. з англ.- М .: И.Д. Вільямс raquo ;, 2008. - один тисяча двісті тридцять дві с.
.Мартін Фаулер, Кендалл Скотт - UML. Основи - 2 002.
.Павловская Т.А. C #. Програмування на мові високого рівня: підручник для вузів.- СПб .: Питер, 2007. - 432 с.
5.Шілдт Г. Повний довідник по C #. Пер. з англ.- М .: Вільямс, +2004.
.Орлов С.А. Технології розробки програмного забезпечення.- СПб .: Пітер, 2003. - 480с.
.Леоненков А. Самовчитель UML.- BHV Санкт-Петербург, 2001. - 304с.
.Іванова Г.С. Технологія програмування: Підручник для вузів.- М .: Изд-во МГТУ ім. Н.Е. Баумана, 2 002.
.Ляхевіч А.Г. Лекції з мережних технологій, 2002р.- 165 с
Додаток А
Лістинг вико...