Як змусити цей ODBC-підключення SQL Server працювати?


30

Примітка. Я, очевидно, змінив імена серверів та IP-адреси на вигадані.

Ось що відбувається. У мене є сервер, на який я дзвоню MYSERVER, під керуванням Microsoft SQL Server Express 2005. Саме на цьому сервері у мене встановлено ODBC-з'єднання, яке вказує на себе, і це вже працює чудово. Я входжу за допомогою автентифікації SQL Server (не автентифікації Windows), і він налаштований так:

Зображення хорошого ODBC-з'єднання

Як я вже сказав, це працює. Але далі, у мене є ще один комп’ютер, який знаходиться на зовсім іншому домені / не в інтрамережі, який потребує доступу до цього ж SQL-сервера, розміщеного в MYSERVER. Оскільки він знаходиться в іншому домені, він не розпізнає ім'я "MYSERVER"; Я маю вказати його на IP-адресу MYSERVER, про яку ми скажемо, 123.456.789.012. Але зв’язок ODBC, здається, не працює там. Я спробував налаштувати його так:

Зображення поганого з'єднання ODBC

Це не працює. Коли я ввожу ім’я користувача та пароль і натискаю Далі, він затримується на добрі 10 - 20 секунд, а потім, нарешті, повертається із наступною помилкою:

Connection failed:
SQLState: '01000'
SQL Server Error: 1326
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()).
Connection failed:
SQLState: '08001'
SQL Server Error: 17
[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied.

Якщо я спробую те ж саме, але змінити "сервер" 123.456.789.012\SQLEXPRESSна просто старий 123.456.789.012, я отримую іншу помилку:

Connection failed:
SQLState: '01000'
SQL Server Error: 14
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Invalid Instance()).
Connection failed:
SQLState: '08001'
SQL Server Error: 14
[Microsoft][ODBC SQL Server Driver][DBNETLIB]Invalid connection.

Тепер я знаю, що ти думаєш. Ви можете думати, "так, ви, певно, не відкрили брандмауер для порту 1433, манекен". Крім того, що я це зробив, і я перевірив це, оскільки я можу успішно запустити:

telnet 123.456.789.012 1433

... з командного рядка все, що я хочу. Тож я не впевнений, що робити. Я знаю, що SQL Server існує, працює, і ODBC-з'єднання можна налаштувати належним чином; Я просто не впевнений, що це таке. Я помилився в налаштуваннях підключення, що кидає ці помилки. Виходячи з останньої перерахованої я помилки, здавалося б, вона може підключитися до сервера, але просто не може знайти примірник (оскільки я цього часу не вказав). Так це означає, що мені просто потрібно використовувати інший синтаксис, щоб вказати IP разом із ім'ям екземпляра? Що мені робити? Заздалегідь спасибі.

Відповіді:


18

Названі труби та протоколи TCIP для SQL-сервера 2005 відключені за замовчуванням. Ви включили їх у розділі "Менеджер конфігурації сервера SQL"? Ви можете знайти протоколи в конфігурації мережі SQL Server і в конфігурації xx SQL Native client.

Підключення до самого сервера працює завдяки протоколу "Спільна пам'ять".


9
Я приймаю Вашу відповідь, тому що вона перевела мене на правильний шлях. У розділі "Менеджер конфігурації SQL Server" TCP / IP вже було включено у всіх розділах "Конфігурація мережі SQL Server 2005> Протоколи для SQLEXPRESS" та "Конфігурація нативного клієнта SQL> Протоколи клієнта". Названі труби вже були включені в останніх. Я ввімкнув це в попередньому, але це, мабуть, не допомогло (ті ж повідомлення про помилки). Нарешті, я переключив джерело ODBC, щоб використовувати драйвер "SQL Native Client" замість драйвера "SQL Server", і, нарешті, DID спрацював.
soapergem

Дякую SoaperGEM! Я ніколи не подумав би спробувати SQL Native Client! Працював як шарм!
Філіп Сенн

5

Чи ввімкнено службу браузера SQL Server відповідно до того, як налаштувати SQL Server 2005 для дозволу віддалених підключень ?:

