Управление транзакций
Транзакция – это серия действий, которые выполняются одним пользователем или прикладной программой, и осуществляет изменения содержимого БД или доступ к данным.
Транзакция может быть представлена отдельной программой, частью какого либо алгоритма, либо отдельной программой (Insert, Update).
Чтобы разобраться с механизмом управления транзакций, рассмотрим пример:
Staff – сотрудник
Property for Rent – объекты недвижимости
Staff (sno, fname, lname, Adr, tel № , Position, Dop, Sex, salary. Nin, Pn)
Property for Rent (pno, Street, Area, City, Pcode, Type, Rooms, Ono, Sno, bno).
Необходимо сотруднику увеличить заработную плату.
Вариант А:
Read (sno=x, Salary)
Salary = Salary*1.1
Write (sno=x, view_ Salary)
Вариант В: (удаляется информация о сотруднике с заданным номером)
Delete (sno=x)
For all Property for Rent
Begin
Read (Pno=Pno, sno)
If (sno = x) then
Begin
Sno=new_sno
Write (pno=pno, sno)
End
End.
Если для транзакции для варианта А при выполнении изменений не все будут выполнены до конца БД по прежнему будут находиться в согласованном состоянии.
При выполнении транзакции В, если все указанные изменения будут выполнены до конца БД перейдет в несогласованное состояние, т.е. за объект недвижимости будет отвечать не существующий работник. Поэтому любая транзакция завершается одним из следующих возможных способов:
1. В случае успешного завершения транзакции результаты фиксируются в БД, и БД переходит в новое согласованное состояние;
2. Если транзакция не завершена либо произошло аварийное завершение, она отменяется и БД переходит в прежнее состояние. Этот процесс называется откат.
Зафиксированную
транзакцию не возможно отменить, тогда надо выполнить другую транзакцию,
которая отменит действие предыдущей. Этот процесс называется компенсирующей транзакцией.
Ни одна СУБД не в состоянии оценить какие действия могут быть восприняты как единое целое и образуют единую логическую транзакцию. Поэтому в большинстве языков для манипулирования данных используются специальные операторы, которые позволяет установить границы транзакции:
- BEGIN TRANSACTION
- COMMIT
- ROLL BACK
Если эти операторы не использовались, то вся выполняемая программа расценивается как единая транзакция и СУБД автоматически выполняет команду COMMIT – при успешном завершении, ROLL BACK – при аварийном завершении транзакции.
Любая транзакция должна обладать следующими свойствами:
1. Атомарность – это неделимая единица, которая может быть либо выполнена полностью, либо не выполнена совсем.
2. Согласованность, каждая транзакция должна переводить БД из одного согласованного состояния в другое согласованное состояние.
3. Изолированность, все транзакции выполняются независимо друг от друга и результаты независимой транзакции не должны быть доступны другим пользователям.
4. Продолжительность, результаты успешного завершения транзакции должны быть постоянны и не должны быть утеряны в процессе сбоя.
Рассмотрим подсистему обработки транзакции типичной СУБД.
Менеджер транзакций осуществляет координацию работы. Он взаимодействует с планировщиком, который отвечает за реализацию выбранной стратегии управления параллельностью, которая отвечает за реализацию выбранной стратегии. Его называют еще менеджер блокировок, если для управления параллельностью выбрана система блокировок.
Цель работы планировщика заключается в достижении максимальности управления параллельностью.
Задача менеджера восстановления является предоставления гарантий того, что БД будет возвращена в то состояние, в котором она находиться до начала транзакций.
Менеджер буфера отвечает за период данных между основной памятью компьютера и вторичной дисковой памятью.
Важный момент в управлении транзакций является управление параллельностью, т.е. управление процессом организации одновременно выполнение в БД различных операций и гарантии того, что будет исключаться их взаимное влияние друг на друга.
При параллельном выполнении транзакций могут возникнуть следющие проблемы:
1. Проблема потерянного обновления
2. Проблема обработки
3. Проблема зависимости от нефиксированных результатов.