Kết nối với máy chủ SQL hoạt động đôi khi


99

Một ứng dụng ADO.Net chỉ đôi khi có thể kết nối với một máy chủ khác trên mạng cục bộ. Có vẻ như ngẫu nhiên cho dù một nỗ lực kết nối nhất định thành công hay thất bại. Kết nối đang sử dụng một chuỗi kết nối ở dạng:

Máy chủ = THESERVER \ TheInstance; Cơ sở dữ liệu = TheDatabase; User Id = TheUser; Mật khẩu = ThePassword;

lỗi trả về là:

Hết thời gian chờ kết nối. Khoảng thời gian chờ đã trôi qua trong khi cố gắng sử dụng xác nhận bắt tay đăng nhập trước.
Điều này có thể là do bắt tay đăng nhập trước không thành công hoặc máy chủ không thể phản hồi lại kịp thời.
Thời lượng dành cho việc cố gắng kết nối với máy chủ này là - [Đăng nhập trước] khởi tạo = 42030; bắt tay = 0;

Ứng dụng .NET là một ứng dụng thử nghiệm nhỏ thực thi mã sau:

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

TheTable nhỏ, chỉ 78 hàng.

Tuy nhiên, trên cùng một máy mà ứng dụng .NET nhận được lỗi này, tôi có thể kết nối với THESERVER bằng SSMS và User Id / Password có tên trong chuỗi kết nối.

Tại sao kết nối có thể không thành công từ ứng dụng ADO.Net nhưng lại thành công với thông tin đăng nhập giống hệt nhau từ SSMS?


1
bạn có thể chạm vấn đề nêu tại blogs.msdn.microsoft.com/dataaccesstechnologies/2016/05/07/...
pardeepk

Câu trả lời:


92

Hóa ra TCP / IP đã được bật cho địa chỉ IPv4, nhưng không cho địa chỉ IPv6 của THESERVER.

Rõ ràng là một số cố gắng kết nối đã sử dụng IPv4 và những người khác sử dụng IPv6.

Bật TCP / IP cho cả hai phiên bản IP đã giải quyết được sự cố.

Thực tế là SSMS hoạt động hóa ra là ngẫu nhiên (một vài lần thử đầu tiên có lẽ đã sử dụng IPv4). Một số lần cố gắng kết nối qua SSMS sau đó dẫn đến thông báo lỗi tương tự.

Để bật TCP / IP cho các địa chỉ IP bổ sung:

  • Khởi động trình quản lý cấu hình máy chủ Sql
  • Mở nút Cấu hình mạng máy chủ SQL
  • Nhấp chuột trái vào Giao thức cho MYSQLINSTANCE
  • Trong ngăn bên phải, nhấp chuột phải vào TCP / IP
  • Nhấp vào Thuộc tính
  • Chọn tab Địa chỉ IP
  • Đối với mỗi địa chỉ IP được liệt kê, hãy đảm bảo Hoạt động và Đã bật đều Có.

Cảm ơn, điều này đã giải quyết lỗi cho tôi. Điều thú vị là tất cả các địa chỉ IP đã được đặt thành vô hiệu hóa (trước đây thì không). Nó sẽ là tốt để biết những gì có thể gây ra những trở thành người khuyết tật như tôi không nghĩ rằng các cấu hình sẽ được thay đổi bằng tay trong trường hợp của tôi ...
Matt

Tôi cũng chưa bao giờ vô hiệu hóa địa chỉ IPv6 của mình theo cách thủ công. Tôi cũng tự hỏi làm thế nào mà họ lại bị vô hiệu hóa.
Eric J.

Tôi không thể kích hoạt IPv6 vì một số lý do. Nó nói rằng dịch vụ cần được khởi động lại để các thay đổi có hiệu lực nhưng nó không bao giờ giữ nó là "Có". Bất kỳ manh mối nào về cách bắt đầu nó
Salman

5
Tôi không chắc rằng các mục nhập riêng lẻ bị vô hiệu hóa là một vấn đề vì tab Giao thức có ghi đè 'lắng nghe tất cả' yêu cầu SQL lắng nghe trên tất cả các IP. Xem liên kết sau để biết tài liệu. msdn.microsoft.com/en-us/library/dd981060.aspx
ShaneH

