Лекция 6
2.3.2.Прозрачность транзакций
Транзакция является логической единицей работы, выполняемой в базе данных. Она может быть представлена отдельной программой, являться частью алгоритма программы или даже отдельной командой (например, командой INSERT или UPDATE языка SQL и включать произвольное количество операций, выполняемых в базе данных. С точки зрения базы данных, выполнение программы некоторого приложения может расцениваться как серия транзакций, в промежутках между которыми выполняется некоторая обработка данных, осуществляемая вне среды базы данных. Любая транзакция всегда должна переводить базу данных из одного согласованного состояния в другое.
В языке SQL транзакция начинается оператором - BEGIN TRANSACTION и завершается одним из 2-х возможных способов:
В случае успешного завершения результаты транзакции фиксируются в базе данных с помощью оператора СОММIТ и база данных переходит в новое согласованное состояние.
Если выполнение транзакции не увенчалось успехом, то она отменяется с помощью оператора ROLLBACK .
Рассмотрим примеры для локальной и распределенной базы данных.
Для локальной базы данных:
Транзакция T1 – уменьшает исходную сумму со счёта balx на 100 рублей.
Время |
Транзакция Т1 |
Поле balx |
t1 |
begin_trans |
1000 |
t2 |
read(balx) |
1000 |
t3 |
balx=balx-100 |
1000 |
t4 |
write(balx) |
900 |
t5 |
commit |
900 |
Для многопользовательской базы данных транзакция Т2 – увеличивает исходную сумму счёта balx на 1000 руб.
Время |
Транзакция Т1 |
Транзакция Т2 |
Поле balx |
t1 |
|
begin_trans |
1000 |
t2 |
|
read(balx) |
1000 |
t3 |
|
balx=balx+1000 |
1000 |
t4 |
|
write(balx) |
2000 |
t5 |
begin_trans |
rollback |
1000 |
t6 |
read(balx) |
|
1000 |
t7 |
balx=balx-100 |
|
1000 |
t8 |
write(balx) |
|
900 |
t9 |
commit |
|
900 |
Т1 и Т2-это параллельные транзакции.
Если бы транзакция Т1 была включена в момент времени t3, то была бы считана сумма balx = 2000 в момент времени t4 и отмена транзакции Т2 в момент времени t5 не была бы зафиксирована транзакцией Т1. Поэтому Т1 начинается в момент времени t5.
Разработаны методы, которые обеспечивают поддержание базы данных в достоверном и согласованном состоянии. Для этого в любых современных СУБД реализованы три функции:
Механизмы поддержания транзакций;
Службы управления параллельностью( для многопользовательского режима);
Средства восстановления баз данных.
Прозрачность транзакций в среде распределенных СУБД означает, что при выполнении любых распределенных транзакций гарантируется сохранение целостности и согласованности распределенной базы данных. Распределенная транзакция осуществляет доступ к данным, сохраняемым более чем в одном местоположении, Каждая из транзакции разделяется на несколько субтранзакций — по одной для каждого к данным которого осуществляется доступ, На удаленных узлах транзакции представляются агентами.
Пример распределенной транзакции
Рассмотрим выполнение транзакции Т, выполняющей распечатку имен всего персонала компании, при использовании схемы фрагментации, определенной раннее в виде фрагментов S1, S2, S21, S22 и S23. Транзакция будет включать три субтранзакции TS3, TS5 и TS7, представленные агентами 3,5 и 7 соответственно. Каждая из субтранзакций печатает имена работников локального отделения компании. График распределенной транзакции показан в таблице. Обратите внимание на естественную параллельность, свойственную системе, - каждая из субтранзакций выполняется параллельно с остальными.
Время |
Транзакция Тs3 |
Транзакция Тs5 |
Транзакция Тs7 |
t1 |
begin_transaction |
begin_transaction |
begin_transaction |
t2 |
read(fname,lname) |
read(fname,lname) |
read(fname,lname) |
t3 |
print(fname,lname) |
print(fname,lname) |
print(fname,lname)
|
t4 |
end_transaction |
end_transaction |
end_transaction |
Неделимость остаётся фундаментальной концепцией понятия транзакции и в случае распределенных транзакций, однако дополнительно РСУБД должна гарантировать неделимость и каждой из ее субтранзакций . Следовательно, РСУБД должна гарантировать не только синхронизацию субтранзакций с другими локальными транзакциями, выполняющимися параллельно с ними , но и обеспечить синхронизацию субтранзакций с глобальными транзакциями, вы- полняющимися одновременно с ними на этом и других узлах системы, Прозрачность транзакций в распределенных СУБД дополнительно усложняется за счет наличия фрагментации, распределения данных и использования репликации, Мы рассмотрим два дополнительных аспекта прозрачности транзакций, таких как прозрачность параллельности и прозрачность отказов.