SQL Server 연결이 가끔 작동 함


100

ADO.Net 응용 프로그램은 때때로 로컬 네트워크의 다른 서버에 연결할 수 있습니다. 주어진 연결 시도의 성공 여부는 무작위로 보입니다. 연결은 다음 형식의 연결 문자열을 사용합니다.

서버 = THESERVER \ TheInstance; Database = TheDatabase; User Id = TheUser; Password = ThePassword;

반환 된 오류는 다음과 같습니다.

연결 시간이 만료되었습니다. 사전 로그인 핸드 셰이크 승인을 사용하는 동안 시간 초과 기간이 경과했습니다.
사전 로그인 핸드 셰이크가 실패했거나 서버가 제 시간에 응답하지 못했기 때문일 수 있습니다.
이 서버에 연결을 시도하는 동안 소요 된 시간은 다음과 같습니다.-[사전 로그인] 초기화 = 42030; handshake = 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 응용 프로그램이이 오류를 수신 에서 SSMS 및 연결 문자열에 명명 된 사용자 ID / 암호를 사용하여 THESERVER에 연결할 수 있습니다.

ADO.Net 앱에서 연결이 실패하지만 SSMS의 동일한 자격 증명으로 성공하는 이유는 무엇입니까?


답변:


92

TCP / IP는 IPv4 주소에 대해 활성화되었지만 IPv6 주소에는 활성화되지 않았습니다 THESERVER.

분명히 일부 연결 시도는 IPv4를 사용하고 다른 시도는 IPv6를 사용했습니다.

두 IP 버전 모두에 대해 TCP / IP를 활성화하면 문제가 해결되었습니다.

SSMS가 작동했다는 사실은 우연의 일치로 판명되었습니다 (처음 몇 번의 시도는 아마도 IPv4를 사용했을 것입니다). 나중에 SSMS를 통해 연결을 시도하면 동일한 오류 메시지가 나타납니다.

추가 IP 주소에 대해 TCP / IP를 활성화하려면 :

  • SQL Server 구성 관리자 시작
  • 노드 SQL Server 네트워크 구성을 엽니 다.
  • MYSQLINSTANCE에 대한 왼쪽 클릭 프로토콜
  • 오른쪽 창에서 TCP / IP를 마우스 오른쪽 단추로 클릭합니다.
  • 속성을 클릭하십시오.
  • IP 주소 탭을 선택합니다.
  • 나열된 각 IP 주소에 대해 활성 및 사용이 모두 예인지 확인합니다.

감사합니다. 이렇게하면 오류가 해결되었습니다. 흥미롭게도 모든 IP 주소가 비활성화로 설정되었습니다 (이전에는 그렇지 않음). 내 경우에는 구성이 수동으로 변경되지 않을 것이라고 생각하므로 이러한 기능이 비활성화되는 원인을 아는 것이 좋습니다.
Matt

내 IPv6 주소도 수동으로 비활성화하지 않았습니다. 나는 그들이 어떻게 결국 장애가되었는지 궁금합니다.
Eric J.

어떤 이유로 IPv6를 활성화 할 수 없습니다. 변경 사항을 적용하려면 서비스를 다시 시작해야하지만 "예"로 유지하지 않습니다. 그것을 aboout하는 방법에 대한 단서
Salman

5
프로토콜 탭에는 SQL에 모든 IP를 수신하도록 지시하는 재정의 '모두 수신'이 있기 때문에 비활성화되는 개별 항목이 문제인지 확실하지 않습니다. 문서는 다음 링크를 참조하십시오. msdn.microsoft.com/en-us/library/dd981060.aspx
ShaneH 2015-06-25

2
나는 내가 생각하는 푸른에서 이런 종류의 일을보고 있어요
tofutim

31

Ive는 최신 Microsoft 업데이트 (2016 년 9 월 2 일)와 의심스럽게 일치하는 동일한 오류가 발생했습니다. 내 ASP.NET 응용 프로그램이 "사전 로그인 핸드 셰이크 승인을 사용하는 동안 시간 초과 기간이 경과했습니다"오류를 반환하는 동안 SSMS가 문제없이 연결되었음을 발견했습니다.

나를위한 해결책은 연결 문자열에 30 초의 연결 시간 제한을 추가하는 것이 었습니다. 예 :

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

내 상황에서 유일한 영향을받는 연결은 통합 보안을 사용하는 연결이었고 연결하기 전에 사용자를 가장하고 있었지만 SQL 인증을 사용하여 동일한 서버에 대한 다른 연결이 제대로 작동했습니다!

2 개의 테스트 시스템 (별도의 클라이언트 및 SQL 서버)이 동시에 영향을 받아 Microsoft 업데이트가 의심됩니다!


