Назад | Перейти на главную страницу

Проблемы с ODBC в Windows 2003 - ошибка 10055

Использование интегратора данных для извлечения данных ETL из DB2 в SQL Server через некоторое время приведет к следующим ошибкам odbc:

Сбой канала связи. comm rc = 10055 - CWBCO1003 - Ошибка сокетов, функция вернула 10055

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

Пробовал это, http://support.microsoft.com/kb/196271 но это не сработало, чуть не стало хуже.

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

Кто-нибудь видел эту проблему, сталкивался с ней, исправлял, смягчал?

Конечно, нехватка памяти, возможно, вызванная чрезвычайно распространенной ошибкой, когда не закрываются соединения с БД. Мои рекомендации:

  1. Проверьте объем невыгружаемой памяти пула, доступной во время выполнения процесса. Скорее всего, он будет неуклонно уменьшаться, пока машина не выйдет из строя. Это индикатор того, что сокеты не закрываются или буферы ввода-вывода ядра не освобождаются. (более вероятны незакрытые розетки)
  2. Проверьте наличие неизвестного или внешнего поставщика многоуровневых услуг (LSP) в вашем стеке winsock через 'net sh winsock catalog> wsockcat.txt'. Сравните вывод с другими вашими серверами Windows. В первую очередь подозревайте, что в стек были добавлены поставщики, источником которых не является mswsock.dll.
  3. Если проблема в низком невыгружаемом пуле, посмотрите, не освобождает ли память при перезапуске приложения или сервером БД. Скорее всего, вы не используете пул соединений, поэтому «sp who» и «list applications» могут показать интересные результаты, если какой-то уровень доступа к БД оставляет старые соединения открытыми.

Если вы видите, что серверы БД сообщают о большом количестве незанятых соединений в № 3, вы можете смягчить проблему, написав сценарии для активного отключения неиспользуемых соединений со стороны сервера сокета.

Это выстрел в темноте, но начнем.

«Функция вернула 10055» - это общая ошибка нехватки памяти или ресурсов, исходящая от WinSock, библиотеки сокетов Windows, которую использует ODBC.

Есть ли способ настроить соединение SQL Server с DB2 таким образом, чтобы он использовал именованные каналы вместо TCP / IP? Это полностью обойдет WinSock.

На этой неделе у меня возникли проблемы с приложением с утечкой дескриптора. Одним из симптомов было то, что «portqry.exe» возвращал ошибку Winsock 10055.