Всі сучасні промислові СУБД і частина настільних підтримують роботу з транзакціями. Механізм транзакцій важливий у багатьох відношеннях. Ми в цьому курсі розглянемо його з двох точок зору - як основу для відновлення цілісності баз даних і як частина механізму управління одночасною роботою з даними декількох користувачів ?? їй. Але для того, щоб зрозуміти роль транзакцій вкрай важливо розглянути транзакції як такі. В першу чергу, дамо определ ?? ення поняття''транзакція''.
Транзакція - (англ. Transaction) - група послідовних операцій з базою даних, яка являє собою логічну одиницю роботи з даними. Транзакція має бути виконана або цілком і успішно, дотримуючись цілісність даних і незалежно від паралельно йдуть інших транзакцій, або не виконана взагалі і тоді вона не повинна призвести ніякого ефекту. Транзакція переводить базу даних з одного несуперечливого стану в інше.
Тобто, транзакція, незалежно від кількості вхідних в неї операцій, сприймається як єдине ціле, і може або цілком завершитися успішно, або не виконатися взагалі, в разі, якщо в якійсь із операцій станеться збій. При успішному завершенні транзакція фіксується, виконується операція''commit''. При виникненні збою вже виконані дії скасовуються і транзакція''откативается'', виконується операція''rollback''.
Найбільш популярним прикладом транзакції, який допомагає краще зрозуміти її суть і вкрай важливо сть, є операція перерахування грошових коштів між банківськими рахунками.
Наведемо одну з можливих послідовностей дій, потрібних для виконання цієї операції:
1. Перевірити доступність счета͵ з якого передбачається списати гроші, і достатність коштів на ньому. Це операція читання даних, можливо, з декількох таблиць).
2. Перевірити доступність счета͵ на який передбачається зарахувати гроші (наприклад, рахунок має бути закрити, тимчасово заблокований і т. П.). Це також операція читання даних.
3. Зменшити значення залишку на рахунку-джерелі. Це операція модифікації даних.
4. Збільшити значення залишку на рахунку-одержувача ?? е. Це операція модифікації даних.
5. Створити запис про проведену операцію в журналі операцій. Це операція створення нового запису.
Можна запропонувати й інші варіанти виконання цієї операції, але головним є те, що вся ця послідовність або повинна виконуватися, або жодна з операцій не повинна бути виконана. Очевидно, що якщо ми зупинимося, скажімо, на кроці 4, то кошти з рахунку-джерела просто зникнуть - будуть списані''в нікуда''. Тобто, узгодженість даних буде порушена. Разом з тим, вкрай важливо гарантувати, що в процесі виконання транзакції з задіяними в ній рахунками не виконуватимуться ніякі інші операції. У самому справ ?? е, в разі якщо після того, як ми перевірили достатність коштів на рахунку-джерелі, ці кошти будуть з нього списані інший операцією - ми знову-таки швидше нд ?? його зіткнемося з порушеннями узгодженості даних.
Зрозуміло, підтримка механізму транзакцій технічно повинна бути і дуже складною - при наявності десятків і сотень користувачів ?? їй і тисяч звернень до даних забезпечити незалежність цих звернень один від одного, а також можливість скасування операцій і повернення бази даних до вихідного стану непросто. Для реалізації цього механізму можуть бути задіяні різні засоби, але є властивості, якими повинні володіти транзакції і підтримуюча їх система. Зазвичай для позначення цих властивостей використовують абревіатуру ACID - Atomicity, Consistency, Isolation, Durability. У перекладі на російську - Атомарність, Узгодженість, Ізольованість і Довговічність. Розглянемо ці властивості докладніше.
Атомарність якраз і означає неподільність транзакції і вимога або виконувати її цілком, або не виконувати взагалі. Вище ми вже досить сказали про вкрай важливо сті цієї властивості і немає вкрай важливо сті розшифровувати це поняття далі.
Узгодженість - досить складне поняття, ĸᴏᴛᴏᴩᴏᴇ дещо ширше поняття цілісності даних. У разі якщо цілісність даних - ϶ᴛᴏ виконання вс ?? ех наявних в БД обмежень цілісності (внутрізапісних, межзапісних, обмежень зовнішніх ключів і так далі), то узгодженість означає ще й відповідність бази даних бізнес-правилами. Зокрема, з обмежень цілісності може слідувати заборона на негативне значення залишку на рахунку (тобто, відповідного атрибута), але, скажімо, вимоги рівності списується і зараховується суми при переказі коштів з рахунку на рахунок - ϶ᴛᴏ вже бізнес-правило, ĸᴏᴛᴏᴩᴏᴇ при допомоги обмежень цілісності який висловити.
Як вже було сказано, передбачається, що транзакція переводить БД з одного узгодженого стану в інше, але забезпечити це повинні програмісти, які визначають послідовність операцій. Роль СУБД тут - гарантувати, що вс ?? е операції будуть виконані успішно (або не будуть виконані взагалі). Разом з тим, в процесі виконання транзаціі БД може проходити через ряд неузгоджених станів (скажімо, в наведеному вище прикладі з переказом коштів система неузгоджена після виконання операції 3 до виконання операції 4).
Ізольованість - ϶ᴛᴏ властивість транзакції виконуватися незалежно один від одного. Тобто, в процесі виконання однієї транзакції інші не можуть вплинути на результат її виконання. Забезпечення досконалої незалежності транзакцій один від одного вимагає і відповідних ресурсів, і негативно позначається на швидкості виконання операцій з даними, так що існує декілька, так званих, рівнів ізольованості, які будуть розглянуті далі.
Довговічність - ϶ᴛᴏ властивість транзакції зберігатися в системі''навс ?? егда'' після успішного завершення. Очевидно, що в процесі роботи СУБД можуть виникати збої обладнання, відключення живлення, інші помилки, але гарантується, що якщо видано повідомлення про успішне завершення транзакції, то зміни, внесені їй в дані, збережуться в будь-якому випадку і коли стан бази даних буде відновлено після збою, ці зміни нікуди не подінуться. Зрозуміло, мова не йде про випадки, коли повністю вийшов з ладу носій інформації, на якому знаходилася база даних, і її довелося відновлювати з резервної копії. Хоча навіть і в цих випадках, як буде обговорюватися далі, виконані транзакції іноді бувають відновлені.
Тепер, після розгляду поняття транзакції і її базових властивостей, ми можемо перейти до обговорення питань використання транзакцій для реалізації відновлення бази даних після збоїв і для організації паралельної роботи декількох користувачів ?? їй.