Правило вызывает ошибку, когда происходит сбой COMMIT внутренней транзакции MSDTC.
Координатор распределенных транзакций Майкрософт (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", "Распределенные транзакции", "Архитектура распределенных транзакций", "Настройка связанных серверов" и "Принципы работы немедленного обновления" в электронной документации.
Имя | Описание | Значение по умолчанию |
Включено | Включает или отключает рабочий процесс. | Да |
Интервал (в секундах) | Повторяющийся интервал времени в секундах, в который следует запустить рабочий процесс. | 300 |
Приоритет | Определение приоритета оповещений. | 1 |
Важность | Определяет серьезность предупреждения. | 1 |
Время синхронизации | Время синхронизации |
|
Время ожидания (в секундах) | Указывает время, в течение которого может выполняться рабочий процесс, прежде чем он будет закрыт или завершится сбоем. | 200 |
Время ожидания для подключения к базе данных (секунды) | Рабочий процесс завершится ошибкой и зарегистрирует событие, если он не сможет получить доступ к базе данных за указанный промежуток времени. | 15 |
Target | Microsoft.SQLServer.Windows.DBEngine | ||
Category | EventCollection | ||
Enabled | True | ||
Alert Generate | True | ||
Alert Severity | Warning | ||
Alert Priority | Normal | ||
Remotable | True | ||
Alert Message |
| ||
Comment | Mom2017ID='{A7060C45-95ED-4D39-9E2B-1DC2866C0AC4}';MOM2017GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74} |
ID | Module Type | TypeId | RunAs |
---|---|---|---|
_F6DA1507_12AF_11D3_AB21_00A0C98620CE_ | DataSource | Microsoft.SQLServer.Windows.DataSource.EventCollectionFiltered | Default |
GenerateAlert | WriteAction | System.Health.GenerateAlert | Default |
<Rule ID="Microsoft.SQLServer.Windows.EventRule.DBEngine.Commit_of_internal_MSDTC_transaction_failed_1_5_Rule" Target="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine" Enabled="true" ConfirmDelivery="true" Remotable="true" Comment="Mom2017ID='{A7060C45-95ED-4D39-9E2B-1DC2866C0AC4}';MOM2017GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="_F6DA1507_12AF_11D3_AB21_00A0C98620CE_" Comment="{F6DA1507-12AF-11D3-AB21-00A0C98620CE}" TypeID="Microsoft.SQLServer.Windows.DataSource.EventCollectionFiltered">
<MachineName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</MachineName>
<InstanceName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</InstanceName>
<ConnectionString>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/ConnectionString$</ConnectionString>
<MonitoringType>$Target/Property[Type="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine"]/MonitoringType$</MonitoringType>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
<TimeoutSeconds>200</TimeoutSeconds>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<EventDisplayNumber>8520</EventDisplayNumber>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="GenerateAlert" TypeID="Health!System.Health.GenerateAlert">
<Priority>1</Priority>
<Severity>1</Severity>
<AlertMessageId>$MPElement[Name="Microsoft.SQLServer.Windows.EventRule.DBEngine.Commit_of_internal_MSDTC_transaction_failed_1_5_Rule.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>Event ID: $Data/Property[@Name='EventID']$. $Data/Property[@Name='Message']$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>