Главная » Microsoft SQL Server, Базы данных » Распределенные транзакции

1

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

Дотттттш В главе 51 мы подробно обсудим свойства АСЮ баз данных и транзакций.

информация \

Координатор распределенных транзакций

SQL Server использует координатор распределенных транзакций (далее DTC) для обслуживания транзакций, затрагивающих несколько серверов, — их подтверждения и отката. Служба DTC использует двухфазную схему подтверждения многосерверных транзакций. Это подразумевает, что доступны оба сервера, при этом служба DTC выполняет следующие действия.

1.              Каждый из серверов отправляет сообщение о готовности к подтверждению.

2.              Каждый из серверов выполняет первый этап подтверждения, гарантируя тем самым способность к полному подтверждению транзакции.

3.              Каждый из серверов сообщает об окончании подготовки к подтверждению.

4.              Только после того как все серверы ответили положительно о готовности к подтверждению, сообщение о реальном подтверждении транзакции отправляется всем им.

Если логическая единица работы содержит только операции чтения с серверов, то использование службы DTC не требуется. Только когда выполняется удаленное обновление данных, транзакция рассматривается как распределенная.

Координатор распределенных транзакций является отдельной службой SQL Server, которая запускается и останавливается с помощью SQL Server Service Manager.

Только один экземпляр этой службы запускается на одном сервере, независимо от количества установленных и запущенных на нем экземпляров SQL Server. Фактическое имя службы — msdtc . ехе, потребляемый объем памяти — 2,5 Мбайт.

Служба DTC должна быть запущена, когда инициируется распределенная транзакция, в противном случае последняя завершится ошибкой.

Создание распределенных транзакций

аналогичны локальным, но имеют некоторые расширения в синтаксисе:

SET xact_abort on;

BEGIN DISTRIBUTED TRANSACTION;

В случае ошибки параметр подключения xact_abort приведет к откату текущей транзакции, а не только текущей инструкции Т-SQL. Параметр xact_abort необходим, чтобы любая распределенная транзакция могла подключиться к удаленному экземпляру SQL Server, равно как и к большинству других соединений OLE DB.

Инструкция BEGIN DISTRIBUTED TRANSACTION, которая определяет, доступна ли служба DTC, строго не требуется. Даже если транзакция начинается инструкцией BEGIN TRAN, она все равно будет расширена до распределенной, и наличие службы DTC будет проверено, как только будет выполнен первый распределенный запрос. В то же время считается хорошей практикой использовать полную форму BEGIN DISTRIBUTED TRANSACTION, чтобы наличие DTC проверялось в самом начале транзакции. Если служба DTC не запущена, то автоматически выдается сообщение об ошибке:

Server: Msg 8501, Level 16, State 3, Line 7 MSDTC on server ‘XPS’ is unavailable.

Следующий пример демонстрирует распределенную транзакцию между локальным сервером и его вторым экземпляром:

USE Family;

SET xact_abort on;

UPDATE Person

SET LastName = ‘Johnson2’

WHERE PersonID = 10;

UPDATE [Noli\SQL2].Family.dbo.Person SET LastName = 1Johnson2′

WHERE PersonID = 10;

COMMIT TRANSACTION;

Обычно при откате вложенных транзакций SQL Server откатываются все транзакции, находящиеся в режиме ожидания, т.е. до самой внешней. Однако служба DTC поступает по- другому — она откатывает только текущую транзакцию.

Мониторинг распределенных транзакций

Работу координатора распределенных транзакций можно просмотреть в самой операционной системе в качестве отдельно устанавливаемой службы сервера Windows Server 2003. Для этого нужно в главном системном меню Start выбрать пункт Control Panel^Administrative Tools^Component Services. Служба компонентов отображает список текущих ожидающих распределенных транзакций (рис. 15.8), а также статистику службы DTC (рис. 15.9).

Puc. 15.8. Служба компонентов отображает список текущих транзакций DTC

Если некоторая распределенная транзакция столкнулась с трудностями, она, что наиболее вероятно, будет преждевременно отменена. Если же транзакция помечена как In Doubt, то ручное ее подтверждение или откат с помощью контекстного меню в службе компонентов могут разрешить ситуацию.

Рис. 15.9. В службе компонентов можно увидеть текущую и накопительную статистику о распределенных транзакциях. При перезапуске службы DTC статистика полностью очищается

Резюме

Корпоративные данных имеют тенденцию размещаться на множестве платформ и компьютеров. Способность SQL Server брать на вооружение возможности OLE DB и ODBC для выполнения распределенных запросов является ключевым фактором успеха множества проектов баз данных. Поэтому знание методов создания распределенных запросов является необходимым компонентом в арсенале разработчика баз данных.

Кроме перемещения данных с помощью распределенных запросов, инструкция SELECT незаменима при изменении данных. В следующей главе мы рассмотрим действия, выполняемые этой инструкцией при добавлении команд INSERT, UPDATE и DELETE.

Источник: Нильсен, Пол. Microsoft SQL Server 2005. Библия пользователя. : Пер. с англ. — М. : ООО “И.Д. Вильямс”, 2008. — 1232 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии

1 комментарий

  1. Стас says:

    Грохнул эту шнягу на всех доменных компах – на работоспособности не сказалось совсем никак. Авторы!!! Приведите пожалуйста конкретные примеры: какие программы эту фичу используют.
    Судя по статье оно надо только MS-SQL который и сам по себе – то ещё убожество, которого так же следует избегать (кроме случаев, когда без него ну совсем никак).