двофазною фіксацією транзакцій та дублюванням даних. Ці два методи відрізняються тим, що в першому випадку багато транзакцій працюють одночасно з однією розподіленою базою даних. У другому випадку кожна транзакція має змогу копіювати необхідні для її виконання дані з розподіленої бази даних і працювати з нею як зі своєю особистою базою даних, модифікувати ці дані, а потім після виконання транзакції повертати їх у розподілену базу даних.
Розглянемо підтримку транзакцій за допомогою механізму двофазної фіксаї^ії транзакції. При використанні цього методу транзакцію виконують у два етапи. Двофазна фіксація транзакцій спирається на такі правила.
1. Якщо хоча б один вузол не може з будь-яких причин зафіксувати транзакцію, то розподілена транзакція припиняється на всіх інших вузлах, які беруть участь у її виконанні.
2. Якщо всі вузли погоджуються з фіксацією транзакції, то вона фіксується на всіх вузлах, які беруть участь в її реалізації.
Перший етап, чи перша фаза, полягає в тому, що на вузлі, де виконуватимуть транзакцію, створюють процес-координатор, а на всіх інших вузлах — процеси-учасники. Спочатку процес-координатор розсилає повідомлення учасникам про початок транзакції, і кожний з них самостійно вирішує, чи може транзакція бути завершеною на даному вузлі. Учасники, готові завершити транзакцію, надсилають повідомлення на вузол-координатор про свою готовність до завершення транзакції. Учасники, які не зможуть зафіксувати свою частину транзакції, надсилають повідомлення про те, що транзакцію буде перервано. Координатор, зібравши повідомлення всіх учасників, вирішує долю транзакції згідно з правилами. Якщо всі учасники надіслали згоду, координатор надсилає повідомлення про глобальну фіксацію транзакції, згідно з яким вносяться зміни на всіх серверах. При відмові хоча б одного з учасників приймають рішення про припинення виконання транзакції і надсилають повідомлення про глобальне припинення тим учасникам, які надіслали згоду на виконання транзакції. Тим учасникам, які надіслали відмову на виконання транзакції, повідомлення можна не надсилати, оскільки вони самі в змозі прийняти рішення згідно з правилами двофазної фіксації транзакцій. Ця ситуація називається одностороннім припиненням виконання транзакції. В результаті на всіх серверах транзакція завершується однаково (фіксується або переривається). Якщо всі вузли мають змогу зафіксувати транзакцію, то всі перетворення виконують на всіх вузлах: якщо хоча б один вузол не в змозі зафіксувати результати транзакції, то її припиняють на всіх вузлах і виконують відкіт.
Протоколом обслуговування транзакцій передбачається обмін повідомленнями між координатором і учасниками двічі, тому цей механізм отримав назву двофазної фіксації транзакцій.
Механізм двофазного виконання транзакцій має ряд недоліків: одночасний захват всіх ресурсів може досить надовго заблокувати доступ до даних; крім того, вихід з ладу під час виконання транзакції того вузла мережі. який заблокував ресурси, призведе до блокування деяких даних усієї мережі доти, поки не буде відновлено його роботу.
Основні проблеми, які можуть виникнути при двофазній фіксації транзакцій — це забезпечення коректної поведінки системи в разі виходу з ладу сервера чи пошкодження ліній зв'язку. Тому організація розподіленої системи в даному варіанті потребує досить надійних та швидких ліній зв'язку.
Іншою проблемою, яка досить часто виникає при такій організації підтримування транзакцій, є вирішення конфліктів, коли одна транзакція вступає в конфлікт з іншою транзакцією з приводу доступу до певних даних. Тому системи, що базуються на двофазній фіксації транзакцій, повинні мати якийсь механізм вирішення конфліктів, пов'язаних з одночасним доступом.
Другим механізмом підтримки роботи транзакцій є дублювання (тиражування) даних. Суть його полягає в тому, що необхідні для виконання транзакції дані копіюють на той сервер, де їх оброблятимуть. Усі зміни, внесені іншими користувачами протягом виконання запиту, не впливають на його виконання, оскільки вони фіксуються в основних файлах і не відображуються в їх копіях. Такий механізм дає змогу завершити транзакцію з ланцюжком пошукових запитів будь-якої довжини, не порушивши логічної цілісності даних, а також є засобом уникання конфліктів під час роботи з базою даних. Наприклад, кілька користувачів можуть одночасно модифікувати одні й ті самі дані, не очікуючи один одного. Але коли змінені дані будуть повернені в основну базу даних, то вона може мати кілька версій, тому для таких систем потрібен механізм управління версіями.
Після успішного завершення транзакції зміни вносять на всі сервери у відповідні файли, які брали участь у виконанні транзакції. При цьому виникає потреба якимось чином забезпечити синхронізацію процесу тиражування змін на різних серверах, щоб база даних не втратила своєї цілісності. Можливі два режими тиражування змін: синхронний і асинхронний.
Синхронний режгш тиражування змін — це процес, при якому зміни поширюються одразу по всіх вузлах після їх виконання. Синхронний варіант внесення змін слід використовувати в тих інформаційних системах, які повинні функціонувати в режимі реального часу. Прикладом таких систем може бути автоматизована банківська система, в якій зміни залишку рахунків повинні відображатись одразу, щоб не було можливості виконати з ними якісь несанкціоновані дії. Цей варіант виконання транзакцій порівняно з їх двофазною фіксацією має деякі переваги. По-перше, запит виконують на одному сервері, при цьому не потрібно передавати дані і розподіляти виконання запиту між серверами. По-друге, хоч і потрібно тиражування змін даних, які виконала транзакція, то ці зміни вносять асинхронне щодо самої транзакції; отже, користувач отримує результат виконання запиту швидше, оскільки йому не потрібно очікувати закінчення обміну даними між серверами по внесенню змін. Іще одна важлива перевага синхронного тиражування — підтримування «дзеркальної» бази даних на резервному сервері, причому обидва сервери (основний і резервний) в цьому випадку можуть працювати паралельно.