
- •1 Введення в транзакції
- •2 Acid-властивості транзакцій
- •3 Блокування
- •4 Управління транзакціями
- •5 Управління транзакціями в середовищі ms sql Server
- •5.1 Визначення транзакцій
- •5.2 Явні транзакції
- •5.3 Вкладені транзакції
- •6 Управління блокуваннями
- •7 "Мертві" блокування
- •8 Рівні ізоляції sql Server
4 Управління транзакціями
Під управлінням транзакціями розуміється здатність управляти різними операціями над даними, які виконуються усередині реляційної СУБД. Перш за все, мається на увазі виконання операторів INSERT, UPDATE і DELETE. Наприклад, після створення таблиці (виконання оператора CREATE TABLE ) не потрібно фіксувати результат: створення таблиці фіксується в базі даних автоматично. Так само за допомогою відміни транзакції не вдасться відновити тільки що видалену оператором DROP TABLE таблицю.
Після успішного виконання команд, укладених в тіло однієї транзакції, негайної зміни даних не відбувається. Для остаточного завершення транзакції існують так звані команди управління транзакціями, за допомогою яких можна або зберегти в базі даних всі зміни, що відбулися в ході її виконання, або повністю їх відмінити.
Існують три команди, які використовуються для управління транзакціями:
-
COMMIT – для збереження змін ;
-
ROLLBACK – для відміни змін ;
-
SAVEPOINT – для установки особливих точок повернення.
Після завершення транзакції вся інформація про проведені зміни зберігається або в спеціально виділеній оперативній пам'яті, або в тимчасовій області відкоту в самій базі даних до тих пір, поки не буде виконана одна з команд управління транзакціями. Потім всі зміни або фіксуються в базі даних, або відкидаються, а тимчасова область відкоту звільняється.
Команда COMMIT призначена для збереження в базі даних всіх змін, що відбулися в ході виконання транзакції. Вона зберігає результати всіх операцій, які мали місце після виконання останньої команди COMMIT або ROLLBACK .
Команда ROLLBACK призначена для відміни транзакцій, ще не збережених в базі даних. Вона відміняє тільки ті транзакції, які були виконані з моменту видачі останньої команди COMMIT або ROLLBACK .
Команда SAVEPOINT (точка збереження) призначена для установки в транзакції особливих крапок, куди надалі може бути проведений відкіт (при цьому відкоту всієї транзакції не відбувається). Команда має наступний вигляд:
SAVEPOINT ім’я_точки_збереження
Вона служить виключно для створення точок збереження серед операторів, призначених для зміни даних. Ім'я точки збереження в пов'язаній з нею групі транзакцій повинне бути унікальним.
Для відміни дії групи транзакцій, обмежених точками збереження, використовується команда ROLLBACK з наступним синтаксисом:
ROLLBACK TO ім’я_точки_збереження
Оскільки за допомогою команди SAVEPOINT крупне число транзакцій може бути розбито на менші і тому більш керовані групи, її вживання є одним із способів управління транзакціями.
5 Управління транзакціями в середовищі ms sql Server
5.1 Визначення транзакцій
SQL Server пропонує безліч засобів управління поведінкою транзакцій. Користувачі в основному повинні указувати тільки початок і кінець транзакції, використовуючи команди SQL або API (прикладного інтерфейсу програмування). Транзакція визначається на рівні з'єднання з базою даних і при закритті з'єднання автоматично закривається. Якщо користувач спробує встановити з'єднання знову і продовжити виконання транзакції, то це йому не вдасться. Коли транзакція починається, всі команди, виконані в з'єднанні, вважаються тілом однієї транзакції, поки не буде досягнутий її кінець.
SQL Server підтримує три види визначення транзакцій:
-
явне ;
-
автоматичне;
-
мається на увазі.
За умовчанням SQL Server працює в режимі автоматичного початку транзакцій, коли кожна команда розглядається як окрема транзакція. Якщо команда виконана успішно, то її зміни фіксуються. Якщо при виконанні команди відбулася помилка, то зроблені зміни відміняються і система повертається в первинний стан.
Коли користувачу знадобиться створити транзакцію, що включає декілька команд, він повинен явно вказати транзакцію.
Сервер працює тільки в одному з двох режимів визначення транзакцій: автоматичному або мається на увазі. Він не може знаходитися в режимі виключно явного визначення транзакцій. Цей режим працює поверх двох інших.
Для установки режиму автоматичного визначення транзакцій використовується команда:
SET IMPLICIT_TRANSACTIONS
При роботі в режимі неявного (мається на увазі) початку транзакцій SQL Server автоматично починає нову транзакцію, як тільки завершена попередня. Установка режиму визначення транзакцій, що мається на увазі, виконується за допомогою іншої команди:
SET IMPLICIT_TRANSACTIONS ON