Поделиться через


Основные сведения о транзакциях

Транзакции позволяют объединить несколько задач в один логический блок. Например, пусть приложение выполняет две задачи. Сначала оно создает новую таблицу в базе данных. Затем оно вызывает специализированный объект для сбора, форматирования и вставки данных в новую таблицу. Эти две задачи являются связанными и даже взаимозависимыми: создание новой таблицы требуется, только если ее можно заполнить данными. Выполнение обеих задач в пределах области единой транзакции приводит к образованию связи между ними. Если выполнение второй задачи заканчивается сбоем, выполняется откат первой задачи в состояние до момента создания новой таблицы.

В целях обеспечения предсказуемого поведения все транзакции должны соответствовать базовым свойствам ACID (атомарность, согласованность, изолированность и устойчивость). Эти свойства подкрепляют роль критически важных транзакций принципом "все или ничего". Дополнительные сведения о ACID см. в разделе "Свойства ACID". В общих словах, свойства ACID гарантируют, что результатом выполнения набора связанных в один логический блок задач будет либо успех, либо неудача. В терминах обработки транзакций говорят, что выполняется фиксация или откат транзакции. Чтобы транзакция была зафиксирована, все участники должны гарантировать, что любое изменение данных будет постоянным. Изменения должны сохраняться даже в случае фатального сбоя системы или других непредвиденных событий. Если хотя бы один из участников не может обеспечить такую сохранность изменений, вся транзакция завершается неудачей. При этом все изменения данных, выполненные в пределах области транзакции, откатываются в конкретно определенное состояние.

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

Транзакции могут также охватывать несколько ресурсов данных. Распределенные транзакции позволяют объединить несколько различных операций, выполняемых на разных системах, в одно действие, завершающееся успехом или неудачей. В этом сценарии за координацию транзакций отвечает координатор распределенных транзакций (Майкрософт) (MSDTC), предусмотренный в каждой системе.

При разработке транзакционного приложения с использованием классов, предоставляемых пространством имен System.Transactions, не следует беспокоиться о выборе типа транзакций или диспетчера транзакций. Инфраструктура System.Transactions автоматически выполняет эти задачи за пользователя.

При создании транзакции можно указать уровень изоляции, применяемый к этой транзакции. Уровень изоляции, определенный IsolationLevel перечислением, определяет уровень доступа к другим транзакциям, затронутым вашей транзакцией.

Можно создавать транзакции с помощью ADO.NET или модели программирования транзакций, System.EnterpriseServicesпредоставляемой пространством System.Transactions имен. В разделе "Функции, предоставляемые System.Transactions" , рассматриваются функции, которые можно использовать для записи транзакционного приложения с помощью System.Transactions пространства имен.

См. также