2
Tôi đang nhìn thấy loại thứ này trong Azure, tôi nghĩ
tofutim 22/12/16

30

Tôi đã gặp phải lỗi tương tự vừa xuất hiện, điều này đã liên kết đáng ngờ với vòng cập nhật mới nhất của Microsoft (09/02/2016). Tôi nhận thấy rằng SSMS được kết nối mà không có vấn đề gì trong khi ứng dụng ASP.NET của tôi trả về lỗi "khoảng thời gian chờ đã trôi qua khi cố xử lý lỗi xác nhận bắt tay đăng nhập trước"

Giải pháp cho tôi là thêm thời gian chờ kết nối 30 giây vào chuỗi kết nối, ví dụ:

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

Trong tình huống của tôi, kết nối bị ảnh hưởng duy nhất là kết nối đang sử dụng Bảo mật tích hợp và tôi đang mạo danh người dùng trước khi kết nối, các kết nối khác đến cùng một máy chủ sử dụng Xác thực SQL hoạt động tốt!

2 hệ thống thử nghiệm (máy khách riêng biệt và máy chủ Sql) bị ảnh hưởng cùng lúc khiến tôi nghi ngờ có bản cập nhật microsoft!


Tôi đã có cùng một vấn đề, cảm ơn đã giải quyết. Tôi đang kết nối bằng bảo mật tích hợp qua VPN và việc tăng thời gian chờ kết nối mặc định từ mặc định là 15 giây lên 30 giây đã giải quyết được sự cố cho tôi.
Đánh dấu G

1
Tôi gặp sự cố này với SQL 2014 LocalDB sau khi setup.exe cài đặt ứng dụng mới và quá trình khởi động đang cố gắng tạo cơ sở dữ liệu mới. Bản sửa lỗi này đã giúp tôi khỏi nhổ hình nộm - cảm ơn Shaun!
Scott

1
Điều này cũng giải quyết vấn đề cho tôi. Trong trường hợp của tôi, tôi đã kết nối qua VPN và thêm mục nhập vào tệp máy chủ. Sự cố chỉ xảy ra khi sử dụng tên máy chủ trong các ứng dụng SSMS và .NET. Khi sử dụng địa chỉ IP, sự cố đã không xảy ra.
Dan

CẢM ƠN BẠN VÌ CÂU TRẢ LỜI NÀY!
Konrad

17

Tôi đã giải quyết vấn đề giống như Eric nhưng với một số thay đổi khác:

  • Khởi động trình quản lý cấu hình máy chủ Sql
  • Mở nút Cấu hình mạng máy chủ SQL
  • Nhấp chuột trái vào Giao thức cho MYSQLINSTANCE
  • Trong ngăn bên phải, nhấp chuột phải vào TCP / IP
  • Nhấp vào Thuộc tính
  • Chọn tab Địa chỉ IP
  • Đối với mỗi địa chỉ IP được liệt kê, hãy đảm bảo Hoạt động và Đã bật đều Có.

  • Đối với mỗi địa chỉ IP được liệt kê, hãy đảm bảo Cổng động TCP trống và Cổng TCP = 1433 (hoặc một số cổng khác)
  • Mở tường lửa windows và kiểm tra xem cổng có được mở trong các kết nối đến không

Giải pháp không hiệu quả với tôi. Tôi có một máy chủ chứa website và cơ sở dữ liệu và vấn đề này không bao giờ xảy ra trên đó, nhưng tôi thấy vấn đề này khi máy chủ web được tách ra từ máy chủ cơ sở dữ liệu
Ibrahim Amer

11

Tôi gặp sự cố tương tự, cố gắng kết nối với máy chủ trong mạng cục bộ (thông qua VPN) từ Visual Studio trong khi thiết lập Mô hình dữ liệu thực thể.
Được quản lý để giải quyết chỉ bằng cách thiết lập TransparentNetworkIPResolution=falsetrong chuỗi kết nối. Trong VS Add Connection Wizard, bạn có thể tìm thấy nó trong tab Advanced.


