데이터베이스 관리자를 위한 진단 연결Diagnostic Connection for Database Administrators

SQL ServerSQL Server 는 서버에 대한 표준 연결이 불가능할 때 관리자에게 특별 진단 연결을 제공합니다. provides a special diagnostic connection for administrators when standard connections to the server are not possible. 이 진단 연결을 통해 SQL ServerSQL Server 가 표준 연결 요청에 응답하지 않은 경우에도 SQL ServerSQL Server 에 액세스하여 진단 쿼리를 실행하고 문제를 해결할 수 있습니다.This diagnostic connection allows an administrator to access SQL ServerSQL Server to execute diagnostic queries and troubleshoot problems even when SQL ServerSQL Server is not responding to standard connection requests.

DAC(관리자 전용 연결)는 SQL ServerSQL Server의 암호화 및 다른 보안 기능을 지원합니다.This dedicated administrator connection (DAC) supports encryption and other security features of SQL ServerSQL Server. DAC는 사용자 컨텍스트를 다른 관리자로 변경하는 작업만 허용합니다.The DAC only allows changing the user context to another admin user.

SQL ServerSQL Server 는 성공적으로 DAC가 연결되도록 모든 시도를 하지만 극단적인 경우 연결이 실패할 수도 있습니다. makes every attempt to make DAC connect successfully, but under extreme situations it may not be successful.

||
|-|
|적용 대상: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 ~ 현재 버전), SQL 데이터베이스SQL Database.Applies to: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 through current version), SQL 데이터베이스SQL Database.|

DAC를 사용하여 연결Connecting with DAC

기본적으로 서버에서 실행되는 클라이언트에서만 연결이 허용됩니다.By default, the connection is only allowed from a client running on the server. remote admin connections 옵션이 사용된 sp_configure 저장 프로시저를 사용하여 구성하지 않은 경우에는 네트워크 연결이 허용되지 않습니다.Network connections are not permitted unless they are configured by using the sp_configure stored procedure with the remote admin connections option.

SQL ServerSQL Server sysadmin 역할의 멤버만이 DAC를 사용하여 연결할 수 있습니다.Only members of the SQL ServerSQL Server sysadmin role can connect using the DAC.

DAC는 sqlcmd 명령 프롬프트 유틸리티에 특수 관리자 스위치(-A)를 사용하여 이용 가능하며 지원됩니다.The DAC is available and supported through the sqlcmd command-prompt utility using a special administrator switch (-A). sqlcmd를 사용하는 방법은 스크립팅 변수와 함께 sqlcmd 사용을 참조하세요.For more information about using sqlcmd, see Use sqlcmd with Scripting Variables. 또한 접두사 admin:sqlcmd -Sadmin:<instance_name> 형식으로 인스턴스 이름에 추가하여 연결할 수 있으며You can also connect prefixing admin:to the instance name in the format sqlcmd -Sadmin:<instance_name>. admin:<instance_name>에 연결하여 SQL Server Management StudioSQL Server Management Studio 쿼리 편집기에서 DAC를 시작할 수도 있습니다.You can also initiate a DAC from a SQL Server Management StudioSQL Server Management Studio Query Editor by connecting to admin:<instance_name>.

제한 사항Restrictions

