Прозрачность транзакций
Транзакция является логической единицей работы, выполняемой в базе данных. Она может быть представлена отдельной программой, являться частью алгоритма программы или даже отдельной командой (например, командой INSERT или UPDATE языка SQL и включать произвольное количество операций, выполняемых в базе данных. С точки зрения базы данных, выполнение программы некоторого приложения может расцениваться как серия транзакций, в промежутках между которыми выполняется некоторая обработка данных, осуществляемая вне среды базы данных. Любая транзакция всегда должна переводить базу данных из одного согласованного состояния в другое.
В языке SQL транзакция начинается оператором - BEGIN TRANSACTION и завершается одним из 2-х возможных способов:
1. В случае успешного завершения результаты транзакции фиксируются в базе данных с помощью оператора СОММIТ и база данных переходит в новое согласованное состояние.
2. Если выполнение транзакции не увенчалось успехом, то она отменяется с помощью оператора ROLLBACK .
Рассмотрим примерыдля локальной и распределенной базы данных.
Для локальной базы данных:
Транзакция T1 – уменьшает исходную сумму со счёта balx на 100 рублей.
Время | Транзакция Т1 | Поле balx |
t1 | begin_trans | |
t2 | read(balx) | |
t3 | balx=balx-100 | |
t4 | write(balx) | |
t5 | commit |
Для многопользовательской базы данных транзакция Т2 – увеличивает исходную сумму счёта balx на 1000 руб.
Время | Транзакция Т1 | Транзакция Т2 | Поле balx |
t1 | begin_trans | ||
t2 | read(balx) | ||
t3 | balx=balx+1000 | ||
t4 | write(balx) | ||
t5 | begin_trans | rollback | |
t6 | read(balx) | ||
t7 | balx=balx-100 | ||
t8 | write(balx) | ||
t9 | commit |
Т1 и Т2-это параллельные транзакции.
Если бы транзакция Т1 была включена в момент времени t3, то была бы считана сумма balx = 2000 в момент времени t4 и отмена транзакции Т2 в момент времени t5 не была бы зафиксирована транзакцией Т1. Поэтому Т1 начинается в момент времени t5.
Разработаны методы, которые обеспечивают поддержание базы данных в достоверном и согласованном состоянии. Для этого в любых современных СУБД реализованы три функции:
1. Механизмы поддержания транзакций;
2. Службы управления параллельностью( для многопользовательского режима);
3. Средства восстановления баз данных.
Прозрачность транзакций в среде распределенных СУБД означает, что при выполнении любых распределенных транзакций гарантируется сохранение целостности и согласованности распределенной базы данных. Распределенная транзакция осуществляет доступ к данным, сохраняемым более чем в одном местоположении, Каждая из транзакции разделяется на несколько субтранзакций — по одной для каждого к данным которого осуществляется доступ, На удаленных узлах транзакции представляются агентами.