다음을 통해 공유


데이터베이스 관리자를 위한 진단 연결

적용 대상: SQL Server Azure SQL Database

SQL Server는 서버에 대한 표준 연결이 불가능할 때 관리자에게 특별 진단 연결을 제공합니다. 이 진단 연결을 통해 SQL Server 가 표준 연결 요청에 응답하지 않은 경우에도 SQL Server에 액세스하여 진단 쿼리를 실행하고 문제를 해결할 수 있습니다.

DAC(관리자 전용 연결)는 SQL Server의 암호화 및 다른 보안 기능을 지원합니다. DAC는 사용자 컨텍스트를 다른 관리자로만 변경할 수 있습니다.

SQL Server는 성공적으로 DAC가 연결되도록 모든 시도를 하지만 극단적인 경우 연결이 실패할 수도 있습니다.

DAC와 연결

기본적으로 연결은 서버에서 실행되는 클라이언트에서만 허용됩니다. remote admin connections 옵션과 함께 sp_configure 저장 프로시저를 사용하여 구성하지 않은 경우에는 네트워크 연결이 허용되지 않습니다.

SQL Server sysadmin 역할의 멤버만이 DAC를 사용하여 연결할 수 있습니다.

DAC는 특수 관리자 스위치(-A)를 사용하여 sqlcmd 명령 프롬프트 유틸리티를 통해 사용할 수 있고 지원됩니다. sqlcmd 사용에 대한 자세한 내용은 스크립팅 변수와 함께 sqlcmd 사용을 참조하세요. 접두사 admin:를 인스턴스 이름에 형식 sqlcmd -S admin:<instance_name>로 연결할 수도 있습니다. admin:<instance_name>에 연결하여 SQL Server Management Studio 쿼리 편집기 DAC를 시작할 수도 있습니다.

SQL Server Management Studio에서 DAC를 설정하려면:

  • 개체 탐색기 및 열려 있는 모든 쿼리 창을 포함하여 관련 SQL Server 인스턴스에 대한 모든 연결의 연결을 끊습니다.

  • 메뉴에서 파일 > 새로 만들기 > 데이터베이스 엔진 쿼리를 선택합니다.

  • 서버 이름 필드의 연결 대화 상자에서 기본 인스턴스를 사용하는 경우 admin:<server_name>을 입력하고 명명된 인스턴스를 사용하는 경우 admin:<server_name>\<instance_name>를 입력합니다.

제한 사항

DAC는 드문 경우에서 서버 문제를 진단하기 위해서만 존재하기 때문에 연결에 몇 가지 제한 사항이 있습니다.

  • 연결에 사용할 수 있는 리소스를 보장하기 위해 SQL Server 인스턴스당 하나의 DAC만 허용됩니다. DAC 연결이 이미 활성 상태인 경우 DAC를 통해 연결하는 새 요청은 오류 17810으로 거부됩니다.

  • 리소스 절약을 위해 SQL Server Express는 추적 플래그 7806을 사용하여 시작되지 않는 한 DAC 포트에서 수신하지 않습니다.

  • DAC는 처음에 로그인과 연결된 기본 데이터베이스에 연결을 시도합니다. 성공적으로 연결되면 master 데이터베이스에 연결할 수 있습니다. 기본 데이터베이스가 오프라인이거나 사용할 수 없는 경우 연결에서 오류 4060을 반환합니다. 그러나 다음 명령을 사용하면 기본 데이터베이스를 무시하고 master 데이터베이스에 연결할 수 있습니다.

    sqlcmd -A -d master
    

    데이터베이스 엔진 인스턴스가 시작되면 master를 사용할 수 있으므로 DAC로 master 데이터베이스에 연결하는 것이 좋습니다.

  • SQL Server는 DAC를 사용하여 병렬 쿼리 또는 명령을 실행하는 것을 금지합니다. 예를 들어 DAC를 사용하여 다음 문 중 하나를 실행하면 오류 3637이 생성됩니다.

    • RESTORE...

    • BACKUP...

  • DAC에서는 제한된 리소스만 사용할 수 있습니다. DAC를 사용하여 많은 리소스가 필요한 쿼리(예: 큰 테이블의 복잡한 조인) 또는 차단될 수 있는 쿼리를 실행하지 마세요. 이렇게 하면 DAC가 기존 서버 문제를 복잡하게 만들지 않도록 방지할 수 있습니다. 잠재적인 차단 시나리오를 방지하려면 차단할 수 있는 쿼리를 실행해야 하는 경우 가능한 경우 스냅샷 기반 격리 수준에서 쿼리를 실행합니다. 그렇지 않으면 트랜잭션 격리 수준을 READ UNCOMMITTED로 설정하고 LOCK_TIMEOUT 값을 2000밀리초 또는 둘 다와 같은 짧은 값으로 설정합니다. 이렇게 하면 DAC 세션이 차단되지 않습니다. 그러나 SQL Server가 있는 상태에 따라 DAC 세션이 래치에서 차단될 수 있습니다. Ctrl+C를 사용하여 DAC 세션을 종료할 수도 있지만 보장할 수 없습니다. 이 경우 유일한 옵션은 SQL Server를 다시 시작하는 것입니다.

  • DAC와의 연결 및 문제 해결을 보장하기 위해 SQL Server는 DAC에서 실행되는 명령을 처리하기 위해 제한된 리소스를 예약합니다. 이러한 리소스는 일반적으로 아래에 나열된 것과 같은 간단한 진단 및 문제 해결 기능에만 충분합니다.