DAC는 드물게 발생하는 서버 문제 진단만을 위한 연결이므로 연결에 다음과 같은 제한이 있습니다.Because the DAC exists solely for diagnosing server problems in rare circumstances, there are some restrictions on the connection:

  • 연결에 사용할 수 있는 리소스를 보장하기 위해 SQL ServerSQL Server인스턴스당 하나의 DAC만 허용됩니다.To guarantee that there are resources available for the connection, only one DAC is allowed per instance of SQL ServerSQL Server. DAC 연결이 이미 활성화된 경우 DAC를 통해 연결하려는 모든 새 요청은 17810 오류가 발생하면서 거부됩니다.If a DAC connection is already active, any new request to connect through the DAC is denied with error 17810.

  • 리소스 절약을 위해 SQL Server ExpressSQL Server Express 은 추적 플래그 7806을 사용하여 시작되지 않는 한 DAC 포트에서 수신하지 않습니다.To conserve resources, SQL Server ExpressSQL Server Express does not listen on the DAC port unless started with a trace flag 7806.

  • DAC는 처음에 로그인과 관련된 기본 데이터베이스에 연결을 시도합니다.The DAC initially attempts to connect to the default database associated with the login. 성공적으로 연결되면 master 데이터베이스에 연결할 수 있습니다.After it is successfully connected, you can connect to the master database. 기본 데이터베이스가 오프라인이거나 사용할 수 없는 경우 연결은 4060 오류를 반환합니다.If the default database is offline or otherwise not available, the connection will return error 4060. 그러나 다음 명령을 사용하면 기본 데이터베이스를 무시하고 master 데이터베이스에 연결할 수 있습니다.However, it will succeed if you override the default database to connect to the master database instead using the following command:

    sqlcmd –A –d mastersqlcmd –A –d master

    데이터베이스 엔진Database Engine 인스턴스가 시작되면 master를 사용할 수 있으므로 DAC로 master 데이터베이스에 연결하는 것이 좋습니다.We recommend that you connect to the master database with the DAC because master is guaranteed to be available if the instance of the 데이터베이스 엔진Database Engine is started.

  • SQL ServerSQL Server 에서는 DAC를 사용하여 병렬 쿼리 또는 명령을 실행할 수 없습니다. prohibits running parallel queries or commands with the DAC. 예를 들어 DAC로 다음 문 중 하나를 실행하는 경우 3637 오류가 발생합니다.For example, error 3637 is generated if you execute either of the following statements with the DAC:

    • RESTORERESTORE

    • BACKUPBACKUP

  • DAC에서는 제한된 리소스만 사용할 수 있습니다.Only limited resources are guaranteed to be available with the DAC. DAC를 사용하여 많은 리소스가 필요한 쿼리(예: 큰 테이블의 복잡한 조인)Do not use the DAC to run resource-intensive queries (for example. 또는 차단될 수 있는 쿼리를 실행하지 마십시오.a complex join on large table) or queries that may block. 그래야만 DAC가 기존 서버 문제를 더 악화시키는 것을 방지할 수 있습니다.This helps prevent the DAC from compounding any existing server problems. 차단 가능성을 예방하려면 차단될 수 있는 쿼리를 실행해야 하는 경우에 가능하면 스냅숏 기반 격리 수준에서 해당 쿼리를 실행합니다. 또는 트랜잭션 격리 수준을 READ UNCOMMITTED로 설정하고 LOCK_TIMEOUT 값을 2000밀리초 등의 짧은 값으로 설정하거나 두 방법 모두를 사용합니다.To avoid potential blocking scenarios, if you have to run queries that may block, run the query under snapshot-based isolation levels if possible; otherwise, set the transaction isolation level to READ UNCOMMITTED and set the LOCK_TIMEOUT value to a short value such as 2000 milliseconds, or both. 이렇게 하면 DAC 세션이 차단되지 않습니다.This will prevent the DAC session from getting blocked. 그러나 SQL ServerSQL Server 의 상태에 따라 DAC 세션이 래치에서 차단될 수 있습니다.However, depending on the state that the SQL ServerSQL Server is in, the DAC session might get blocked on a latch. Ctrl+C를 사용하여 DAC 세션을 종료할 수도 있지만 보장할 수 없습니다.You might be able to terminate the DAC session using CNTRL-C but it is not guaranteed. 이러한 경우 SQL ServerSQL Server를 다시 시작하는 것이 유일한 해결 방법입니다.In that case, your only option may be to restart SQL ServerSQL Server.

  • DAC를 통한 연결과 문제 해결을 보장하기 위해 SQL ServerSQL Server 는 DAC에서 실행된 명령을 처리하도록 제한된 리소스를 예약합니다.To guarantee connectivity and troubleshooting with the DAC, SQL ServerSQL Server reserves limited resources to process commands run on the DAC. 일반적으로 이러한 리소스는 아래에 나열된 기능과 같은 간단한 진단 및 문제 해결 기능만을 수행할 수 있습니다.These resources are typically only enough for simple diagnostic and troubleshooting functions, such as those listed below.

    이론상으로는 DAC에서 병렬로 실행하지 않아도 되는 모든 Transact-SQLTransact-SQL 문을 실행할 수 있지만 다음과 같은 진단 및 문제 해결 명령에만 사용하는 것이 좋습니다.Although you can theoretically run any Transact-SQLTransact-SQL statement that does not have to execute in parallel on the DAC, we strongly recommend that you restrict usage to the following diagnostic and troubleshooting commands:

  • 기본 진단을 위해 잠금 상태에 대한 sys.dm_tran_locks, 캐시 상태를 확인하기 위한 sys.dm_os_memory_cache_counters, 활성 세션과 요청을 위한 sys.dm_exec_requests 및 sys.dm_exec_sessions 등 동적 관리 뷰를 쿼리합니다.Querying dynamic management views for basic diagnostics such as sys.dm_tran_locks for the locking status, sys.dm_os_memory_cache_counters to check the health of caches, and sys.dm_exec_requests and sys.dm_exec_sessions for active sessions and requests. 리소스를 많이 사용하는 동적 관리 뷰(예를 들어 sys.dm_tran_version_store는 전체 버전 저장소를 검색하므로 광범위한 I/O를 발생시킬 수 있음) 또는 복잡한 조인을 사용하는 동적 관리 뷰를 사용하지 마십시오.Avoid dynamic management views that are resource intensive (for example, sys.dm_tran_version_store scans the full version store and can cause extensive I/O) or that use complex joins. 성능에 미치는 영향에 대한 자세한 내용은 해당 동적 관리 뷰문서를 참조하십시오.For information about performance implications, see the documentation for the specific dynamic management view.

  • 카탈로그 뷰를 쿼리합니다.Querying catalog views.

  • DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE, DBCC DROPCLEANBUFFERS, DBCC SQLPERF 등의 기본 DBCC 명령을 사용합니다.Basic DBCC commands such as DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE, DBCC DROPCLEANBUFFERS, and DBCC SQLPERF. DBCC CHECKDB, DBCC DBREINDEX 또는 DBCC SHRINKDATABASE 등 리소스를 많이 사용하는 명령을 실행하지 마세요.Do not run resource-intensive commands such as DBCC CHECKDB, DBCC DBREINDEX, or DBCC SHRINKDATABASE.

  • Transact-SQLTransact-SQL KILL<spid> 명령 - KILL<spid> command. SQL ServerSQL Server의 상태에 따라 KILL 명령은 성공하지 않을 수도 있습니다. 이러한 경우 SQL ServerSQL Server를 다시 시작하는 것이 유일한 해결 방법입니다.Depending on the state of SQL ServerSQL Server, the KILL command might not always succeed; then the only option may be to restart SQL ServerSQL Server. 일반적인 지침은 다음과 같습니다.The following are some general guidelines:

    • SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>쿼리를 실행하여 SPID가 실제로 중지되었는지 확인합니다.Verify that the SPID was actually killed by querying SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>. 행이 반환되지 않으면 세션이 중지된 것입니다.If it returns no rows, it means the session was killed.

    • 세션이 아직 중지되지 않은 경우 SELECT * FROM sys.dm_os_tasks WHERE session_id = <spid>쿼리를 실행하여 이 세션에 할당된 태스크가 있는지 확인합니다.If the session is still there, verify whether there are tasks assigned to this session by running the query SELECT * FROM sys.dm_os_tasks WHERE session_id = <spid>. 할당된 태스크가 있는 경우 세션이 현재 중지되고 있을 가능성이 높습니다.If you see the task there, most likely your session is currently being killed. 이러한 작업은 매우 많은 시간이 소요되며 실패할 수 있습니다.Note that this may take considerable amount of time and may not succeed at all.

    • 이 세션과 연관된 sys.dm_os_tasks에 태스크가 없지만 KILL 명령을 실행한 후 sys.dm_exec_sessions에 세션이 그대로 남아 있는 경우 사용 가능한 작업자가 없음을 의미합니다.If there are no tasks in the sys.dm_os_tasks associated with this session, but the session remains in sys.dm_exec_sessions after executing the KILL command, it means that you do not have a worker available. 현재 실행 중인 태스크( sessions_id <> NULL로 sys.dm_os_tasks 뷰에 나열된 작업) 중 하나를 선택하고 해당 작업과 연관된 세션을 중지하여 작업자를 확보합니다.Select one of the currently running tasks (a task listed in the sys.dm_os_tasks view with a sessions_id <> NULL), and kill the session associated with it to free up the worker. 한 세션을 중지해도 해결되지 않으면 여러 세션을 중지해야 합니다.Note that it may not be enough to kill a single session: you may have to kill multiple ones.

