내용으로 건너뛰기

RDS for SQL Server 인스턴스에 대한 연결 문제를 어떻게 해결합니까?

7분 분량
0

Amazon Relational Database Service(Amazon RDS) for SQL Server 인스턴스에 연결 문제가 있습니다. 클라이언트 애플리케이션의 데이터베이스로 일관된 연결을 설정하거나 유지할 수 없습니다. 연결 시간 초과 및 로그인 실패 메시지가 표시됩니다.

해결 방법

연결 실패에 관한 정보 수집

다음 작업을 수행하십시오.

  • 오류 메시지 및 오류 코드를 기록해 두고, 해당 오류가 간헐적으로 발생하는지 거듭되는지 확인합니다.
  • SQL Server 및 클라이언트 시스템에서 로그를 수집해 Amazon RDS에서 실행되는 SQL Server의 시스템 전반적인 문제를 파악합니다. 로그에는 이벤트 로그와 SQL Server 오류 로그가 포함됩니다.
  • 연결이 애플리케이션에서 실패하는 경우, 해당 애플리케이션의 연결 문자열을 수집합니다. 예를 들어 ASP.NET 애플리케이션의 문자열은 Web.config 파일에 있습니다.
  • 로그를 기록한 다음, 그 내용을 검토하여 추가적인 오류 메시지 및 예외가 있는지 봅니다.

네트워크 연결 확인 및 테스트

다음 단계를 완료하십시오.

  1. 클라이언트가 RDS DB 인스턴스와 동일한 가상 프라이빗 클라우드(VPC)에 있는지 확인하고 VPC 피어링을 설정하십시오.
  2. 라우팅 테이블이 클라이언트와 DB 인스턴스 사이 트래픽을 허용하도록 올바로 구성되었는지 확인합니다. 자세한 내용은 VPC에서 DB 인스턴스 작업을 참조하십시오.
  3. DB 인스턴스에 대한 연결을 테스트하려면 다음 명령 중 하나를 실행합니다.
    Telnet:
    telnet RDS_endpoint 1433
    AWS Tools for PowerShell:
    $tcp = New-Object System.Net.Sockets.TcpClient
    try {
        $tcp.Connect("RDS_endpoint", 1433)
        Write-Host "Connection successful"
    } catch {
        Write-Host "Connection failed: $_"
    } finally {
        $tcp.Dispose()
    }
    참고: RDS_endpoint를 RDS 엔드포인트로 바꾸십시오. 출력에 연결 실패가 표시되는 경우, 문제가 네트워크 구성과 관련이 있다는 의미입니다.

보안 그룹 및 네트워크 ACL 구성 확인

DB 인스턴스의 보안 그룹이 포트 1433 또는 사용자 지정 포트에서 인바운드 트래픽을 허용하는지 확인합니다. 트래픽은 클라이언트의 IP 주소 또는 보안 그룹에서 발생해야 합니다. 그런 다음, 네트워크 액세스 제어 목록(네트워크 ACL)이 클라이언트와 DB 인스턴스 간 트래픽을 허용하는지 확인합니다.

보안 그룹이 인바운드 트래픽을 허용하지 않는 경우, RDS 보안 그룹을 수정하십시오. 보안 그룹을 수정하려면 다음 단계를 완료하십시오.

  1. RDS 콘솔을 엽니다.
  2. DB 인스턴스의 보안 그룹을 선택합니다.
  3. 인바운드 규칙을 선택합니다.
  4. 다음 정보를 입력하여 규칙을 수정합니다.
    유형으로 MSSQL을 사용합니다.
    소스에서 클라이언트의 IP 주소 또는 보안 그룹 ID를 입력합니다.
  5. 규칙 저장을 선택합니다.

암호화된 연결에 대하여 SSL/TLS 구성

참고: DB 인스턴스의 파라미터 그룹 값 rds.force_ssl1인 경우, 암호화된 연결만 허용합니다. 데이터베이스에 연결하려면 SSL/TLS 인증서를 구성해야 합니다. SSL/TLS 인증서를 구성하려면 SQL Server Management Studio(SSMS) 또는 애플리케이션 코드를 사용할 수 있습니다.

AWS 리전의 루트 CA 인증서를 다운로드하거나 글로벌 번들을 선택하십시오. 그런 다음 인증서를 클라이언트 시스템으로 가져옵니다.
참고: 인증서 번들을 다운로드하려면 데이터베이스를 호스팅하는 리전의 링크를 선택해야 합니다.

SSMS를 사용하는 경우, Microsoft 웹 사이트에 있는 SQL Server 인스턴스에 연결 지침을 따르십시오. DB 인스턴스에 연결할 때 SSMS가 연결 속성의 서버 인증서를 신뢰하도록 구성합니다.

