MSSQL 2016: ошибка фиксации внутренней транзакции MSDTC

Microsoft.SQLServer.2016.Commit_of_internal_MSDTC_transaction_failed_1_5_Rule (Rule)

Правило срабатывает, когда происходит ошибка фиксации COMMIT внутренней транзакции MSDTC

Knowledge Base article:

Сводка

Координатор распределенных транзакций Майкрософт (MS DTC) может выдать участникам транзакции, таким, как компоненты COM +, или одному или более экземплярам SQL Server, команду PREPARE в рамках протокола двухфазной транзакции (2PC). Если SQL-сервер отвечает, что он готов фиксировать (COMMIT), но MS DTC запрашивает операцию ABORT по какой-либо причине, эта ошибка появится на сервере, который выдал COMMIT. Аналогичным образом, если SQL Server инициировал запрос на транзакцию и спросил другого участника, чтобы подготовиться (PREPARE), но в то же время какой-либо из участников просил прервать транзакцию (ABORT), сервер, который инициировал запрос, будет сообщать эту ошибку.

Решения

Это сообщение указывает на обычную операцию двухфазной фиксации. Если точно неизвестно, какой из запросов приложения или SQL Server вызывает координатор MS DTC, то с помощью трассировки приложения SQL Profiler определите команду, выполнение которой было прервано.

Ниже приведены несколько причин запроса инструкции ABORT.:

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

Дополнительные сведения о MS DTC см. в разделах "Служба MS DTC", "Распределенные транзакции", "Архитектура распределенных транзакций", "Конфигурирование связанных серверов" и "Описание процесса немедленного обновления" электронной документации.

Переопределяемые параметры

Название

Описание

Значение по умолчанию

Включено

Включает или отключает рабочий процесс.

Да

Приоритет

Определяет приоритет предупреждения.

1

Серьезность

Определяет серьезность предупреждения.

1

Element properties:

TargetMicrosoft.SQLServer.2016.DBEngine
CategoryEventCollection
EnabledTrue
Event_ID8520
Event Source$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.DBEngine"]/ServiceName$
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
RemotableTrue
Alert Message
MSSQL 2016: ошибка фиксации внутренней транзакции MSDTC
{0}
Event LogApplication
CommentMom2016ID='{A7060C45-95ED-4D39-9E2B-1DC2866C0AC4}';MOM2016GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}

Member Modules:

ID Module Type TypeId RunAs 
_F6DA1507_12AF_11D3_AB21_00A0C98620CE_ DataSource Microsoft.Windows.EventProvider Default
GenerateAlert WriteAction System.Health.GenerateAlert Default

Source Code:

<Rule ID="Microsoft.SQLServer.2016.Commit_of_internal_MSDTC_transaction_failed_1_5_Rule" Target="SQL2016Core!Microsoft.SQLServer.2016.DBEngine" Enabled="true" ConfirmDelivery="true" Remotable="true" Comment="Mom2016ID='{A7060C45-95ED-4D39-9E2B-1DC2866C0AC4}';MOM2016GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="_F6DA1507_12AF_11D3_AB21_00A0C98620CE_" Comment="{F6DA1507-12AF-11D3-AB21-00A0C98620CE}" TypeID="Windows!Microsoft.Windows.EventProvider">
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
<LogName>Application</LogName>
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.DBEngine"]/ServiceName$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>8520</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="GenerateAlert" TypeID="SystemHealth!System.Health.GenerateAlert">
<Priority>1</Priority>
<Severity>1</Severity>
<AlertMessageId>$MPElement[Name="Microsoft.SQLServer.2016.Commit_of_internal_MSDTC_transaction_failed_1_5_Rule.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>Event ID: $Data/EventDisplayNumber$. $Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>