kmoorevs Ответов: 1

Подключение OLEDB к базе данных SQL server, размещенной в группе доступности


Я подключаюсь к базам данных SQL Server уже почти 20 лет, но мой последний клиент сбил меня с толку. Впервые, насколько мне известно, наша база данных была включена в группу доступности в рамках SQL Server 2012. Это новый клиент, и до сих пор их впечатление обо мне, вероятно, не так уж велико.

Проще говоря, проблема заключается в том, что я не могу подключить устаревшее приложение с помощью поставщика OLEDB к базе данных, размещенной в группе доступности SQL 2012. Несмотря на 2 часа работы с младшим техником. с их стороны, и перепробовав множество различных комбинаций, мое приложение не в состоянии найти сервер. Мне интересно, есть ли какой-то специальный параметр, необходимый в строке подключения при подключении к группе доступности?

Текущая форма строки подключения, которая выходит из строя, является:
Provider=sqloledb;Server=servername\instance;Database=databasename;User ID=username;Password=password


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

Это фиаско произошло в последний рабочий день этого года для клиента, поэтому я не смог ничего попробовать с тех пор, как узнал немного больше о AGs/Listeners. Было бы идеально реплицировать среду клиента для тестирования, но настройка отказоустойчивого кластера и AG кажется излишней, когда, вероятно, есть простой параметр, который я упускаю.

Другая информация: с рабочей станции, имеющей проблему, я могу успешно пинговать серверы баз данных. (первичная и реплика) Возвращается сообщение об ошибке: "сервер не существует или доступ запрещен". Это больше похоже на тайм-аут, чем на проблему с разрешениями. Кроме того, если это имеет значение, приложение использует соединения/объекты ADODB.

Это будет более двух недель, пока клиент не вернется из отпуска. А пока мне поручено объясниться с их ведущим техником. (кто был недоступен, когда у нас были проблемы) что это за проблемы, и что мы собираемся сделать, чтобы исправить это. (в дополнение к гораздо большему количеству дерьма, которое они хотят сейчас)

Что я уже пробовал:

0:) Поиск connectionstrings.com
1:) провел последние два дня, читая о группах доступности и клиентских подключениях. У меня есть несколько вещей, чтобы попробовать, но это будет испытание огнем, если я не вложу время, чтобы воспроизвести окружающую среду.

Вещи, которые я бы попробовал, если бы мог:
0:) перед именем сервера (в строке подключения) поставьте tcp: (это важно?)
1:) Используйте имя слушателя вместо сервера/экземпляра (хотя вся документация, которую я читал, говорит, что это должно работать)
2:) добавьте параметр строки подключения (MultiSubnetFailover=True)
2:) Проверьте используемые номера портов
3:) попробуйте другой вариант строки подключения OLEDB

Я надеюсь, что кто-то здесь может иметь доступ к тестовой среде AG и может помочь подтвердить, что даже возможно подключиться к поставщику OLEDB в соответствии с приведенным примером строки подключения. Любая помощь или подсказки очень ценятся!

1 Ответов

Рейтинг:
2

OriginalGriff

Можете ли вы попробовать обойтись без предложения "provider=sqloledb"?
Сам Vanilla SQL Server не любит предложения поставщика - читайте "он не работает, если вы его поставляете", - но я понятия не имею о группах доступности.


kmoorevs

Спасибо, ОГ! Параметр provider необходим для моего приложения...выход из него (подключение к локальной базе данных sql) завершается неудачей с "не заданным драйвером по умолчанию". Я только что попробовал драйвер SQLNCLI11 (sql native) и обнаружил, что он работает локально, но, к сожалению, я до сих пор не знаю, решит ли он проблему подключения в группе доступности. Спасибо!

[no name]

Что сработало?

kmoorevs

I had reposted the question under the Database forum and noted there (in an update yesterday) that the problem was likely something on the customer's end. We are now successfully connecting to the availability group database using the sqloledb driver. We are now forcing protocol and connecting on the listener. (tcp: ag-listener) Even this was not working until they switched something on their end...then it miraculously started working for all the end users! According to their guy, switching the provider/driver to sql native 11 was the key, but after it started working, I switched it back to sqloledb and it works...and it means the end users don't have to waste time installing the native driver(s).