DAC 포트DAC Port

SQL ServerSQL Server 는 TCP 포트 1434(사용 가능한 경우) 또는 데이터베이스 엔진Database Engine 시작 시 동적으로 할당된 TCP 포트에서 DAC를 수신합니다. listens for the DAC on TCP port 1434 if available or a TCP port dynamically assigned upon 데이터베이스 엔진Database Engine startup. 오류 로그에는 DAC를 수신 대기 중인 포트 번호가 포함되어 있습니다.The error log contains the port number the DAC is listening on. 기본적으로 DAC 수신기는 로컬 포트에서만 연결을 허용합니다.By default the DAC listener accepts connection on only the local port. 원격 관리 연결을 활성화하는 코드 샘플은 remote admin connections 서버 구성 옵션을 참조하세요.For a code sample that activates remote administration connections, see remote admin connections Server Configuration Option.

원격 관리 연결이 구성된 후에는 SQL ServerSQL Server 를 다시 시작하지 않고도 DAC 수신기를 사용할 수 있고 클라이언트가 DAC에 원격으로 연결할 수 있습니다.After the remote administration connection is configured, the DAC listener is enabled without requiring a restart of SQL ServerSQL Server and a client can now connect to the DAC remotely. SQL ServerSQL Server 가 응답하지 않더라도 먼저 DAC를 로컬로 사용하여 SQL ServerSQL Server 에 연결한 다음 sp_configure 저장 프로시저를 실행하여 원격 연결을 허용하면 DAC 수신기가 원격 연결을 허용하도록 할 수 있습니다.You can enable the DAC listener to accept connections remotely even if SQL ServerSQL Server is unresponsive by first connecting to SQL ServerSQL Server using the DAC locally, and then executing the sp_configure stored procedure to accept connection from remote connections.

