Підключення до SQL Server працює іноді


100

Додаток ADO.Net лише іноді може підключитися до іншого сервера в локальній мережі. Здається випадковим, вдала чи невдала спроба підключення. Для з'єднання використовується рядок з'єднання у формі:

Сервер = THESERVER \ TheInstance; База даних = TheDatabase; ID користувача = TheUser; Пароль = ThePassword;

повернена помилка:

Термін очікування підключення минув. Період часу очікування минув під час спроби споживати підтвердження рукостискання перед входом у систему.
Це може бути через те, що рукостискання перед входом у систему не вдалося або сервер не зміг відповісти вчасно.
Тривалість спроби підключитися до цього сервера тривала: [Pre-Login] ініціалізація = 42030; рукостискання = 0;

Додаток .NET - це невеликий тестовий додаток, який виконує такий код:

using (SqlConnection conn = new SqlConnection(cs))
using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM TheTable", conn))
{
    conn.Open();
    int rowCount = (int)cmd.ExecuteScalar();
}

Таблиця невелика, всього 78 рядів.

Однак на тій же машині, де додаток .NET отримує цю помилку, я в змозі підключитися до THESERVER за допомогою SSMS та ідентифікатора користувача / пароля, зазначеного в рядку з'єднання.

Чому з’єднання може не вдатися через додаток ADO.Net, але досягти успіху з однаковими обліковими записами SSMS?


1
ви можете зачепити проблему, згадану в blogs.msdn.microsoft.com/dataaccesstechnologies/2016/05/07/…
pardeepk

Відповіді:


92

Виявилося, що TCP / IP увімкнено для адреси IPv4, але не для IPv6 адреси THESERVER.

Мабуть, деякі спроби з'єднання закінчилися використанням IPv4, а інші використовували IPv6.

Увімкнення проблеми TCP / IP для обох версій IP вирішило проблему.

Той факт, що SSMS працював, виявився випадковим (перші кілька спроб, імовірно, використовували IPv4). Деякі пізніші спроби підключення через SSMS призвели до того ж повідомлення про помилку.

Щоб увімкнути TCP / IP для додаткових IP-адрес:

  • Запустіть менеджер конфігурації сервера Sql
  • Відкрийте вузол Конфігурація мережі SQL Server
  • Клацніть лівою кнопкою миші протоколи для MYSQLINSTANCE
  • На правій панелі клацніть правою кнопкою миші TCP / IP
  • Клацніть Властивості
  • Виберіть вкладку IP адреси
  • Для кожної переліченої IP-адреси переконайтесь, що "Активні" та "Увімкнено" так.

Дякую, це вирішило помилку для мене. Цікаво, що всі IP-адреси були відключені (раніше їх не було). Було б добре знати, що може спричинити їх вимкнення, оскільки я не думаю, що в моєму випадку конфігурацію було б змінено вручну ...
Метт

Я ніколи вручну не відключав свої адреси IPv6. Мені теж цікаво, як вони закінчилися інвалідами.
Ерік Дж.

Я не в змозі зробити IPv6 включеним з якихось причин. У ньому йдеться про те, що службу потрібно перезапустити, щоб зміни набрали чинності, але вона ніколи не зберігає її як "Так". Будь-які підказки про те, як вийти з нього
Салман

5
Я не впевнений, що відключення окремих записів є проблемою, оскільки на вкладці "Протокол" перезаписано "прослухати всіх", що дозволяє SQL слухати всі IP-адреси. Дивіться наступне посилання для документації. msdn.microsoft.com/en-us/library/dd981060.aspx
ShaneH

2
я бачу такого роду речі в блакиті я думаю
tofutim

31

У мене з'явилася така ж помилка, яка підозріло співпадає з останнім раундом оновлень Microsoft (02.02.2016). Я виявив, що SSMS підключено без проблем, поки мій додаток ASP.NET повертав помилку "проміжок часу, який минув під час спроби спожити підтвердження рукостискання перед входом".

Для мене рішення було додати час з'єднання 30 секунд у рядок з'єднання, наприклад:

ConnectionString="Data Source=xyz;Initial Catalog=xyz;Integrated Security=True;Connection Timeout=30;"

