SQL Server 접속이 동작하는 경우가 있다
ADO.Net 응용 프로그램이 로컬네트워크상의 다른 서버에 접속할 수 없는 경우가 있습니다.특정 연결 시도가 성공할지 실패할지 여부는 랜덤으로 보입니다.연결에서 다음 형식의 연결 문자열을 사용하고 있습니다.
서버=THESERVER\인스턴스데이터베이스=데이터베이스사용자 ID=사용자;패스워드=패스워드
반환되는 오류는 다음과 같습니다.
연결 시간 초과가 만료되었습니다.로그인 전 핸드쉐이크 확인 응답을 소비하려고 할 때 경과한 타임아웃 기간.
이는 로그인 전 핸드쉐이크가 실패했거나 서버가 제시간에 응답하지 못했기 때문일 수 있습니다.
하는 동안 과 같습니다.[ Pre - ]initialization = ; = 0 ;핸드쉐이크 = 0 ;핸드쉐이크 = 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/비밀번호를 사용하여 THE SERVER에 연결할 수 있습니다.
ADO에서 연결이 실패할 수 있는 이유는 무엇입니까?넷 앱이지만 SSMS에서 동일한 자격 증명을 사용하여 성공합니까?
는, 의 가 아니고, TCP/는 IPv4 에 대해서 하게 되어 것이 판명되었습니다.THESERVER.
IPv4 를 사용하는 접속 시도도 있고 IPv6 를 사용하는 접속 시도도 있는 것 같습니다.
양쪽의 IP 버전에서 TCP/IP 를 유효하게 하면, 문제가 해결.
SSMS가 기능한 것은 우연의 일치로 판명되었습니다(처음 몇 번의 시도에서는 IPv4 가 사용되었을 가능성이 있습니다).이후 SSMS를 통해 접속을 시도해도 같은 오류 메시지가 나타납니다.
추가 IP 주소의 TCP/IP 를 유효하게 하려면 , 다음의 순서에 따릅니다.
- SQL Server 구성 관리자 시작
- 노드 SQL Server 네트워크 구성을 엽니다.
- MYSQLINSTANCE용 마우스 왼쪽 버튼
- 오른쪽 페인으로, TCP/IP 를 오른쪽 클릭합니다.
- [ Properties ]을 클릭합니다.
- IP 주소 탭을 선택합니다.
- 리스트 되어 있는 각 IP 주소에 대해서, Active 와 Enabled 의 양쪽 모두가 Yes 인 것을 확인합니다.
같은 에러가 발생했습니다만, Microsoft 의 최신판(2016년 9월 2일)과 일치하고 있는 것이 의심됩니다.ASP에서 SSMS가 문제없이 접속되어 있는 것을 알았습니다.NET 응용 프로그램이 "로그인 전 핸드쉐이크 확인 응답을 소비하는 동안 경과한 시간 초과" 오류를 반환했습니다.
해결책은 접속 문자열에 30초의 접속 타임아웃을 추가하는 것이었습니다.다음은 예를 제시하겠습니다.
ConnectionString="Data Source=xyz;Initial Catalog=xyz;Integrated Security=True;Connection Timeout=30;"
이 경우 유일하게 영향을 받은 접속은 통합 보안을 사용하는 접속으로, 접속하기 전에 사용자를 가장하고 있었습니다.SQL 인증을 사용한 같은 서버에 대한 다른 접속은 정상적으로 동작했습니다.
2개의 테스트 시스템(개별 클라이언트와 SQL 서버)이 동시에 영향을 받아 Microsoft 업데이트가 의심되었습니다.
에릭처럼 문제를 해결했지만 다른 변경사항으로 해결했습니다.
- SQL Server 구성 관리자 시작
- 노드 SQL Server 네트워크 구성을 엽니다.
- MYSQLINSTANCE용 마우스 왼쪽 버튼
- 오른쪽 페인으로, TCP/IP 를 오른쪽 클릭합니다.
- [ Properties ]을 클릭합니다.
- IP 주소 탭을 선택합니다.
- 리스트 되어 있는 각 IP 주소에 대해서, Active 와 Enabled 의 양쪽 모두가 Yes 인 것을 확인합니다.
그리고.
- 나열된 각 IP 주소에 대해 TCP 동적 포트가 비어 있고 TCP 포트 = 1433(또는 다른 포트)인지 확인합니다.
- Windows 방화벽을 열고 포트가 착신 연결로 열려 있는지 확인합니다.
엔티티 데이터 모델을 설정할 때 Visual Studio에서 로컬네트워크(VPN 경유)의 서버에 접속하려고 할 때도 같은 문제가 있었습니다.TransparentNetworkIPResolution=false이치노VS 연결 추가 마법사의 고급 탭에서 찾을 수 있습니다.
호스트 서버에 접속했을 때, 같은 핸드쉐이크 문제가 발생했습니다.
네트워크와 공유 센터를 열고 무선 네트워크 접속으로 IPv6 를 유효하게 했습니다.

