[DBNETLIB][ConnectionOpen (PreLoginHandshake()).]Общая ошибка сети — подключение к базе данных SQL в сценарии VB

У меня есть сценарий VB, который подключается к локальной базе данных SQL для получения значения. Тот же самый скрипт работает примерно на 100 серверах, но некоторые из них выдают эту ошибку:

[DBNETLIB][ConnectionOpen (PreLoginHandshake()).]Общая ошибка сети. Проверьте сетевую документацию

Вот код, который работает:

Function GetPrimaryServerID
On Error Resume Next
Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")
objConnection.Open "Provider=SQLOLEDB;Data Source=127.0.0.1;Initial Catalog=xxx;User ID=xxx;Password=xxx"
sqlquery = "SELECT ServerID FROM tblSettings"
objRecordSet.Open sqlquery,objConnection
objRecordSet.MoveFirst
GetPrimaryServerID = objRecordSet("ServerID")
objRecordSet.Close
objConnection.Close 
End Function

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


person VBscripter    schedule 07.12.2009    source источник


Ответы (5)


Устранили проблему, выполнив следующие действия: Открыл диспетчер конфигурации SQL Server и перешел к Протоколы для MSSQLSERVER -> TCP/IP. На вкладке «IP-адреса» я заметил, что IP2 с адресом 127.0.0.1 был активен, но не включен. Изменено на включенные и перезапущенные службы SQL. Мой сценарий VB теперь успешно открывает соединение с 127.0.0.1.

person VBscripter    schedule 09.12.2009

Это может привести к сбою, если база данных не настроена для прослушивания трафика TCP/IP. Ошибка «Поставщик именованных каналов, ошибка: 0 — на другом конце канала нет процесса». указывает в этом направлении.

Вы можете проверить это с помощью:

telnet 127.0.0.1 1433

Чтобы настроить прослушивание сервером, используйте «Сетевую утилиту SQL Server» для SQL Server 2000 или «Конфигурация контактной зоны SQL Server» для SQL Server 2005 и более поздних версий.

person Andomar    schedule 07.12.2009
comment
хорошо, я сделал тест telnet, и он не удался, не удалось подключиться к порту 1433. Серверы используют SQL Server 2005, я открыл конфигурацию контактной зоны SQL Server, но не могли бы вы посоветовать, где я могу настроить, где сервер слушает ? - person VBscripter; 07.12.2009
comment
@VBScripter: нажмите Surface Area Configuration for Services and Connections, затем MSSQLSERVER -> Database Engine -> Remote Connections и убедитесь, что выбран один из вариантов с TCP/IP - person Andomar; 07.12.2009
comment
Выбраны «локальные и удаленные подключения» и «Использование как TCP / IP, так и именованных каналов», но я все еще не могу подключиться к 127.0.0.1 через студию управления или telnet к 127.0.0.1 через порт 1433. - person VBscripter; 07.12.2009
comment
@VBScripter: проверьте журналы на наличие строки, похожей на то, что SQL-сервер прослушивает ‹ip›: ‹port› (должен быть рядом с запуском) и убедитесь, что он прослушивает порт 1433? - person Andomar; 07.12.2009
comment
Я думаю, что, возможно, нашел проблему. Я открыл Диспетчер конфигурации SQL Server и перешел к Протоколы для MSSQLSERVER -> TCP/IP. На вкладке «IP-адреса» я заметил, что IP2 с адресом 127.0.0.1 был активен, но не включен. Похоже, что он активен и включен на работающих серверах. Однако это изменение требует перезапуска служб SQL, поэтому для проверки мне придется подождать допоздна. - person VBscripter; 08.12.2009

Это не ошибка базы данных, а ошибка клиентских инструментов или конфигурации.

Неисправные серверы, вероятно, будут:

  • иметь другой уровень установки SQL Server/включает пакет обновления)
  • настроены только для проверки подлинности Windows
  • иметь более старый MDAC (связанный с пакетом обновления SQL, пакетом обновления ОС и т. д.)

Редактировать:

SSL-шифрование SQL Server, на стороне сервера, описано здесь. И в КБ 316898 тоже

  • «На стороне сервера» требуется только сертификат сервера, а все соединения зашифрованы.
  • «клиентская сторона» требует клиентских сертификатов и не является обязательной, и только для этого клиента

Некоторые клиентские библиотеки (особенно MS JDBC) не поддерживают это.

Если я правильно угадал, у вас будет либо клиентское, либо серверное шифрование SSL, установленное на основе сервера (ваш скрипт действует как клиент)

person gbn    schedule 07.12.2009
comment
На всех серверах установлена ​​Windows 2003 R2 x64 SP2. Все серверы используют SQL Server 9.0.3042 64 бит. Это включает в себя успешные и неисправные серверы. Я дважды проверил неисправные серверы, чтобы убедиться. Я не уверен, как проверить версию MDAC. Я только что заметил, что на неисправных серверах при открытии SQL Server Management Studio я не могу подключиться к 127.0.0.1, мне нужно подключиться к имени сервера. Однако на любом другом сервере я могу подключиться к 127.0.0.1. - person VBscripter; 07.12.2009
comment
Это ошибка при попытке подключения к 127.0.0.1 на отказавших серверах через Management Studio: Соединение с сервером было успешно установлено, но затем произошла ошибка во время рукопожатия перед входом в систему. При подключении к SQL Server 2005 этот сбой может быть вызван тем, что при настройках по умолчанию SQL Server не разрешает удаленные подключения. (поставщик: поставщик именованных каналов, ошибка: 0 — на другом конце канала нет процесса.) (Microsoft SQL Server, ошибка: 233) - person VBscripter; 07.12.2009
comment
@VBScripter: можешь пропинговать 127.0.0.1? настроены ли эти сервера для encrpytion? - person gbn; 07.12.2009
comment
да, я могу пропинговать 127.0.0.1, и брандмауэр Windows отключен. Не могли бы вы более конкретно ответить на ваш вопрос о шифровании? - person VBscripter; 07.12.2009

Это также может быть несовпадение вызовов WSAStartup и WSACleanup. Если вы вызываете WSACleanup слишком часто, сокеты перестают работать. И клиент SQL также сломается, что обычно имеет место для удаленных серверов БД (в отличие от локальных экземпляров, доступ к которым осуществляется через именованные каналы и т. д.).

person E. van Putten    schedule 13.06.2018

  1. Попробуйте отключить WPF, и это должно решить проблему (Панель управления -> Брандмауэр Windows).

  2. Если нет, вы также можете остановить службу брандмауэра (из Services.msc -> персональный брандмауэр Windows)

person Varun Gautam    schedule 28.01.2015
comment
Ваш ответ очень помог бы объяснить, почему, по вашему мнению, здесь может быть виноват брандмауэр Windows. - person Aiken; 28.01.2015