У моїй ситуації єдиним пошкодженим з’єднанням було те, що використовувало інтегровану безпеку, і я видавав себе за користувача, перед тим як підключатись, інші підключення до того ж сервера за допомогою аутентифікації SQL працювали чудово!

2 тест-системи (окремі клієнти та сервери Sql) постраждали в той же час, що призвело до того, що я підозрюю оновлення microsoft!


У мене була така ж проблема, дякую за резолюцію. Я підключався, використовуючи інтегровану безпеку через VPN, і збільшення тайм-ауту з'єднання за замовчуванням з типових 15s до 30s вирішило проблему для мене.
Марк Г

1
У мене була ця проблема з SQL 2014 LocalDB після того, як setup.exe встановив нову програму, і процес запуску намагався створити нову базу даних. Це виправлення врятувало мене від плюнення пустушки - дякую Шон!
Скотт

1
Це вирішило і це питання для мене. У моєму випадку я підключався через VPN та додав запис у файл хостів. Проблема виникла лише при використанні імені хоста в додатках SSMS та .NET. При використанні IP-адреси проблеми не виникло.
Ден

ДЯКУЄМО ЗА ЦЕЙ ВІДПОВІДЬ!
Конрад

17

Я вирішив проблему, як Ерік, але з іншими змінами:

  • Запустіть менеджер конфігурації сервера Sql
  • Відкрийте вузол Конфігурація мережі SQL Server
  • Клацніть лівою кнопкою миші протоколи для MYSQLINSTANCE
  • На правій панелі клацніть правою кнопкою миші TCP / IP
  • Клацніть Властивості
  • Виберіть вкладку IP адреси
  • Для кожної переліченої IP-адреси переконайтесь, що "Активні" та "Увімкнено" так.

І

  • Для кожної переліченої IP-адреси переконайтеся, що динамічні порти TCP порожні, а порт TCP = 1433 (або якийсь інший порт)
  • Відкрийте брандмауер windows і перевірте, чи порт відкрито в вхідних з'єднаннях

Рішення для мене не працює. У мене є сервер, який містить веб-сайт та базу даних, і ця проблема ніколи не виникає на ньому, але я виявив цю проблему, коли веб-сервер відокремлений від сервера баз даних
Ібрагім Амер

11

У мене була така ж проблема, намагаючись підключитися до сервера в локальній мережі (через VPN) від Visual Studio, налаштовуючи Entity Data Model.
Вдалося вирішити лише встановленням TransparentNetworkIPResolution=falseу рядку з'єднання. У VS Add майстер підключення ви можете знайти його на вкладці Додатково.


3
Налаштування - TransparentNetworkIPResolution = Неправильно. Це нова функція на .NET 4.6.1 і включена за замовчуванням. Якщо встановити це значення false, то буде видалено 500 м очікування, яке ця функція створює. Для отримання додаткової інформації: blogs.msdn.microsoft.com/dataaccesstechnologies/2016/05/07/…
Jorriss

Дякую. Години досліджень цієї проблеми. Мені потрібно вподобати цю відповідь. Коментар @Jorriss був дуже корисним для розуміння того, чому. Ви можете оновити свою відповідь, щоб мати правильне ключове слово. Йорріс має правильне посилання.
TravisВідкрито

5

У мене була та сама проблема рукостискання під час підключення до розміщеного сервера.

Я відкрив Мережу та центр обміну та включив IPv6 у своєму бездротовому мережевому з'єднанні.

введіть тут опис зображення


3

Мій виконуваний файл, створений за допомогою .NET Framework 3.5, почав повідомляти про ці проблеми з підключенням приблизно в половині разів після того, як деякі оновлення Windows були встановлені нещодавно (тиждень 7 серпня 2017 року).

Помилки підключення були спричинені .NET Framework 4.7, який був встановлений на цільовому комп'ютері (автоматична установка оновлень Windows була включена) - https://support.microsoft.com/?kbid=3186539

Видалення .NET Framework 4.7 вирішило проблеми з підключенням.

Мабуть, в .Net Framework 4.6.1 - невід'ємна зміна. TransparentNetworkIPResolution Оновлення рядка з'єднання відповідно до статті також вирішило проблему, не потребуючи відкочування версії рамки.


2

Я виправив цю помилку на Windows Server 2012 та SQL Server 2012, включивши IPv6 та розблокувавши вхідний порт 1433.


