23.7.7. Управление транзакциями

Одной из важных функций мультипользовательской СУБД является обеспечение параллельного доступа пользователей к базе данных. Qложности управления параллельным доступом возникают только в ситуациях, когда возникают коллизии, связанные с конкурентным обновлением данных в базе данных разными пользователями, с возможностью чтения одним пользователем данных, которые успел лишь частично обновить другой пользователь. Такие коллизии могут привести к нарушениям логической целостности базы данных. Для их предотвращения в СУБД предусматривается техника управления транзакциями.

Транзакцией называют последовательность операций над базой данных, выполняемых при обработке пользовательского запроса, которая переводит ее из одного логически целостного состояния в другое. Если, например, из базы данных нужно удалить сведения о некотором поставщике в связи с тем, что он прекращает дальнейшие поставки, то вслед за этим необходимо удалить и сведения о запланированных этим поставщиком поставках продукции. Иначе база данных будет содержать сведения о поставках неизвестного системе поставщика. Ясно, что в мультипользовательской среде такую последовательность операций нельзя прерывать для обработки запросов других пользователей системы до полного ее завершения.

Для исключения коллизий конкурентного доступа параллельно исполняемых транзакций к данным в базе данных используют различные методы. Чаще всего используется блокировка ресурсов базы данных, обновляемых при исполнении транзакций, их обновляющих. На время исполнения транзакции, модифицирующей значения некоторых данных, эти ресурсы блокируются с тем, чтобы не допустить к ним доступа других транзакций.

Разрешая таким образом проблему конкурентного доступа, блокировка ресурсов вместе с тем порождает новую проблему ­возможность возникновения тупиковых ситуаций. Так называется ситуация, когда группа из двух или более транзакций монопольно захватывает ресурсы таким образом, что каждая из них ожидает освобождения какого-либо ресурса, монопольно захваченного (блокированного) другой транзакцией из этой группы. Во многих СУБД реализованы механизмы предотвращения тупиковых ситуаций либо механизмы, обеспечивающие выход из тупиковой ситуации за счет отката некоторых из образующих ее транзакций.