이론상으로는 DAC에서 병렬로 실행하지 않아도 되는 모든 Transact-SQL 문을 실행할 수 있지만 다음과 같은 진단 및 문제 해결 명령에만 사용하는 것이 좋습니다.

  • 잠금 상태에 대한 sys.dm_tran_locks, 캐시 상태를 확인하는 sys.dm_os_memory_cache_counters, 활성 세션 및 요청에 대한 sys.dm_exec_requestssys.dm_exec_sessions와 같은 기본 진단을 위한 동적 관리 뷰를 쿼리합니다. 리소스를 많이 사용하는 동적 관리 뷰(예를 들어 sys.dm_tran_version_store는 전체 버전 저장소를 검색하므로 광범위한 I/O를 발생시킬 수 있음) 또는 복잡한 조인을 사용하는 동적 관리 뷰를 사용하지 마세요. 성능에 미치는 영향에 대한 자세한 내용은 특정 동적 관리 보기에 대한 설명서를 참조하세요.

  • 카탈로그 뷰 쿼리.

  • DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE, DBCC DROPCLEANBUFFERS, 및 DBCC SQLPERF.와 같은 기본 DBCC 명령입니다. DBCC CHECKDB, DBCC DBREINDEX 또는 DBCC SHRINKDATABASE 등 리소스를 많이 사용하는 명령을 사용하지 마세요.

  • Transact-SQL KILL <spid> 명령을 사용합니다. SQL Server의 상태에 따라 KILL 명령은 성공하지 않을 수도 있습니다. 이러한 경우 SQL Server를 다시 시작하는 것이 유일한 해결 방법입니다. 다음은 일반 지침을 제공합니다.

    • SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>를 쿼리하여 SPID가 종료되었는지 확인합니다. 행이 반환되지 않으면 세션이 중지된 것입니다.

    • 세션이 여전히 있는 경우 쿼리 SELECT * FROM sys.dm_os_tasks WHERE session_id = <spid>를 실행하여 이 세션에 할당된 작업이 있는지 확인합니다. 작업이 표시되면 세션이 현재 종료될 가능성이 높습니다. 이 작업은 매우 많은 시간이 소요되며 실패할 수 있습니다.

    • 이 세션과 연관된 sys.dm_os_tasks에 작업이 없지만 KILL 명령을 실행한 후 sys.dm_exec_sessions에 세션이 그대로 남아 있는 경우 사용 가능한 작업자가 없음을 의미합니다. 현재 실행 중인 작업 중 하나(sessions_id <> NULL과 함께 sys.dm_os_tasks 보기에 나열된 작업)를 선택하고 연결된 세션을 종료하여 작업자를 해제합니다. 한 세션을 중지해도 해결되지 않으면 여러 세션을 중지해야 합니다.

