Існують різні моделі транзакцій, які можуть бути класифіковані на підставі різних властивостей, що включають структуру транзакції, паралельність всередині транзакції, тривалість і т. Д.
На даний момент виділяють наступні типи транзакцій: плоскі або класичні транзакції, ланцюгові транзакції і вкладені транзакції.
Плоскі, або традиційні, транзакції, характеризуються чотирма класичними властивостями: атомарности, узгодженості, ізольованості, довговічності (міцності) - ACID (Atomicity, Consistency, Isolation, Durability). Іноді традиційні транзакції називають ACID-транзакціями. Згадані вище властивості означають наступне:
- Властивість атомарности (Atomicity) виражається в тому, що транзакція повинна бути виконана в цілому або не виконано зовсім.
- Властивість узгодженості (Consistency) гарантує, що в міру виконання транзакцій дані переходять з одного узгодженого стану в інше - транзакція не руйнує взаємну узгодженість даних.
- Властивість ізольованості (Isolation) означає, що конкуруючі за доступ до бази даних транзакції фізично обробляються послідовно, ізольовано один від одного, але для користувачів це виглядає так, як ніби вони виконуються паралельно.
- Властивість довговічності (Durability) трактується наступним чином: якщо транзакція завершена успішно, то ті зміни в даних, які були нею зроблені, не можуть бути втрачені ні за яких обставин (навіть в разі подальших помилок).
Можливі два варіанти завершення транзакції. Якщо всі оператори .виполнени успішно і в процесі виконання транзакції не відбулося ніяких збоїв програмного чи апаратного забезпечення, транзакція фіксується.
Фіксація транзакції - це дію, що забезпечує запис на диск змін в базі даних, які були зроблені в процесі виконання транзакції.
До тих пір поки транзакція не зафіксована, допустимо анулювання цих змін, відновлення бази даних у те стан, в якому вона була на момент початку транзакції. Фіксація транзакції означає, що всі результати виконання транзакції стають постійними. Вони стануть видимими іншим транзакцій тільки після того, як поточна транзакція буде зафіксована. До цього моменту всі дані, які поставлені транзакцією, будуть «видно» користувачеві в стані на початок поточної транзакції.
Якщо в процесі виконання транзакції сталося щось таке, що робить неможливим її нормальне завершення, база даних повинна бути повернута в початковий стан. Відкат транзакції - це дію, що забезпечує анулювання всіх змін даних, які були зроблені операторами SQL в тілі поточної незавершеною транзакції.
Кожен оператор в транзакції виконує свою частину роботи, але для успішного завершення всієї роботи в цілому потрібно безумовне завершення всіх їх операторів. Групування операторів в транзакції повідомляє СУБД, що вся ця група повинна бути виконана як єдине ціле, причому таке виконання має підтримуватися автоматично.
У стандарті ANSI / ISO SQL визначені модель транзакцій і функції операторів COMMIT і ROLLBACK. Стандарт визначає, що транзакція починається з першого SQL-оператора, ініційованого користувачем або утримується в програмі, що змінює поточний стан бази даних. Усі наступні SQL-оператори складають тіло транзакції. Транзакція завершується одним з чотирьох можливих шляхів (рис. 11.1):
- оператор COMMIT означає успішне завершення транзакції; його використання робить постійними зміни, внесені в базу даних в рамках поточної транзакції;
- оператор ROLLBACK перериває транзакцію, скасовуючи зміни, зроблені в базі даних в рамках цієї транзакції; нова транзакція починається одразу ж після використання ROLLBACK;
- успішне завершення програми, в якій була ініційована поточна транзакція, означає успішне завершення транзакції (начебто використали оператор COMMIT);
- помилкове завершення програми перериває транзакцію (начебто використали оператор ROLLBACK).
У цій моделі кожен оператор, який змінює стан БД, розглядається як транзакція, тому при успішному завершенні цього оператора БД переходить в новий стійкий стан.
У перших версіях комерційних СУБД була реалізована модель транзакцій ANSI / ISO. Надалі в СУБД SYBASE була реалізована розширена модель транзакцій, яка включає ще ряд додаткових операцій. У моделі SYBASE використовуються наступні чотири оператори:
- Оператор BEGIN TRANSACTION повідомляє про початок транзакції. На відміну від моделі в стандарті ANSI / ISO, де початок транзакції неявно задається першим оператором модифікації даних, в моделі SYBASE початок транзакції задається явно за допомогою оператора початку транзакції.
- Оператор COMMIT TRANSACTION повідомляє про успішне завершення транзакції. Він еквівалентний оператору COMMIT в моделі стандарту ANSI / ISO. Цей оператор, як і оператор COMMIT, фіксує всі зміни, які проводилися в БД в процесі виконання транзакції.
- Оператор SAVE TRANSACTION створює усередині транзакції точку збереження, яка відповідає проміжному станом БД, збереженому на момент виконання цього оператора. В операторі SAVE TRANSACTION може стояти ім'я точки збереження. Тому в ході виконання транзакції може бути запомнено кілька точок збереження, що відповідають декільком проміжним станам.
- Оператор ROLLBACK має дві модифікації. Якщо цей оператор використовується без додаткового параметра, то він інтерпретується як оператор відкату всієї транзакції, тобто в цьому випадку він еквівалентний оператору відкату ROLLBACK в моделі ANSI / ISO. Якщо ж оператор відкату має параметр і записаний у вигляді ROLLBACK В, то він інтерпретується як оператор часткового відкату транзакції в точку збереження В.
Мал. 11.1.Модель транзакцій ANSI / ISO
Принципи виконання транзакцій в розширеній моделі транзакцій представлені на рис. 11.2. На малюнку оператори позначені номерами, щоб нам зручніше було простежити хід виконання транзакції в усіх допустимих випадках.
Мал. 11.2.Прімери виконання транзакцій в розширеній моделі
Транзакція починається явним оператором початку транзакції, який має в нашій схемі номер 1. Далі йде оператор 2, який є оператором пошуку і не змінює поточний стан БД, а наступні за ним оператори 3 і 4 переводять базу даних вже в новий стан. Оператор 5 зберігає це нове проміжний стан БД і позначає його як проміжний стан в точці А. Далі йдуть оператори 6 і 7, які переводять базу даних в новий стан. А оператор 8 зберігає цей стан як проміжний стан в точці В. Оператор 9 виконує введення нових даних, а оператор 10 проводить деяку перевірку умови 1; якщо умова 1 виконано, то справджується оператор 11, який проводить відкат транзакції в проміжний стан В. Це означає, що наслідки дій оператора 9 як би стираються і база даних знову повертається в проміжний стан В, хоча після виконання оператора 9 вона вже перебувала в новому стані. І після відкоту транзакції замість оператора 9, який виконувався раніше зі стану В БД, виконується оператор 13 введення нових даних, і далі управління передається оператору 14. Оператор 14 знову перевіряє умова, але вже деякий повое умова 2; якщо умова виконана, то управління передається оператору 15, який виконує відкат транзакції в проміжний стан А, тобто всі оператори, які змінювали БД, починаючи з 6 і закінчуючи 13, вважаються невиконаними, тобто результати їх виконання зникли і ми знову перебуваємо в стані А, як після виконання оператора 4. Далі управління передається оператору 17, який оновлює вміст БД, після цього управління передається оператору 18, який пов'язаний з перевіркою умови 3. Перевірка закінчується або передачею управління оп торії 20, який фіксує транзакцію, і БД переходить в новий стійкий стан, і змінити його в рамках поточної транзакції неможливо. Або, якщо управління передано оператору 19, то транзакція відкочується до початку і БД повертається в свій початковий стан, а всі проміжні стану тут вже перевірені, і виконати операцію відкату в ці проміжні стану після виконання оператора 19 неможливо.
Звичайно, розширена модель транзакції, запропонована фірмою SYBASE, підтримує набагато більш гнучкий механізм виконання транзакцій. Точки збереження дозволяють встановлювати маркери всередині транзакції таким чином, щоб була можливість скасування тільки частини роботи, виконаної в транзакції. Доцільно використовувати точки збереження в довгих і складних транзакціях, щоб забезпечити можливість скасування зміни для певних операторів. Однак це обумовлює додаткові витрати ресурсів системи - оператор виконує роботу, а зміни потім скасовуються; зазвичай удосконалення в логіці обробки можуть виявитися більш оптимальним рішенням.
Чи знаєте Ви, низькочастотні електромагнітні хвилі частотою менше 100 КГц докорінно відрізняються від більш високих частот падінням швидкості електромагнітних хвиль пропорційно кореню квадратному їх частоти від 300 тис. Км / с при 100 кГц до приблизно 7 тис км / с при 50 Гц.