SQL Server 연결 문제 해결을 위한 권장 필수 구성 요소 및 검사 목록

적용 대상: SQL Server
원본 KB 번호: 4009936

연결 문제를 효과적으로 해결하려면 다음 정보를 수집합니다.

  • 오류 메시지의 텍스트 및 오류 코드입니다. 오류가 일시적인지(가끔만 발생) 일관성(항상 발생)인지 확인합니다.

  • SQL Server 및 클라이언트 시스템의 애플리케이션 및 시스템 이벤트 로그입니다. 이러한 로그는 SQL Server 발생하는 시스템 전체 문제가 있는 경우 검사 데 도움이 될 수 있습니다.

  • 애플리케이션에서 연결이 실패하는 경우 애플리케이션에서 연결 문자열을 수집합니다. 이러한 문자열은 일반적으로 ASP.NET 애플리케이션에 대한 Web.config 파일에서 찾을 수 있습니다.

  • 다른 오류 메시지 및 예외에 대한 SQL Server 오류 로그를 수집하고 검토합니다.

  • 관리자가 SQL Server 컴퓨터에 액세스할 수 있는 경우 다음 절차를 사용하여 현재 컴퓨터 설정 및 서비스 계정을 수집하고 검토합니다.

    1. 최신 버전의 SQLCHECK를 다운로드합니다.

    2. 다운로드한 파일의 압축을 폴더(예 : C:\Temp)로 압축 해제합니다.

    3. 관리자 권한으로 명령 프롬프트를 실행하여 데이터를 수집하고 파일에 저장합니다. 예: SQLCHECK > C:\Temp\server01.SQLCHECK.TXT

    참고

    원격 클라이언트의 연결 문제를 해결하거나 연결된 서버 쿼리 문제를 해결하는 경우 관련된 모든 시스템에서 SQLCHECK 도구를 실행합니다.

연결 문제 해결을 위한 빠른 검사 목록

참고

다음 섹션에서는 연결 문제를 신속하게 검사 수 있습니다. 자세한 문제 해결 단계는 개별 topics 검토합니다.

옵션 1

권장 필수 구성 요소 섹션에 언급된 SQLCHECK 도구의 출력에 액세스하고 출력 파일(컴퓨터, 클라이언트 보안 및 SQL Server)의 다양한 섹션에서 정보를 검토할 수 있는 경우 정보를 사용하여 문제에 기여하는 문제를 해결합니다. 다음 예제를 참조하세요.

파일의 섹션 검색할 텍스트 잠재적 작업 문제 해결에 도움이 될 수 있습니다(예제)
컴퓨터 정보 경고: 네트워크 드라이버가 만료되었을 수 있습니다. 새 드라이버가 있는지 온라인으로 확인합니다. 다양한 연결 오류
클라이언트 보안 및 드라이버 정보 Diffie-Hellman 암호 그룹을 사용할 수 있습니다. 알고리즘 버전이 클라이언트와 서버 간에 다른 경우 일시적인 TLS 오류가 발생할 수 있습니다. 일시적인 연결 문제가 있는 경우 Windows의 SQL Server에 연결할 때 애플리케이션 환경이 강제로 닫힌 TLS 연결 오류를 참조하세요. 원격 호스트에 의해 기존 연결이 강제로 끊어졌습니다.
클라이언트 보안 및 드라이버 정보 SQL 별칭 있는 경우 별칭이 올바르게 구성되고 올바른 서버 및 IP 주소를 가리키는지 확인합니다. SQL Server에 연결하는 동안 네트워크 관련 오류 또는 인스턴스에 특정한 오류가 발생했습니다.
SQL Server 정보 관심 있는 서비스 SQL 서비스가 시작되지 않은 경우 시작합니다. 명명된 instance 연결하는 데 문제가 있는 경우 SQL Server Browser 서비스가 시작되었는지 확인하거나 브라우저 서비스를 다시 시작해 보세요. SQL Server에 연결하는 동안 네트워크 관련 오류 또는 인스턴스에 특정한 오류가 발생했습니다.
SQL Server 정보 도메인 서비스 계정 속성 SQL Server 연결된 서버를 구성하고 Del에 대한 신뢰 값이 false로 설정된 경우 연결된 서버 쿼리에 인증 문제가 발생할 수 있습니다. "사용자 로그인 실패" 오류 문제 해결
SQL Server 정보 SPN이 없습니다. 이 표를 확인하여 SQL Server 대한 SPN이 제대로 구성되었는지 확인하고 식별된 문제를 해결합니다. SSPI 컨텍스트를 생성할 수 없습니다.
SQL Server 정보 SQL Server 인스턴스에 대한 세부 정보 TCP 사용, TCP 포트 등의 값을 확인합니다. 서버 쪽에서 TCP/IP를 사용할 수 있는지 여부와 SQL 기본 instance 1433 또는 다른 포트에서 수신 대기하는지 검토합니다. 다양한 연결 오류

옵션 2