Windows Server 2012 및 SQL Server 2012에서 IPv6를 활성화하고 인바운드 포트 1433의 차단을 해제하여 이 오류를 수정했습니다.
OP - OP - OP - OP - OP - OP 。여러 가지 원인이 있는 만큼 여러 가지 해결책이 있다.
저는 MSSql 2019 Developer Edition을 설치했습니다.디폴트에서는, 인스톨은 록다운 되어 있습니다.개발 머신만으로 정상적으로 동작합니다.개발 상자가 아닌 다른 기계에 설치할 경우 방화벽 규칙을 업데이트해야 합니다.
디폴트로는..."MS SQL Server"의 방화벽 프로파일이 개인입니다.
공용 및/또는 도메인 프로파일을 사용 가능으로 설정해야 할 수 있습니다.도메인에서 인증하는 경우에만 도메인을 사용하십시오.
FireWall Windows FireWall 프로파일

또, 모든 IP 주소(허용된 응답과 같이)를 유효하게 하기 위해서 필요한 것은, 다음과 같습니다.
TCP/IP 속성에서 "모두 듣기"를 "예"로 설정합니다.
를 사용하여 작성된 실행 파일.NET Framework 3.5는 최근(2017년 8월 7일 주) 일부 Windows Update가 설치된 후 이러한 연결 문제를 보고하기 시작했습니다.
접속 장애는 에 의해 발생하였습니다.대상 컴퓨터에 설치된 NET Framework 4.7(Windows Updates 자동 설치가 켜져 있음) - https://support.microsoft.com/?kbid=3186539
언인스톨.NET Framework 4.7은 접속 문제를 해결했습니다.
에 획기적인 변화가 있는 것 같습니다.Net Framework 4.6.1 - 트랜스페어런트네트워크IPResolution 문서에 따라 연결 문자열을 업데이트하면 프레임워크 버전을 롤백할 필요 없이 문제가 해결되었습니다.
같은 문제가 발생하여 SQL Server Configuration Manager에서 포트 1433과 tcp/ip를 열고 활성화한 후 서버를 재시작하여 문제를 해결했습니다.
저처럼 문제 해결에 시간을 낭비하기 전에 윈도우 머신을 재부팅해 보세요.다른 모든 솔루션을 적용한 후에 나를 위해 일했다.
이 경우 가용성 클러스터 구성으로 인해 문제가 발생했습니다. 는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★MultiSubnetFailover in string true로 합니다.
MSDN 상세
같은 문제가 있었습니다.다음 행이 있습니다.
sqlConnectionStringBuilder.MultiSubnetFailover = true;
sqlConnectionStringBuilder.TrustServerCertificate = true;
해결했습니다.
편집:
여러 서브넷에 걸친 클러스터에서 SQL Server를 셋업할 때도 이 문제가 해결되었습니다.이것은 DBA에게 서버를 열도록 설득하는 것이 아니라 간단한 테스트 옵션입니다.접속 문자열을 변경할 수 있기 때문입니다.
보안 정보 유지=참;사용자 ID=사용자비밀번호=the Password;초기 카탈로그=DBName;데이터 소스=ServerName, 1433;TrustServerCertificate=참, MultiSubnet Failover=참 <- 이 마지막 arg로 수정했습니다!
내 경우엔 모든 옵션이 이미 있었다.
Connection Time-out =
30을 증가시켜 해결.
이 문제를 해결하려면 사용자 계정을 강제로 실행하려는 IP 주소를 차단하거나 블랙리스트에 올렸습니다.SQL 액세스 로그에서 로그인 시도 실패 횟수가 많은지 확인합니다(일반적으로 'sa' 계정의 경우).
는 '''입니다.Persist Security Info=true접속 문자열에 사용자 및 패스워드가 포함되어 있는 경우 문제가 발생합니다.하거나 " " "로 설정합니다.false제를해해해해
간단한 SQL Server 재시작을 먼저 시도한 후 과감한 작업을 수행하십시오.고칠 수 있을지도 몰라나에겐 그랬다.
안타깝게도 Visual Studio에 설치된 Local SQL Server에 문제가 있어 많은 솔루션이 제대로 작동하지 않았습니다.Visual Studio를 재설정하기만 하면 됩니다.
[컨트롤 패널]> [프로그램 및 기능]> [ Visual Studio Setup Launcher ]
[More] 버튼을 클릭하여 [Repair]를 선택합니다.
그 후 로컬 SQL Server에 액세스하여 로컬 SQL 데이터베이스로 작업할 수 있었습니다.
이전에 수락한 답변에도 불구하고 여기에 응답을 추가합니다.시나리오가 DNS로 확인되었기 때문에 구체적으로 말하면 로그인 전 핸드쉐이크 중 DNS 타임아웃입니다.DNS 이름에서 IP 주소로 변경(또는 Hosts 파일엔트리를 사용)함으로써 문제를 회피할 수 있습니다.단, 자동 IP 해결의 손실은 감수해야 합니다.
예를 들어 Connection String의 타임아웃 값을 1분 동안 60으로 설정해도 시도 후 몇 초 이내에 발생합니다.따라서 지정된 타임아웃 기간 전에 타임아웃이 발생하는 이유에 대해 의문이 생깁니다.DNS.
SharePoint 2010에서 2013으로 마이그레이션할 때 이 문제가 발생했습니다.데이터베이스 서버가 IP6를 라우팅하지 않는 방화벽의 반대편에 있기 때문에 IP6를 사용하려고 했는데 데이터베이스에 접속할 때 장애가 발생했기 때문에 의심했습니다.
이제 문제가 해결된 것 같아요.오류가 멈춘 것 같습니다.SharePoint Server에서 네트워크 어댑터의 IP6를 비활성화(체크박스를 끄면)했습니다.
같은 문제가 있었는데 고정 IP 주소를 사용하여 원격 DB에 접속하고 있었습니다.따라서 위의 솔루션 중 어느 것도 문제를 해결하지 못했습니다.
사용하고 있는 보안 로그인에 적절한 사용자 매핑을 추가하지 못했습니다.따라서 해결책은 데이터베이스에 액세스하도록 사용자 매핑 설정이 설정되어 있는지 확인하는 것이었습니다.
Windows Server의 방화벽이 기본 sql 서버 포트인 포트 1433을 차단한 것으로 나타났습니다.이러한 접속을 받아들이기 위한 인바운드 규칙을 추가한 것이 저를 위한 트릭이 되었습니다.
정확한 문제를 안고 몇 가지 영혼의 기능을 시도했지만, 마지막으로 시스템을 재기동했습니다.정상적으로 동작했습니다.
"Connection Timeout expired" 오류를 추적하려면 다음 사항을 확인하십시오.
- SQL Server Database Engine 인스턴스가 실행 중입니다.
- SQL Server Browser 서비스가 실행 중입니다.
- TCP/IP 가 유효하게 되어 있다.
- 서버 이름이 올바르게 입력되었습니다.
- "애플리케이션 서버에서 데이터베이스 서버로의 SQL Server 인스턴스 연결 확인 방법"에서 설명한 바와 같이 네트워크 문제는 없습니다.
- 데이터베이스 엔진 인스턴스의 TCP/IP 포트가 방화벽에 의해 차단되지 않습니다.
- 클라이언트와 서버가 동일한 네트워크 프로토콜을 사용하도록 구성되어 있습니다.
자세한 내용은 연결 시간 초과를 확인하십시오. 로그인 전 핸드쉐이크 확인 응답을 사용하려고 시도하는 동안 경과한 시간 초과 기간
C#에서는 이것이 나를 미치게 했다.코드의 일부에서는 동작하고 있었지만, 같은 싱글톤을 사용하는 특정 영역에서는 동작하지 않았다.알고 보니 파일을 읽기 위해 가장을 사용했으며 상승된 권한을 사용하는 "신뢰할 수 있는 연결"을 사용하여 SQL 연결을 호출했습니다.상승된 권한 사용자는 SQL DB에 액세스할 수 없으므로 해당 메서드에서만 오류가 발생했습니다.내가 전화를 성대모사 밖으로 옮겼는데 그 후에 잘 작동했어.
언급URL : https://stackoverflow.com/questions/15488922/connection-to-sql-server-works-sometimes
'programing' 카테고리의 다른 글
| XAML에서 제어 중심을 중심으로 회전하는 방법 (0) | 2023.04.14 |
|---|---|
| Windows에서 새로운 프로세스를 작성하는 것이 Linux보다 비싼 이유는 무엇입니까? (0) | 2023.04.14 |
| 수식만 사용하여 Excel에서 고유한 값 가져오기 (0) | 2023.04.14 |
| 열의 행을 Excel의 한 셀로 병합하려면 어떻게 해야 합니까? (0) | 2023.04.14 |
| NSString을 연결하기 위한 Objective-C 바로 가기 (0) | 2023.04.09 |

