1

Недавно мы разработали приложение, которое будет запускать запрос в DB2 и отправлять почту соответствующему получателю. Он хорошо работает в нашей локальной системе и регионе качества. Но в производстве мало запросов (даже если это редко, как раз в неделю). Он выдает исключение ниже.Ошибка связи DB2

Исключение InnerDetails:

ERROR [40003] [IBM][CLI Driver] SQL30081N A communication error has been detected. Communication protocol being used: "TCP/IP". Communication API being used: "SOCKETS". Location where the error was detected: "111.111.111.111". Communication function detecting the error: "recv". Protocol specific error code(s): "10004", "", "". SQLSTATE=08001

Поскольку ошибка возникает только в производстве и не очень часто, мы не уверены, является ли это код или вопрос настройки. Есть ли у вас какие-либо идеи?

+0

Вы когда-нибудь получали разрешение на это? У нас есть эта проблема с перерывами при доступе к данным мейнфрейма, и обычно мы просто заканчиваем логикой повтора. –

ответ

2

Эта конкретная ошибка (SQL30081N) представляет собой просто общее сообщение, которое указывает на сетевую проблему между вашим клиентом DB2 и сервером. В этом случае вы хотите посмотреть на Protocol specific error code(s). Здесь, похоже, вы работаете в Windows, и этот код (10004) не указан в документации IBM.

Так что, если вы Google «коды ошибок окна сети», вы найдете this page, который говорит:

WSAEINTR

10004

Interrupted function call.

A blocking operation was interrupted by a call to WSACancelBlockingCall. 

Какие ссылки на this page с дополнительной информацией о данной конкретной функции (курсив мой):

The WSACancelBlockingCall function has been removed in compliance with the Windows Sockets 2 specification, revision 2.2.0.

The function is not exported directly by WS2_32.DLL and Windows Sockets 2 applications should not use this function. Windows Sockets 1.1 applications that call this function are still supported through the WINSOCK.DLL and WSOCK32.DLL.

Blocking hooks are generally used to keep a single-threaded GUI application responsive during calls to blocking functions. Instead of using blocking hooks, an applications should use a separate thread (separate from the main GUI thread) for network activity.

Я предполагаю, что ваше приложение может блокировать более длительное время в вашем рабочем приложении, чем в других средах, и что-то на этом пути вызывает прерывание.

Надеемся, что это приведет вас вниз по правильному пути ...

0

Мы недавно обсуждали этот вопрос с нашим IBM респ. Изучив внутреннюю базу знаний, он предложил добавить строку «Прерывание = 0» в нашу строку подключения на основе рекомендаций, предоставленных другим клиентам, которые имели ту же проблему.

Значение по умолчанию для прерывания было 1 до v10.5 FP2 и по-прежнему для большинства подключений. Они изменили значение по умолчанию на 2 для подключений к z/OS (мэйнфрейм) в FP2.

Мы используем C# и свойства строки подключения для драйвера IBM Data Server для .Net можно найти here. Я уверен, что есть аналогичное свойство для их драйверов для других языков.

This page из документов IBM более подробно описывает настройку.

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

Смежные вопросы