해결해 주셔서 감사합니다. VPN을 통해 통합 보안을 사용하여 연결하고 있었고 기본 연결 시간 제한을 기본값 인 15 초에서 30 초로 늘리면 문제가 해결되었습니다.
Mark G

1
setup.exe가 새 응용 프로그램을 설치하고 시작 프로세스가 새 데이터베이스를 만들려고 한 후 SQL 2014 LocalDB에서이 문제가 발생했습니다. 이 수정으로 더미를 뱉지 않아도됩니다. 감사합니다. Shaun!
Scott

1
이것은 나에게도 문제를 해결했습니다. 제 경우에는 VPN을 통해 연결하고 호스트 파일에 항목을 추가했습니다. 이 문제는 SSMS 및 .NET 응용 프로그램에서 호스트 이름을 사용할 때만 발생했습니다. IP 주소를 사용할 때 문제가 발생하지 않았습니다.
Dan

이 답변에 감사드립니다!
Konrad

17

Eric과 같은 문제를 해결했지만 다른 변경 사항이 있습니다.

  • SQL Server 구성 관리자 시작
  • 노드 SQL Server 네트워크 구성을 엽니 다.
  • MYSQLINSTANCE에 대한 왼쪽 클릭 프로토콜
  • 오른쪽 창에서 TCP / IP를 마우스 오른쪽 단추로 클릭합니다.
  • 속성을 클릭하십시오.
  • IP 주소 탭을 선택합니다.
  • 나열된 각 IP 주소에 대해 활성 및 사용이 모두 예인지 확인합니다.

  • 나열된 각 IP 주소에 대해 TCP 동적 포트가 비어 있고 TCP 포트 = 1433 (또는 다른 포트)인지 확인합니다.
  • Windows 방화벽을 열고 포트가 들어오는 연결에서 열려 있는지 확인하십시오.

솔루션이 작동하지 않습니다. 나는 웹 사이트와 데이터베이스 결코 그것에 발생이 문제를 포함하는 서버를 가지고,하지만 난 웹 서버가 데이터베이스 서버에서 분리되어이 문제 발견
이브라힘 아 메르를

11

엔터티 데이터 모델을 설정하는 동안 Visual Studio에서 VPN을 통해 로컬 네트워크의 서버에 연결하려고 할 때 동일한 문제가 발생했습니다. 연결 문자열
을 설정하여 해결하도록 관리되었습니다 TransparentNetworkIPResolution=false. VS 연결 추가 마법사의 고급 탭에서 찾을 수 있습니다.


3
설정은 TransparentNetworkIPResolution = False입니다. .NET 4.6.1의 새로운 기능이며 기본적으로 켜져 있습니다. 이 값을 false로 설정하면이 기능이 생성하는 500ms 시간 초과가 제거됩니다. 자세한 정보 : blogs.msdn.microsoft.com/dataaccesstechnologies/2016/05/07/…
Jorriss

감사합니다. 이 문제에 대한 연구 시간. 이 응답을 좋아해야합니다. @Jorriss의 의견은 그 이유를 이해하는 데 매우 도움이되었습니다. 그래도 올바른 키워드를 갖도록 답변을 업데이트 할 수 있습니다. Jorriss는 올바른 참조를 가지고 있습니다.
TravisWhidden

5

호스팅 서버에 연결할 때 동일한 핸드 셰이크 문제가 발생했습니다.

네트워크 및 공유 센터를 열고 무선 네트워크 연결에서 IPv6를 활성화했습니다.

여기에 이미지 설명 입력


3

.NET Framework 3.5를 사용하여 빌드 된 실행 파일은 최근 일부 Windows 업데이트가 설치된 후 (2017 년 8 월 7 일 주) 약 절반 만에 이러한 연결 문제를보고하기 시작했습니다.

연결 실패는 대상 컴퓨터에 설치된 .NET Framework 4.7로 인해 발생했습니다 (Windows 업데이트 자동 설치가 켜져 있음) -https : //support.microsoft.com/ ? kbid=3186539

.NET Framework 4.7을 제거하면 연결 문제가 해결되었습니다.

분명히 .Net Framework 4.6.1에는 주요 변경 사항이 있습니다.- TransparentNetworkIPResolution 문서에 따라 연결 문자열을 업데이트하면 프레임 워크 버전을 롤백 할 필요없이 문제가 해결되었습니다.


2

IPv6을 활성화하고 인바운드 포트 1433을 차단 해제하여 Windows Server 2012 및 SQL Server 2012에서이 오류를 수정했습니다.


1
질문에 "때때로 만"이 포함되어 있기 때문에 정답이 아닐 것 같습니다. 차단 된 포트는 이에 관한 질문을 해결하지 않습니다.
Magier

2

우리의 경우 가용성 클러스터 구성으로 인해 문제가 발생했습니다. 이 문제를 해결하려면 MultiSubnetFailover연결 문자열에서 True 로 설정 해야했습니다.