DAC 포트

SQL Server는 사용 가능한 경우 TCP 포트 1434의 DAC를 수신 대기하거나 데이터베이스 엔진 시작할 때 동적으로 할당된 TCP 포트를 수신 대기합니다. 오류 로그에는 DAC가 수신 대기 중인 포트 번호가 포함됩니다. 기본적으로 DAC 수신기는 로컬 포트에서만 연결을 허용합니다. 원격 관리 연결을 활성화하는 코드 샘플은 원격 관리자 연결 서버 구성 옵션을 참조하세요.

원격 관리 연결이 구성된 후에는 SQL Server를 다시 시작하지 않고도 DAC 수신기를 사용할 수 있고 클라이언트가 DAC에 원격으로 연결할 수 있습니다. SQL Server가 응답하지 않더라도 먼저 DAC를 로컬로 사용하여 SQL Server에 연결한 다음, sp_configure 저장 프로시저를 실행하여 원격 연결을 허용하면 DAC 수신기가 원격 연결을 허용하도록 할 수 있습니다.

클러스터 구성에서 DAC는 기본적으로 꺼져 있습니다. 사용자는 sp_configure의 remote admin connection 옵션을 실행하여 DAC 수신기가 원격 연결에 액세스하도록 할 수 있습니다. SQL Server가 응답하지 않고 DAC 수신기를 사용할 수 없는 경우 DAC에 연결하려면 SQL Server를 다시 시작해야 합니다. 따라서 클러스터형 시스템에서 원격 관리자 연결 구성 옵션을 사용하도록 설정하는 것이 좋습니다.

DAC 포트는 시작하는 동안 SQL Server에 의해 동적으로 할당됩니다. 기본 인스턴스에 연결할 때 DAC는 연결할 때 SSRP(SQL Server Resolution Protocol) 요청을 SQL Server 브라우저 서비스에 사용하지 않습니다. 먼저 TCP 포트 1434를 통해 연결합니다. 연결이 실패할 경우 SSRP 호출을 실행하여 포트를 설정합니다. SQL Server Browser가 SSRP 요청을 수신하지 않을 경우 연결 요청이 오류를 반환합니다. DAC가 수신 대기 중인 포트 번호를 찾으려면 오류 로그를 참조하세요. SQL Server가 원격 관리 연결을 허용하도록 구성된 경우 명시적 포트 번호로 DAC를 시작해야 합니다.

sqlcmd -S tcp:<server>,<port>

SQL Server 오류 로그에는 기본적으로 1434인 DAC의 포트 번호가 나열됩니다. SQL Server가 로컬 DAC 연결만 허용하도록 구성된 경우 다음 명령을 사용하여 루프백 어댑터를 사용하여 연결합니다.

sqlcmd -S 127.0.0.1,1434

DAC로 Azure SQL Database에 연결할 때 -d 옵션을 사용하여 연결 문자열에 데이터베이스 이름을 지정해야 합니다.

예시

이 예에서 관리자는 URAN123 서버가 응답하지 않음을 확인하고 문제를 진단하려고 합니다. 이를 위해 사용자는 sqlcmd 명령 프롬프트 유틸리티를 활성화하고 DAC를 나타내는 -A을 사용하여 서버 URAN123에 연결합니다.

sqlcmd -S URAN123 -U sa -P <StrongPassword> -A

이제 관리자는 쿼리를 실행하여 문제를 진단하고 응답하지 않는 세션을 종료할 수 있습니다.

SQL Database에 연결된 유사한 예제는 -d 매개 변수를 포함하여 다음 명령을 사용하고 데이터베이스를 지정합니다.

sqlcmd -S serverName.database.windows.net,1434 -U sa -P <StrongPassword> -d AdventureWorks

참고 항목