1
Я думаю, що це не може бути правильною відповіддю, оскільки питання містить "лише іноді". Заблокований порт не вирішує питання щодо цього.
Маг'є

2

У нашому випадку проблема виникла через конфігурацію кластеру доступності. Щоб вирішити цю проблему, нам довелося встановити MultiSubnetFailoverзначення True у рядку з'єднання.

Детальніше про MSDN


1

У мене була така ж проблема, мені вдалося її вирішити, відкривши / включивши порт 1433 та tcp / ip в Менеджері конфігурацій SQL Server, а потім перезапустив сервер

введіть тут опис зображення


1

У моєму випадку вище всіх варіантів вже було.

Вирішили це, збільшивши тайм-аут підключення = 30.Студія управління SQL Server


1

Перш ніж ви втратите більше часу для вирішення проблеми, як я, спробуйте просто перезапустити свою машину Windows . Працював для мене після застосування всіх інших рішень.


0

У мене була ця проблема, коли я робив міграцію SharePoint 2010 на 2013 рік. Я підозрював, що через те, що сервер бази даних знаходиться з іншого боку брандмауера, який не здійснює маршрутизацію IP6, він намагався використовувати IP6 і не вдався під час підключення до бази даних.

Я думаю, питання зараз вирішено. Помилки, схоже, зупинилися. Що я зробив, я просто відключив IP6 (знявши його) для мережевого адаптера на серверах SharePoint.


0

У мене була ця сама проблема, але я підключався до віддаленого db за допомогою статичної IP-адреси. Тож жодне з вищезазначених рішень не вирішило мого питання.

Мені не вдалося додати належну картографічну карту для входу, який я використовував, тому для мене рішення було просто забезпечити встановлення параметрів "Мапування користувачів" для доступу до моєї бази даних.


0

Вирішили цю проблему, заблокувавши / заблокувавши ІР-адресу, яка намагалася змусити грубі облікові записи користувачів. Перевірте свої журнали доступу до SQL на велику кількість невдалих спроб входу (зазвичай для акаунта 'sa').


0

Для мене виявляється, що брандмауер на сервері Windows блокував порт 1433, який є портом сервера sql за замовчуванням. Тож додавання вхідного правила прийняття цих з'єднань зробило для мене хитрість.


0

У моєму випадку параметр Persist Security Info=trueіз користувачем та паролем у рядку з'єднання викликає проблему. Видалення параметра або встановлення для falseвирішення проблеми.


0

Спробуйте спочатку перезапустити простий SQL Server, перш ніж робити щось кардинальне. Можна виправити це. Це зробило для мене


0

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

Панель управління> Програма та функції> Запуск програми встановлення Visual Studio

і натисніть кнопку Додатково та виберіть « Відновити»

Після цього я зміг отримати доступ до свого локального SQL-сервера та працювати з локальними базами даних SQL.


0

У мене була та сама проблема, яка автоматично вирішується після останнього оновлення Windows, чи відчуває хтось те саме?


0

У мене була точна проблема, спробував кілька душевних дій, не працював, нарешті перезапустив систему, вона працювала чудово.


0

Щоб відстежити помилку "Термін закінчення з'єднання минув" , переконайтесь, що:

Для отримання більш детальної інформації, будь ласка, перевірте термін очікування підключення минув. Період часу очікування минув під час спроби споживати підтвердження рукостискання перед входом у систему


Який із цих випадків пов'язаний з помилковими помилками?
РонДжон

Відредагуйте, щоб розкрити приналежність, це потрібно . Дякую.
Максиміліан Ламестер

0

Додайте сюди відповідь, незважаючи на попередньо прийняту відповідь. Як мій сценарій був підтверджений DNS. Більш конкретно, час очікування dns під час рукостискання перед входом у систему. Змінивши з імені DNS на IP-адресу (або використовуючи запис файлу Hosts), ви усунете проблему. Хоча ціною втрати автоматичної роздільної здатності ip.

Наприклад, навіть якщо значення тайм-ауту підключення струни підключення дорівнює 60 на повну хвилину, це все одно відбудеться протягом декількох секунд після спроби. Що призводить до запитання, чому б це було встановлено тайм-аут до зазначеного періоду очікування? DNS.

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