SQL Server 컴퓨터에서 SQLCHECK를 실행할 수 없는 경우 자세한 문제 해결을 수행하기 전에 다음 항목을 검사 수 있습니다.

  1. SQL Server 시작되고 SQL Server 오류 로그에 다음 메시지가 표시되는지 확인합니다.

    SQL Server 이제 클라이언트 연결에 사용할 준비가 되었습니다. 정보 메시지입니다. 사용자 작업이 필요하지 않습니다.

    PowerShell에서 다음 명령을 사용하여 시스템에서 SQL Server 서비스의 상태 검사.

    Get-Service | Where {$_.status -eq 'running' -and $_.DisplayName -match "sql server*"}
    

    다음 명령을 사용하여 오류 로그 파일에서 특정 문자열 "SQL Server 클라이언트 연결 준비가 되었습니다.를 검색합니다. 정보 메시지입니다. 사용자 작업은 필요하지 않습니다.":

    Get-ChildItem -Path "c:\program files\microsoft sql server\mssql*" -Recurse -Include Errorlog |select-string "SQL Server is now ready for client connections."
    
  2. IP 주소를 통해 기본 연결을 확인하고 이상에 대한 검사 확인합니다ping -a <SQL Server machine>, ping -a <SQL Server IP address>. 문제가 발견되면 네트워크 관리자에게 문의하세요. 또는 PowerShell에서 를 사용할 Test-NetConnection 수 있습니다.

    $servername = "DestinationServer"
    Test-NetConnection -ComputerName $servername
    
  3. 오류 로그를 검토하여 SQL Server 적절한 프로토콜을 수신 대기하고 있는지 확인합니다.

     Get-ChildItem -Path "c:\program files\microsoft sql server\mssql*" -Recurse -Include Errorlog |select-string "Server is listening on" , "ready to accept connection on" -AllMatches
    
  4. UDL 파일을 사용하여 SQL Server 연결할 수 있는지 확인합니다. 작동하는 경우 연결 문자열 문제가 있을 수 있습니다. UDL 테스트 절차에 대한 지침은 UDL 파일을 사용하여 SQL Server OLE DB 연결 테스트를 참조하세요. 또는 다음 스크립트를 사용하여 %TEMP% 폴더에 저장된 UDL-Test.udl 파일을 만들고 시작할 수 있습니다.

    clear
    
    $ServerName = "(local)"
    $UDL_String = "[oledb]`r`n; Everything after this line is an OLE DB initstring`r`nProvider=MSOLEDBSQL.1;Integrated Security=SSPI;Persist Security Info=False;User ID=`"`";Initial Catalog=`"`";Data Source=" + $ServerName + ";Initial File Name=`"`";Server SPN=`"`";Authentication=`"`";Access Token=`"`""
    
    Set-Content -Path ($env:temp + "\UDL-Test.udl") -Value $UDL_String -Encoding Unicode
    
    #open the UDL
    Invoke-Expression ($env:temp + "\UDL-Test.udl")
    
  5. 다른 클라이언트 시스템 및 다른 사용자 로그인에서 SQL Server 연결할 수 있는지 확인합니다. 문제가 발생할 수 있는 경우 문제가 발생한 클라이언트 또는 로그인과 관련이 있을 수 있습니다. 문제가 있는 클라이언트의 Windows 이벤트 로그에서 더 많은 포인터를 확인합니다. 또한 네트워크 드라이버가 최신 상태인지 여부를 검사.

  6. 로그인 오류가 발생하는 경우 로그인(서버 보안 주체)이 있고 CONNECT SQL SQL Server 권한이 있는지 확인합니다. 또한 로그인에 할당된 기본 데이터베이스가 올바르고 매핑된 데이터베이스 보안 주체 CONNECT 에 데이터베이스에 대한 권한이 있는지 확인합니다. 데이터베이스 보안 주체에 권한을 부여하는 CONNECT 방법에 대한 자세한 내용은 GRANT Database Permissions를 참조하세요. 서버 주체에 권한을 부여하는 CONNECT SQL 방법에 대한 자세한 내용은 GRANT Server Permissions를 참조하세요. 다음 스크립트를 사용하여 이러한 권한을 식별할 수 있습니다.

    clear
    ## replace these variables with the login, user, database and server 
    $server_principal = "CONTOSO\JaneK"  
    $database_principal = "JaneK"
    $database_name = "mydb"
    $server_name = "myserver"
    
    Write-Host "`n******* Server Principal (login) permissions *******`n`n"
    sqlcmd -E -S $server_name -Q ("set nocount on; SELECT convert(varchar(32),pr.type_desc) as login_type, convert(varchar(32), pr.name) as login_name, is_disabled,
      convert(varchar(32), isnull (pe.state_desc, 'No permission statements')) AS state_desc, 
      convert(varchar(32), isnull (pe.permission_name, 'No permission statements')) AS permission_name,
      convert(varchar(32), default_database_name) as default_db_name
      FROM sys.server_principals AS pr
      LEFT OUTER JOIN sys.server_permissions AS pe
        ON pr.principal_id = pe.grantee_principal_id
      WHERE is_fixed_role = 0 -- Remove for SQL Server 2008
      and name = '" + $server_principal + "'")
    
    Write-Host "`n******* Database Principal (user) permissions *******`n`n"
    sqlcmd -E -S $server_name -d $database_name -Q ("set nocount on; SELECT convert(varchar(32),pr.type_desc) as user_type, convert(varchar(32),pr.name) as user_name, 
      convert(varchar(32), isnull (pe.state_desc, 'No permission statements')) AS state_desc, 
      convert(varchar(32), isnull (pe.permission_name, 'No permission statements')) AS permission_name 
      FROM sys.database_principals AS pr
      LEFT OUTER JOIN sys.database_permissions AS pe
        ON pr.principal_id = pe.grantee_principal_id
      WHERE pr.is_fixed_role = 0
      and name = '" + $database_principal + "'")
    
    Write-Host "`n******* Server to Database Principal mapping ********`n"
    sqlcmd -E -S $server_name -d $database_name -Q ("exec sp_helplogins '" + $server_principal + "'")
    
  7. Kerberos 관련 문제를 해결하는 경우 Kerberos 인증을 사용하여 SQL Server 연결되었는지 확인의 스크립트를 사용하여 Kerberos가 SQL Server에서 제대로 구성되었는지 확인할 수 있습니다.

일반적인 연결 문제

필수 구성 요소 및 검사 목록을 살펴보았을 때 일반적인 연결 문제를 참조하고 자세한 문제 해결 단계는 해당 오류 메시지를 선택합니다.