Якщо ви запускаєте SQL Server 2005, використовуючи ім'я екземпляра, а ви не використовуєте конкретний номер порту TCP / IP у вашій рядку підключення, ви повинні ввімкнути службу браузера SQL Server, щоб мати можливість віддалених з'єднань. Наприклад, SQL Server 2005 Express встановлений з іменем екземпляра за замовчуванням ім'я комп'ютера \ SQLEXPRESS.


Чи використовує підключення до сервера \ екземпляра локальний інший механізм, ніж віддалений ??
Сем

@Sam див. Відповідь Хакана Вінтера.
Сім

4

Цей потік виправив те саме повідомлення про помилку, коли я використовував Access для підключення до сервера MSSQL 2008. MSSQL 2005 і раніше працювали чудово, просто використовуючи ім'я комп'ютера в рядку з'єднання, але мені довелося перейти на рядок з'єднання в Access до повної форми, коли екземпляр був оновлений до 2008 року:

servername\instancename,portnumber


2
Це було для мене, за винятком того, що мені не потрібен номер порту.
bgmCoder

2

У мене була ця сама проблема і мені вдалося її вирішити, змінивши драйвер SQL на драйвер SQL Native Client. Це було дивно, оскільки в моєму випадку це працювало прекрасно роками, а потім просто перестало працювати. Я підозрюю, що це щось по лінії водія корумповане, можливо, перевстановлення MDAC може допомогти, але поки що я щасливий, що він працює взагалі!


1

Чи визнає воно ім'я сервера, якби воно було повністю кваліфіковане? Якби це MYSERVER.domain.com? Нам довелося це робити з SQL Server під час підключення з іншого домену. Якщо ви можете змусити ODBC System DSN підключитися під час тестування джерела даних, ви прогресуєте. Якщо він не підключається в налаштуваннях ODBC, вам потрібно це виправити спочатку.


Це саме те, що я намагаюся зробити - змусити ODBC System DSN підключитися в першу чергу, коли я тестую джерело даних. Тож я спробував вашу пропозицію, намагаючись і те, MYSERVER.domain.com\SQLEXPRESSі інше MYSERVER.domain.com, але ці обидва дали мені ті самі помилки, які я перелічив вище, відповідно.
soapergem

У командному рядку на іншому комп'ютері типу "nslookup MYSERVER.domain.com" - чи вирішує це правильна IP-адреса (123.456.789.012) чи взагалі?
Сім

@Sim - Так, ця команда робить рішучість належним чином.
soapergem

1

Ви використовуєте названі труби або TCP для з'єднання ODBC, яке працює? Чи включений TCP?


1

Переконайтеся, що для SQL-сервера увімкнено віддалений tcp connectios.


0

Тут просто дикий знімок, але що станеться, якщо ви поставите подвійну косу рису перед іменем сервера або IP-адресою? Мені просто здається, що зазвичай це потрібно для більшості інших підключень Windows / Microsoft.


Спробу подвійного нахилу нахилу призводить до тієї ж помилки 1326 (перша, яку я перерахувала).
soapergem

0

У мене було подібне питання. У моєму випадку інший sw налаштовує налаштування ODBC, тому я не можу змінити драйвер. Я вирішив свою справу так:

  1. Встановіть настройки TCP / IP для сервера для використання порту 1433
  2. На клієнті введіть адресу сервера типу: 192.168.1.5,1433 (відсутність імені примірника)

Потім воно почало працювати. ОС клієнта: драйвер Win7 x64: sqlsrv32.dll


0

Для чого це варто, я почав отримувати цю помилку на з’єднанні, яке раніше працювало. Виявилося, що служба MSSQL $ SQLEXPRESS якось зупинилась. Перезапуск її виправив проблему.


0

У мене була і ця проблема, і це було так просто, як це: сервер, вказаний як основний DNS-сервер для цього сервера, був видалений, і програма більше не змогла правильно вирішити ім'я SQL-сервера в мережі. Все одразу почало працювати знову, коли я виправив локальний DNS-сервер на діючий.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.