MSDN 에 대한 자세한 내용


1

나는 같은 문제가 있었고 SQL Server 구성 관리자에서 포트 1433 및 tcp / ip를 열거 나 활성화 하여 문제를 해결 한 다음 서버 를 다시 시작 했습니다.

여기에 이미지 설명 입력


1

제 경우에는 위의 모든 옵션이 이미 존재했습니다.

연결 시간 초과 = 30을 늘려 문제를 해결했습니다.SQL Server Management Studio


1

나처럼 문제를 해결하는 데 더 많은 시간을 낭비하기 전에 Windows 시스템다시 시작하십시오 . 다른 모든 솔루션을 적용한 후 나를 위해 일했습니다.


0

SharePoint 2010에서 2013으로 마이그레이션 할 때이 문제가 발생했습니다. 나는 데이터베이스 서버가 IP6을 라우팅하지 않는 방화벽의 반대편에 있기 때문에 IP6을 사용하려고 시도하고 데이터베이스에 연결할 때 실패한다고 의심했습니다.

이제 문제가 해결 된 것 같습니다. 오류가 중지 된 것 같습니다. 내가 한 일은 단순히 SharePoint 서버의 네트워크 어댑터에 대해 IP6 (선택 취소)을 비활성화 한 것입니다.


0

나는 이와 동일한 문제가 있었지만 정적 IP 주소를 사용하여 원격 DB에 연결했습니다. 따라서 위의 솔루션 중 어느 것도 내 문제를 해결하지 못했습니다.

사용중인 보안 로그인에 대해 적절한 사용자 매핑을 추가하지 못했기 때문에 솔루션은 단순히 사용자 매핑 설정이 데이터베이스에 액세스하도록 설정되었는지 확인하는 것이 었습니다.


0

사용자 계정을 무차별 대입하려는 IP 주소를 차단 / 차단하여이 문제를 해결했습니다. SQL 액세스 로그에서 실패한 많은 로그인 시도 (일반적으로 'sa'계정)를 확인하십시오.


0

나에게는 Windows 서버의 방화벽이 기본 SQL 서버 포트 인 1433 포트를 차단하고 있음이 밝혀졌습니다. 따라서 이러한 연결을 허용하는 인바운드 규칙을 추가하는 것이 저에게 트릭이었습니다.


0

제 경우에는 Persist Security Info=true연결 문자열에 사용자와 비밀번호가 있는 매개 변수 가 문제를 일으키는 것입니다. 매개 변수를 제거하거나 false문제 를 해결하도록 설정 하십시오.


0

과감한 작업을 수행하기 전에 먼저 간단한 SQL Server를 다시 시작하십시오. 고칠 수 있습니다. 그것은 나를 위해했다


0

불행히도 Visual Studio에 설치된 로컬 SQL Server에 문제가 있었고 여기에서 많은 솔루션이 작동하지 않았습니다. 내가해야 할 일은 다음으로 이동하여 내 Visual Studio를 재설정하는 것입니다.

제어판> 프로그램 및 기능> Visual Studio 설치 시작 관리자

자세히 버튼을 클릭 하고 수리를 선택하십시오.

그 후 로컬 SQL Server에 액세스하고 로컬 SQL 데이터베이스로 작업 할 수있었습니다.


0

마지막 Microsoft Windows 업데이트 후 자동으로 해결되는 동일한 문제가 있었는데, 누구든지 같은 문제를 경험합니까?


0

나는 정확한 문제가 있었고 몇 가지 soultion이 작동하지 않았으며 마지막으로 시스템을 다시 시작했지만 정상적으로 작동했습니다.


0

"연결 시간 만료" 오류 를 추적하려면 다음 을 확인하십시오.

자세한 내용은 연결 시간 만료를 확인하십시오 . 사전 로그인 핸드 셰이크 승인을 사용하는 동안 시간 초과 기간이 경과했습니다.


다음 중 간헐적 인 오류와 관련된 경우는 무엇입니까?
RonJohn

제휴를 공개하려면 수정하세요 . 필수 항목 입니다. 감사.
Maximillian Laumeister

0

이전에 수락 된 답변에도 불구하고 여기에 답변을 추가합니다. 내 시나리오가 DNS로 확인되었으므로. 보다 구체적으로, 사전 로그인 핸드 셰이크 중 DNS 시간 초과입니다. DNS 이름에서 IP 주소로 변경 (또는 호스트 파일 항목 사용)하면 문제를 우회 할 수 있습니다. 자동 IP 해상도를 잃는 대가가 있지만.

예를 들어 연결 문자열의 시간 초과 값이 1 분 동안 60으로 설정되어 있어도 시도 후 몇 초 내에 계속 발생합니다. 지정된 제한 시간 전에 제한 시간이 초과되는 이유는 무엇입니까? DNS.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.