애플리케이션 코드를 사용하는 경우, 연결 문자열이 TrustServerCertificate=true를 포함하는지 확인합니다. 자세한 내용은 Microsoft 웹 사이트에서 TrustServerCertificate 사용을 참조하십시오.

TLS 버전 1.2 호환성 확인

TLS를 올바로 구성하지 않은 경우, 다음 오류 메시지가 표시될 수 있습니다.

‘A connection was successfully established with the server, but then an error occurred during the pre-login handshake.’

클라이언트 애플리케이션 또는 드라이버가 TLS 1.2를 지원하는지 확인하십시오.

중요: RDS for SQL Server에서는 TLS 1.2는 필수입니다. RDS SQL Server에서 TLS 1.2를 비활성화할 수 없습니다. 애플리케이션이 TLS 1.0 또는 TLS 1.1과 같은 오래된 암호화 프로토콜만 지원하는 경우 파라미터 그룹을 사용해 이러한 프로토콜을 선택적으로 활성화할 수 없습니다. 단, TLS 1.0 또는 TLS 1.1을 활성화하면 환경이 보안 취약성에 노출될 수 있습니다.

연결 문제가 지속되는 경우 DB 인스턴스의 파라미터 그룹에서 rds.force_ssl 파라미터를 비활성화하여 연결 문제의 원인이 SSL인지 판단하십시오. 테스트를 완료한 이후 rds.force_ssl 파라미터를 활성화합니다.

클라이언트 측 문제 해결

SSMS 버전 20.x를 사용해 DB 인스턴스에 연결하는 경우, 19.3 버전으로 다운그레이드하십시오. SSMS 버전 19.3을 설치하는 방법은 Microsoft 웹 사이트에서 19.3을 참조하십시오. SSMS 설치에 관한 자세한 내용은 Microsoft 웹 사이트에서 SQL Server Management Studio 설치를 참조하십시오.

애플리케이션을 사용해 DB 인스턴스에 연결하는 경우, 연결 문자열 및 파라미터를 올바로 구성했는지 검토합니다. 그런 다음, 애플리케이션이 연결 풀링을 사용하고 연결을 효율적으로 관리하는지 확인하십시오.

Amazon Elastic Kubernetes Service(Amazon EKS) Pod Identity를 사용해 DB 인스턴스에 연결하는 경우, 애플리케이션이 DB 자격 증명에 대해 환경 변수를 올바로 설정하고 검색하는지 확인하십시오. 그런 다음, Amazon EKS 클러스터에서 DB 인스턴스로 트래픽을 허용하도록 올바른 네트워크 정책이 설정되어 있는지 확인합니다.

리소스 집약적인 프로세스 식별

RDS 콘솔에서 CPU 사용률, 가용 메모리 및 스토리지 초당 입출력 작업량(IOPS)을 확인하여 리소스 사용률이 높은 것이 연결 실패의 원인인지 알아봅니다. DB 인스턴스에서 일관되게 CPU, 메모리 또는 IOPS 포화 상태가 발생하는 경우, 더 큰 DB 인스턴스 클래스로 스케일 업합니다. 용량 한도에 도달하는 리소스를 파악하려면 Performance Insights를 사용하십시오. 자세한 내용은 Microsoft 웹 사이트에서 SQL Server의 CPU 사용량이 많은 문제 해결을 참조하십시오.

또는 다음 스크립트를 실행하여 리소스 집약적인 프로세스를 파악합니다.

SELECT TOP 10 s.session_id,
r.status,
r.cpu_time,
r.logical_reads,
r.reads,
r.writes,
r.total_elapsed_time / (1000 * 60) 'Elaps M',
SUBSTRING(st.TEXT, (r.statement_start_offset / 2) + 1,
((CASE r.statement_end_offset
WHEN -1 THEN DATALENGTH(st.TEXT)
ELSE r.statement_end_offset
END - r.statement_start_offset) / 2) + 1) AS statement_text,
COALESCE(QUOTENAME(DB_NAME(st.dbid)) + N'.' + QUOTENAME(OBJECT_SCHEMA_NAME(st.objectid, st.dbid))
+ N'.' + QUOTENAME(OBJECT_NAME(st.objectid, st.dbid)), '') AS command_text,
r.command,
s.login_name,
s.host_name,
s.program_name,
s.last_request_end_time,
s.login_time,
r.open_transaction_count
FROM sys.dm_exec_sessions AS s
JOIN sys.dm_exec_requests AS r ON r.session_id = s.session_id CROSS APPLY sys.Dm_exec_sql_text(r.sql_handle) AS st
WHERE r.session_id != @@SPID
ORDER BY r.cpu_time DESC

스크립트를 실행한 이후, 새 연결을 차단하는 장기 실행 쿼리가 있는지 확인하십시오.

오류 메시지 해결

