Координатор распределенных транзакций Майкрософт (MS DTC) может потребовать от участников транзакции, таких как компоненты COM+ либо один или несколько экземпляров SQL Server, подготовиться (инструкция PREPARE) в рамках протокола двухфазной фиксации (2PC). Если SQL Server сообщает о готовности выполнить инструкцию COMMIT, но MS DTC по какой-либо причине запрашивает применение инструкции ABORT, то эта ошибка возникает на сервере, выполнившем инструкцию COMMIT. Аналогично, если сервер SQL Server инициировал запрос транзакции и предложил другому участнику выполнить инструкцию PREPARE, но между тем любой другой участник запросил инструкцию ABORT, инициировавший данный запрос сервер сообщит об этой ошибке.
Это сообщение указывает на обычную операцию двухфазной фиксации. Если точно неизвестно, какой из запросов приложения или SQL Server вызывает координатор MS DTC, то с помощью трассировки приложения SQL Profiler определите команду, выполнение которой было прервано.
Ниже приведены несколько причин запроса инструкции ABORT.
Время ожидания транзакции истекло в соответствии с настройками времени ожидания приложения.
Инструкцию ABORT мог запросить другой диспетчер ресурсов, участвующий в данной транзакции.
Возможно, во время данной транзакции была завершена работа службы MS DTC.
Точный код результата, возвращенный как часть данного сообщения, может меняться, и поиск по данному коду результата позволяет получить дополнительные сведения об основной причине ошибки.
Дополнительные сведения о MS DTC см. в разделах "Служба MS DTC", "Распределенные транзакции", "Архитектура распределенных транзакций", "Конфигурирование связанных серверов" и "Описание процесса немедленного обновления" электронной документации.
Target | Microsoft.SQLServer.2012.DBEngine | ||
Category | EventCollection | ||
Enabled | True | ||
Event_ID | 8520 | ||
Event Source | $Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ServiceName$ | ||
Alert Generate | True | ||
Alert Severity | Warning | ||
Alert Priority | Normal | ||
Remotable | True | ||
Alert Message |
| ||
Event Log | Application | ||
Comment | Mom2012ID='{A7060C45-95ED-4D39-9E2B-1DC2866C0AC4}';MOM2012GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74} |
ID | Module Type | TypeId | RunAs |
---|---|---|---|
_F6DA1507_12AF_11D3_AB21_00A0C98620CE_ | DataSource | Microsoft.Windows.EventProvider | Microsoft.SQLServer.SQLDefaultAccount |
GenerateAlert | WriteAction | System.Health.GenerateAlert | Default |
<Rule ID="Microsoft.SQLServer.2012.Commit_of_internal_MSDTC_transaction_failed_1_5_Rule" Target="SQL2012Core!Microsoft.SQLServer.2012.DBEngine" Enabled="true" ConfirmDelivery="true" Remotable="true" Comment="Mom2012ID='{A7060C45-95ED-4D39-9E2B-1DC2866C0AC4}';MOM2012GroupID={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" RunAs="SQL!Microsoft.SQLServer.SQLDefaultAccount">
<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="SQL!Microsoft.SQLServer.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.2012.Commit_of_internal_MSDTC_transaction_failed_1_5_Rule.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>