Прозрачность транзакций
Транзакция является логической единицей работы, выполняемой в базе данных. Она может быть представлена отдельной программой, являться частью алгоритма программы или даже отдельной командой (например, командой 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. Средства восстановления баз данных.
Прозрачность транзакций в среде распределенных СУБД означает, что при выполнении любых распределенных транзакций гарантируется сохранение целостности и согласованности распределенной базы данных. Распределенная транзакция осуществляет доступ к данным, сохраняемым более чем в одном местоположении, Каждая из транзакции разделяется на несколько субтранзакций — по одной для каждого к данным которого осуществляется доступ, На удаленных узлах транзакции представляются агентами.