Я испытываю странное поведение с транзакцией, запущенной из приложения VB6 (Com+), это устаревшее приложение вызывает несколько запросов к DB2 и SQLServer внутри одной и той же транзакции.
Возвращенная ошибка:
[Microsoft][ODBC Driver Manager] Failed to enlist on calling object's transaction query=SELECT COUNT (*) as FOO FROM BAR
FOR FETCH ONLY WITH UR SorgenteErr: Microsoft OLE DB Provider for ODBC Drivers
9:42:42 AM [2032]: Error: -2147467259
Обычно в журнале msdtc отображается список 2 менеджеров ресурсов, например:
pid=2440 ;tid=4636 ;time=10/08/2020-10:48:11.404 ;seq=535 ;eventid=RM_ENLISTED_IN_TRANSACTION ;tx_guid=bed0e21a-c138-4ff0-a94e-3dd819694ef7 ;"TM Identifier='(null) '" ;"resource manager #1002 enlisted as transaction enlistment #1. RM guid = '62f2ad11-5eab-45f9-89d6-53d7488cfb6e'"
pid=2440 ;tid=4636 ;time=10/08/2020-10:48:11.545 ;seq=536 ;eventid=RM_ENLISTED_IN_TRANSACTION ;tx_guid=bed0e21a-c138-4ff0-a94e-3dd819694ef7 ;"TM Identifier='(null) '" ;"resource manager #1003 enlisted as transaction enlistment #2. RM guid = 'bd440a1c-7334-4170-b1d5-a5c9e25eb1a0'"
В одном случае, когда количество запросов увеличивается из-за какой-то логики приложения, мы наблюдаем странное поведение;
обычно приложение работает как положено, но иногда менеджеры ресурсов начинают странно увеличиваться с 2 до >32, вызывая ошибку RM_ENLIST_FAILED_TOO_MANY_ENLISTS.
attempt to enlist the resource manager failed because the limit on number of maximum enlistments has been reached.
pid=2440 ;tid=4636 ;time=10/23/2020-10:48:17.810 ;seq=566 ;eventid=RM_ENLISTED_IN_TRANSACTION ;tx_guid=bed0e21a-c138-4ff0-a94e-3dd819694ef7 ;"TM Identifier='(null) '" ;"resource manager #1033 enlisted as transaction enlistment #32. RM guid = '5596fb4e-6c48-441c-af48-2d17adfb4ea0'"
pid=2440 ;tid=4636 ;time=10/23/2020-10:48:18.092 ;seq=567 ;eventid=RM_ENLIST_FAILED_TOO_MANY_ENLISTS ;tx_guid=bed0e21a-c138-4ff0-a94e-3dd819694ef7 ;"TM Identifier='(null) '" ;"attempt to enlist the resource manager failed because the limit on number of maximum enlistments has been reached. RM guid = 'e260c743-46b4-4f96-a343-1553bc7974eb'"
Насколько я знаю, диспетчер ресурсов должен оставаться по одному на базу данных при правильном поведении.
Знаете ли вы какую-либо причину, которая может вызвать такое неожиданное поведение, когда зачисляется слишком много диспетчеров ресурсов (каждый с другим guid)?
Важно отметить, что это поведение началось, когда мы перешли с 9.7 FP 9a на 11.1.4 FP5 драйвер Db2 на клиентских машинах и машинах с подключением DB2.