Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект по БД.doc
Скачиваний:
2
Добавлен:
25.09.2019
Размер:
517.12 Кб
Скачать

2. Управление транзакций

Транзакция – это серия действий, которые выполняются одним пользователем или прикладной программой, и осуществляет изменения содержимого БД или доступ к данным.

Транзакция может быть представлена отдельной программой, частью какого либо алгоритма, либо отдельной программой (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. Проблема зависимости от нефиксированных результатов.

Пример первой проблемы

время

Транзакция 1

Транзакция 2

Поле bals

T1

Begin transaction

100

T2

Begin transaction

Read (bals)

100

T3

Read (bals)

Bals=bals+100

100

T4

Bals=bals+100

Write bals

200

T5

Write bals

commit

90

T6

Commit

90

Пример второй проблемы

время

Транзакция 1

Транзакция 2

Поле bals

Bals y

Bals z

sum

T1

Begin transaction

100

50

25

T2

Begin transaction

Sum=0

100

50

25

T3

Read (bal x)

Read (bals)

100

50

25

0

T4

Bals=bal x-10

Sum=sum+ bal x

100

50

25

0

T5

Write bal x

Read (bal y)

100

50

25

0

T6

Read (bal x)

Sum=sum+ bal y

90

50

25

100

T7

Write bal y

90

50

25

150

T8

Balz=balz+10

90

50

25

150

T9

Write Balz

Read (bal z)

90

50

25

150

T10

Commit

Sum=sum+balz

90

50

25

185

T11

Commit

90

50

25

185

Пример третьей проблемы

время

Транзакция 1

Транзакция 2

Поле bal x

T1

Begin transaction

100

T2

Read bal x

100

T3

Bal x=bap x+100

100

T4

Begin transaction

Write bal x

200

T5

Read bal x

T6

bal x= bal x-10

Rall back

100

T7

Write bal x

190

T8

commit

190