3
Cài đặt là TransparentNetworkIPResolution = False. Đó là một tính năng mới của .NET 4.6.1 và được bật theo mặc định. Đặt giá trị này thành false sẽ loại bỏ thời gian chờ 500ms mà tính năng này tạo ra. Để biết thêm thông tin: blogs.msdn.microsoft.com/dataaccesstechnologies/2016/05/07/...
Jorriss

Cảm ơn bạn. Nhiều giờ nghiên cứu về vấn đề này. Tôi cần phải thích phản hồi này. Nhận xét của @Jorriss rất hữu ích khi hiểu lý do. Bạn có thể cập nhật câu trả lời của mình để có từ khóa chính xác. Jorriss có tài liệu tham khảo chính xác.
TravisWhiised

5

Tôi đã gặp sự cố bắt tay tương tự khi kết nối với máy chủ được lưu trữ.

Tôi đã mở Trung tâm mạng và chia sẻ của mình và bật IPv6 trên kết nối mạng không dây của mình.

nhập mô tả hình ảnh ở đây


3

Tệp thực thi của tôi được xây dựng bằng .NET Framework 3.5 bắt đầu báo cáo các sự cố kết nối này trong khoảng một nửa số lần sau khi một số Bản cập nhật Windows được cài đặt gần đây (tuần ngày 7 tháng 8 năm 2017).

Lỗi kết nối do .NET Framework 4.7 đã được cài đặt trên máy tính đích (đã bật tính năng tự động cài đặt Windows Updates) - https://support.microsoft.com/?kbid=3186539

Gỡ cài đặt .NET Framework 4.7 đã giải quyết được các vấn đề kết nối.

Rõ ràng, có một thay đổi đột ngột trong .Net Framework 4.6.1 - TransparentNetworkIPResolution Cập nhật chuỗi kết nối theo bài viết cũng giải quyết được vấn đề mà không cần phải quay lại phiên bản khung.


2

Tôi đã khắc phục lỗi này trên Windows Server 2012 và SQL Server 2012 bằng cách bật IPv6 và bỏ chặn cổng đến 1433.


1
Tôi nghĩ rằng đây không thể là một câu trả lời chính xác vì câu hỏi chỉ chứa "đôi khi". Một cổng bị chặn sẽ không giải quyết câu hỏi liên quan đến điều này.
Magier

2

Trong trường hợp của chúng tôi, sự cố đã xảy ra do cấu hình cụm khả dụng. Để giải quyết vấn đề này, chúng tôi phải đặt MultiSubnetFailoverthành True trong chuỗi kết nối.

Thêm chi tiết về MSDN


1

Tôi đã gặp vấn đề tương tự, hãy quản lý để giải quyết nó bằng cách mở / bật cổng 1433 và tcp / ip trong Trình quản lý cấu hình máy chủ SQL rồi Khởi động lại máy chủ

nhập mô tả hình ảnh ở đây


1

Trong trường hợp của tôi, trên tất cả các tùy chọn đều đã có.

Đã giải quyết vấn đề này bằng cách tăng Thời gian chờ kết nối = 30.SQL Server Management Studio


1

Trước khi bạn mất thêm thời gian giải quyết vấn đề, giống như tôi, hãy thử khởi động lại máy tính Windows của bạn . Làm việc cho tôi sau khi áp dụng tất cả các giải pháp khác.


0

Tôi gặp sự cố này khi di chuyển SharePoint 2010 sang 2013. Tôi nghi ngờ điều đó vì máy chủ cơ sở dữ liệu nằm ở phía bên kia của tường lửa không định tuyến IP6 mà sau đó nó đang cố gắng sử dụng IP6 và không thành công khi kết nối với cơ sở dữ liệu.

Tôi nghĩ rằng vấn đề bây giờ đã được giải quyết. Các lỗi dường như đã dừng lại. Những gì tôi đã làm là tôi chỉ đơn giản là vô hiệu hóa IP6 (bằng cách bỏ chọn nó) cho bộ điều hợp mạng trên Máy chủ SharePoint.