‘Timeout expired messages when connecting to SQL Server’ 오류 메시지 문제 해결

‘Timeout expired messages when connecting to SQL Server’ 오류 메시지가 표시되는 경우, 클라이언트 애플리케이션의 연결 시간 제한을 늘립니다. DB 인스턴스에서 지연을 초래할 수 있는 장기 실행 쿼리 또는 프로세스가 있는지 확인하십시오. 자세한 내용은 Microsoft 웹 사이트에서 SQL Server에 연결할 때 시간 제한 만료 메시지를 참조하십시오.

‘Login failed for user’ 오류 메시지 문제 해결

‘Login failed for user’ 오류 메시지가 표시되는 경우, 인증 방법에 따라 다음 작업을 수행합니다.

인증에 SQL을 사용하는 경우, 올바른 사용자 이름 및 암호를 사용하는지 확인하십시오. 그런 다음, 사용자에게 SQL Server 인스턴스 및 데이터베이스에 대한 필수 권한이 있는지 확인합니다.

인증에 Windows를 사용하는 경우, 다음 작업을 수행하십시오.

  • 클라이언트 시스템과 RDS for SQL Server 인스턴스가 동일한 도메인을 조인하는지 확인합니다.
  • 사용자에게 SQL Server 인스턴스 및 데이터베이스에 액세스하기 위한 필수 권한이 있는지 확인합니다.
    참고: SQL Server 인스턴스 또는 특정 데이터베이스에 연결하는 데 필요한 최소 권한은 CONNECT 권한입니다. 서버 수준에서, CONNECT 권한은 CONNECT SQL 권한 형태를 띱니다. 로그인 또는 사용자를 만들면 SQL Server가 자동으로 이 권한을 부여합니다. 하지만 SQL Server가 만들기 작업 중에 권한을 부여하지 않는 경우, 수동으로 CONNECT 권한을 할당해야 합니다. 권한에 관한 자세한 내용은 Microsoft 웹 사이트에서 데이터베이스 엔진 권한 시작하기를 참조하십시오.
  • RDS for SQL Server 인스턴스에 도메인 사용자 로그인이 존재하는지 확인하십시오. 로그인이 존재하지 않는 경우, 다음 T-SQL 문을 사용하여 로그인을 만듭니다.
    USE [master]
    GO;
    CREATE LOGIN DOMAIN\username FROM WINDOWS WITH DEFAULT_DATABASE='user_database'
    GO
    참고: DOMAIN\USERNAME을 도메인 이름 및 Windows 로그인으로 바꾸십시오.

‘Forcibly closed’ 오류 메시지 문제 해결

‘Forcibly closed’ 연결 오류 메시지가 표시되는 경우, 다음 작업을 수행하십시오.

  • 애플리케이션과 DB 인스턴스 간에 네트워크 중단 또는 지연 문제가 있는지 확인합니다.
  • DB 인스턴스의 CPU 및 메모리 사용량을 검토하여 용량을 초과하지 않는지 확인합니다.
  • 방화벽 규칙(예: 전송 게이트웨이 또는 프라이빗 방화벽의 규칙)이 클라이언트와 DB 인스턴스 간 연결을 차단하지 않는지 확인합니다.
  • 보안 그룹이 DB 인스턴스로의 연결을 허용하는지 확인합니다.
  • 문제가 지속되는 경우, 애플리케이션의 연결 문자열에서 연결 시간 제한을 늘리십시오.
  • Performance Insights를 활성화합니다. 그런 다음, Performance Insights의 지표를 확인해 차단 및 교착 상태가 있는지 봅니다. 자세한 내용은 RDS에서 Performance Insights로 DB 로드 모니터링을 참조하십시오.

중요: Performance Insights는 2026년 6월 30일에 서비스가 종료됩니다. 2026년 6월 30일 이전에 Database Insights의 고급 모드로 업그레이드할 수 있습니다. 업그레이드하지 않으면 Performance Insights를 사용하는 DB 클러스터는 Database Insights의 표준 모드로 기본 설정됩니다. Database Insights의 고급 모드만 실행 계획과 온디맨드 분석을 지원합니다. 클러스터가 표준 모드로 기본 설정된 경우 콘솔에서 이러한 기능을 사용하지 못할 수 있습니다. 고급 모드를 활성화하려면 Amazon RDS용 Database Insights의 고급 모드 활성화Amazon Aurora용 Database Insights의 고급 모드 활성화를 참조하십시오.

관련 정보

Performance Insights로 RDS 데이터베이스 워크로드 분석

RDS 문제 해결

SSL을 Microsoft SQL Server DB 인스턴스와 함께 사용

Microsoft 웹 사이트의 SQL Server 연결 문제 해결을 위한 권장 전제 조건 및 체크리스트

AWS 공식업데이트됨 6달 전
댓글 없음