클러스터 구성에서 DAC는 기본적으로 해제되어 있습니다.On cluster configurations, the DAC will be off by default. 사용자는 sp_configure의 remote admin connection 옵션을 실행하여 DAC 수신기가 원격 연결에 액세스하도록 할 수 있습니다.Users can execute the remote admin connection option of sp_configure to enable the DAC listener to access a remote connection. SQL ServerSQL Server 가 응답하지 않고 DAC 수신기를 사용할 수 없는 경우 DAC에 연결하려면 SQL ServerSQL Server 를 다시 시작해야 합니다.If SQL ServerSQL Server is unresponsive and the DAC listener is not enabled, you might have to restart SQL ServerSQL Server to connect with the DAC. 그러므로 클러스터형 시스템에서는 remote admin connections 구성 옵션을 설정하는 것이 좋습니다.Therefore, we recommend that you enable the remote admin connections configuration option on clustered systems.

시작할 때 DAC 포트는 SQL ServerSQL Server 에 의해 동적으로 할당됩니다.The DAC port is assigned dynamically by SQL ServerSQL Server during startup. 기본 인스턴스에 연결할 때 DAC는 SQL Server Browser 서비스에 대한 SSRP( SQL ServerSQL Server Resolution Protocol) 요청을 사용하지 않습니다.When connecting to the default instance, the DAC avoids using a SQL ServerSQL Server Resolution Protocol (SSRP) request to the SQL Server Browser Service when connecting. 먼저 TCP 포트 1434를 통해 연결합니다.It first connects over TCP port 1434. 연결이 실패할 경우 SSRP 호출을 실행하여 포트를 설정합니다.If that fails, it makes an SSRP call to get the port. SQL ServerSQL Server Browser가 SSRP 요청을 수신하지 않을 경우 연결 요청이 오류를 반환합니다.If SQL ServerSQL Server Browser is not listening for SSRP requests, the connection request returns an error. 오류 로그를 참조하여 DAC를 수신 대기 중인 포트 번호를 찾으십시오.Refer to the error log to find the port number DAC is listening on. SQL ServerSQL Server 가 원격 관리 연결을 허용하도록 구성되어 있는 경우 DAC를 명시적 포트 번호로 시작해야 합니다.If SQL ServerSQL Server is configured to accept remote administration connections, the DAC must be initiated with an explicit port number:

sqlcmd–Stcp: <서버>,<포트>sqlcmd–Stcp: <server>,<port>

SQL ServerSQL Server 오류 로그는 DAC의 포트 번호를 표시합니다. 포트 번호는 기본적으로 1434입니다.The SQL ServerSQL Server error log lists the port number for the DAC, which is 1434 by default. SQL ServerSQL Server 가 로컬 DAC 연결만 허용하도록 구성된 경우 다음 명령을 사용하여 루프백 어댑터를 통해 연결하십시오.If SQL ServerSQL Server is configured to accept local DAC connections only, connect using the loopback adapter using the following command:

sqlcmd–S127.0.0.1,1434sqlcmd–S127.0.0.1,1434

DAC로 Azure SQL 데이터베이스Azure SQL Database 에 연결할 때 -d 옵션을 사용하여 연결 문자열에 데이터베이스 이름을 지정해야 합니다.When connecting to the Azure SQL 데이터베이스Azure SQL Database with the DAC, you must also specify the database name in the connection string by using the -d option.

예제Example

이 예에서 관리자는 URAN123 서버가 응답하지 않음을 확인하고 문제를 진단하려고 합니다.In this example, an administrator notices that server URAN123 is not responding and wants to diagnose the problem. 이 작업을 수행하려면 사용자는 sqlcmd 명령 프롬프트 유틸리티를 활성화하고 DAC를 나타내는 URAN123 를 사용하여 -A 서버에 연결해야 합니다.To do this, the user activates the sqlcmd command prompt utility and connects to server URAN123 using -A to indicate the DAC.

sqlcmd -S URAN123 -U sa -P <xxx> –A

이제 관리자가 쿼리를 실행하여 문제를 진단하고 응답하지 않는 세션을 종료할 수 있습니다.The administrator can now execute queries to diagnose the problem and possibly terminate the unresponsive sessions.

SQL 데이터베이스SQL Database 에 연결된 유사한 예제는 -d 매개 변수를 포함하여 다음 명령을 사용하고 데이터베이스를 지정합니다.A similar example connecting to SQL 데이터베이스SQL Database would use the following command including the -d parameter to specify the database:

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

스크립팅 변수와 함께 sqlcmd 사용Use sqlcmd with Scripting Variables

sqlcmd 유틸리티sqlcmd Utility

SELECT(Transact-SQL)SELECT (Transact-SQL)

sp_who(Transact-SQL)sp_who (Transact-SQL)

sp_lock(Transact-SQL)sp_lock (Transact-SQL)

KILL(Transact-SQL)KILL (Transact-SQL)

DBCC CHECKALLOC(Transact-SQL)DBCC CHECKALLOC (Transact-SQL)

DBCC CHECKDB(Transact-SQL)DBCC CHECKDB (Transact-SQL)

DBCC OPENTRAN(Transact-SQL)DBCC OPENTRAN (Transact-SQL)

DBCC INPUTBUFFER(Transact-SQL)DBCC INPUTBUFFER (Transact-SQL)

서버 구성 옵션(SQL Server)Server Configuration Options (SQL Server)

트랜잭션 관련 동적 관리 뷰 및 함수(Transact-SQL)Transaction Related Dynamic Management Views and Functions (Transact-SQL)

추적 플래그(Transact-SQL)Trace Flags (Transact-SQL)