0

Tôi cũng gặp sự cố này nhưng tôi đang kết nối với một db từ xa bằng địa chỉ IP tĩnh. Vì vậy, không có giải pháp nào ở trên giải quyết được vấn đề của tôi.

Tôi đã không thể thêm Bản đồ người dùng thích hợp cho Đăng nhập bảo mật mà tôi đang sử dụng, vì vậy giải pháp cho tôi chỉ đơn giản là đảm bảo cài đặt Bản đồ người dùng được đặt để truy cập cơ sở dữ liệu của tôi.


0

Đã giải quyết vấn đề này bằng cách chặn / đưa vào danh sách đen địa chỉ IP đang cố gắng cưỡng bức tài khoản người dùng. Kiểm tra nhật ký truy cập SQL của bạn để tìm số lượng lớn các lần đăng nhập không thành công (thường là đối với tài khoản 'sa').


0

Đối với tôi, hóa ra là tường lửa trong máy chủ windows đã chặn cổng 1433 là cổng máy chủ sql mặc định. Vì vậy, thêm một quy tắc gửi đến để chấp nhận những kết nối đó đã tạo ra một mẹo nhỏ cho tôi.


0

Trong trường hợp của tôi, tham số Persist Security Info=truevới người dùng và mật khẩu trong chuỗi kết nối đang gây ra sự cố. Xóa tham số hoặc thiết lập để falsegiải quyết vấn đề.


0

Hãy thử khởi động lại SQL Server đơn giản trước trước khi thực hiện bất cứ điều gì mạnh mẽ. Có thể sửa chữa nó. Nó đã làm cho tôi


0

Rất tiếc, tôi đã gặp sự cố với Máy chủ SQL cục bộ được cài đặt trong Visual Studio và ở đây nhiều giải pháp không hiệu quả với tôi. Tất cả những gì tôi phải làm là đặt lại Visual Studio của mình, bằng cách đi tới:

Bảng điều khiển> Chương trình & Tính năng> Trình khởi chạy Thiết lập Visual Studio

và nhấp vào nút Thêm và chọn Sửa chữa

Sau đó, tôi đã có thể truy cập Máy chủ SQL cục bộ của mình và làm việc với Cơ sở dữ liệu SQL cục bộ.


0

Tôi đã gặp vấn đề tương tự tự động giải quyết sau lần cập nhật Microsoft windows cuối cùng, có ai gặp phải vấn đề tương tự không?


0

Tôi đã gặp sự cố chính xác, đã thử một số soultion không hoạt động, cuối cùng khởi động lại hệ thống, nó hoạt động tốt.


0

Để theo dõi lỗi "Kết nối hết thời gian chờ" , hãy đảm bảo rằng:

Để biết thêm chi tiết, vui lòng kiểm tra Hết thời gian chờ kết nối. Khoảng thời gian chờ đã trôi qua trong khi cố gắng sử dụng xác nhận bắt tay đăng nhập trước


Trường hợp nào xảy ra lỗi ngắt quãng?
RonJohn

Vui lòng chỉnh sửa để tiết lộ liên kết, nó là bắt buộc . Cảm ơn.
Maximillian Laumeister

0

Thêm một câu trả lời ở đây, mặc dù câu trả lời đã được chấp nhận trước đó. Như kịch bản của tôi đã được xác nhận là DNS. Cụ thể hơn, thời gian chờ dns trong quá trình bắt tay đăng nhập trước. Bằng cách thay đổi từ tên DNS thành Địa chỉ IP (hoặc sử dụng mục nhập tệp Máy chủ), bạn đã vượt qua được vấn đề. Mặc dù phải trả giá bằng việc mất độ phân giải ip tự động.

Ví dụ: ngay cả với giá trị thời gian chờ của Chuỗi kết nối được đặt thành 60 cho một phút đầy đủ, nó vẫn sẽ xảy ra trong vòng một vài giây sau khi thử. Điều này khiến người ta đặt câu hỏi tại sao nó lại hết thời gian chờ trước khoảng thời gian được chỉ định? DNS.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.