다음을 통해 공유


CLR 데이터베이스 개체 디버깅

SQL Server는 데이터베이스에서의 Transact-SQL 및 CLR(공용 언어 런타임) 개체 디버깅을 지원합니다. SQL Server에서 디버깅의 주요 측면은 설치 및 사용의 용이성과 MICROSOFT Visual Studio 디버거와 SQL Server 디버거의 통합입니다. 또한 디버깅이 여러 언어에서 작동합니다. 사용자는 Transact-SQL에서 CLR 개체로 매끄럽게 한 단계씩 코드를 실행할 수 있으며 그 반대의 경우도 가능합니다. SQL Server Management Studio의 Transact-SQL 디버거는 관리되는 데이터베이스 개체를 디버그하는 데 사용할 수 없지만 Visual Studio에서 디버거를 사용하여 개체를 디버그할 수 있습니다. Visual Studio에서 관리되는 데이터베이스 개체 디버깅은 서버에서 실행되는 루틴 내에서 "단계별 실행" 및 "단계별 실행" 문과 같은 모든 일반적인 디버깅 기능을 지원합니다. 디버거는 디버깅하는 동안 중단점을 설정하고, 호출 스택을 검사하고, 변수를 검사하고, 변수 값을 수정할 수 있습니다. Visual Studio .NET 2003은 CLR 통합 프로그래밍 또는 디버깅에 사용할 수 없습니다. SQL Server에는 .NET Framework가 미리 설치되어 있으며 Visual Studio .NET 2003에서는 .NET Framework 2.0 어셈블리를 사용할 수 없습니다.

Visual Studio를 사용하여 관리 코드를 디버깅하는 방법에 대한 자세한 내용은 Visual Studio 설명서의 "관리 코드 디버깅" 항목을 참조하세요.

권한 및 제한 사항 디버깅

디버깅은 매우 높은 권한이 필요한 작업이므로 sysadmin 고정 서버 역할의 멤버만 SQL Server에서 디버깅할 수 있습니다.

디버깅 작업 중에는 다음 제한 사항이 적용됩니다.

  • CLR 루틴 디버깅은 한 번에 하나의 디버거 인스턴스로 제한됩니다. 이 제한은 중단점이 적중될 때 모든 CLR 코드 실행이 중지되고 디버거가 중단점에서 이동할 때까지 실행이 계속되지 않기 때문에 적용됩니다. 그러나 다른 연결에서 Transact-SQL 디버깅을 계속할 수 있습니다. Transact-SQL 디버깅은 서버에서 다른 실행을 중지하지 않지만 잠금을 유지하여 다른 연결이 대기할 수 있습니다.

  • SQL Server는 연결을 만들기 전에 클라이언트 및 디버거 환경에 대한 정보가 필요하므로 기존 연결을 디버그할 수 없으며 새 연결만 디버그할 수 없습니다.

위의 제한 사항으로 인해 프로덕션 서버가 아닌 테스트 서버에서 Transact-SQL 및 CLR 코드를 디버그하는 것이 좋습니다.

관리되는 데이터베이스 개체 디버깅 개요

SQL Server의 디버깅은 연결별 모델을 따릅니다. 디버거는 연결된 클라이언트 연결에 대해서만 활동을 검색하고 디버그할 수 있습니다. 디버거의 기능은 연결 유형에 의해 제한되지 않으므로 TDS(테이블 형식 데이터 스트림)와 HTTP 연결을 모두 디버그할 수 있습니다. 그러나 SQL Server는 기존 연결 디버깅을 허용하지 않습니다. 디버깅은 서버에서 실행되는 루틴 내에서 모든 일반적인 디버깅 기능을 지원합니다. 디버거와 SQL Server 간의 상호 작용은 분산 COM(구성 요소 개체 모델)을 통해 이루어집니다.

관리되는 저장 프로시저, 함수, 트리거, 사용자 정의 형식 및 집계를 디버깅하는 방법에 대한 자세한 내용 및 시나리오는 Visual Studio 설명서의 "SQL Server CLR 통합 데이터베이스 디버깅" 항목을 참조하세요.

Visual Studio를 원격 개발, 디버깅 및 개발에 사용하려면 SQL Server 인스턴스에서 TCP/IP 네트워크 프로토콜을 사용할 수 있어야 합니다. 서버에서 TCP/IP 프로토콜을 사용하도록 설정하는 방법에 대한 자세한 내용은 클라이언트 프로토콜 구성을 참조하세요.

관리되는 데이터베이스 개체를 디버그하려면

  1. Microsoft Visual Studio를 열고, 새 SQL Server 프로젝트를 만들고, SQL Server 인스턴스에서 데이터베이스에 대한 연결을 설정합니다.

  2. 새 형식을 만듭니다. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 추가새 항목을 선택합니다.새 항목 추가 창에서 저장 프로시저, User-Defined 함수, User-Defined 형식, 트리거, 집계 또는 클래스를 선택합니다. 새 형식의 원본 파일 이름을 지정하고 추가를 클릭합니다.

  3. 텍스트 편집기에서 새 형식에 대한 코드를 추가합니다. 예제 저장 프로시저에 대한 샘플 코드는 이 항목의 뒷부분에 있는 섹션을 참조하세요.

  4. 형식을 테스트하는 스크립트를 추가합니다. 솔루션 탐색기에서 TestScripts 디렉터리를 두 번 클릭하여 Test.sql 확장하여 기본 테스트 스크립트 원본 파일을 엽니다. 디버그할 코드를 호출하는 테스트 스크립트를 텍스트 편집기에 추가합니다. 샘플 스크립트는 아래를 참조하세요.

  5. 원본 코드에 중단점을 하나 이상 배치합니다. 디버그하려는 함수 또는 루틴 내에서 텍스트 편집기에서 코드 줄을 마우스 오른쪽 단추로 클릭하고 중단점중단점 삽입을 선택합니다. 중단점이 추가되고 코드 줄이 빨간색으로 강조 표시됩니다.

  6. 디버그 메뉴에서 디버깅 시작을 선택하여 프로젝트를 컴파일, 배포 및 테스트합니다. Test.sql 테스트 스크립트가 실행되고 관리되는 데이터베이스 개체가 호출됩니다.

  7. 명령 포인터를 지정하는 노란색 화살표가 중단점 코드 실행에 나타나면 관리되는 데이터베이스 개체 디버깅을 시작할 수 있습니다. 디버그 메뉴에서 한 단계씩 실행하여 명령 포인터를 다음 코드 줄로 진행할 수 있습니다. 로컬 창은 명령 포인터로 현재 강조 표시된 개체의 상태를 관찰하는 데 사용됩니다. 조사 창에 변수를 추가할 수 있습니다. 변수가 현재 명령 포인터로 강조 표시된 코드 줄에 있을 때뿐만 아니라 전체 디버깅 세션 전체에서 감시된 변수의 상태를 관찰할 수 있습니다. 디버그 메뉴에서 [계속]을 선택하여 명령 포인터를 다음 중단점으로 이동하거나 중단점이 더 이상 없는 경우 루틴 실행을 완료합니다.

예시

다음 예제에서는 SQL Server 버전을 호출자에게 반환합니다.

C# (프로그래밍 언어)

using System;  
using System.Data;  
using System.Data.SqlTypes;  
using System.Data.SqlClient;  
using Microsoft.SqlServer.Server;   
  
public class StoredProcedures   
{  
   [Microsoft.SqlServer.Server.SqlProcedure]  
   public static void GetVersion()  
   {  
   using(SqlConnection connection = new SqlConnection("context connection=true"))   
   {  
      connection.Open();  
      SqlCommand command = new SqlCommand("select @@version",  
                                           connection);  
      SqlContext.Pipe.ExecuteAndSend(command);  
      }  
   }  
}  

Visual Basic (비주얼 베이직 언어)

Imports System  
Imports System.Data  
Imports System.Data.Sql  
Imports System.Data.SqlTypes  
Imports Microsoft.SqlServer.Server  
Imports System.Data.SqlClient  
  
Partial Public Class StoredProcedures   
    <Microsoft.SqlServer.Server.SqlProcedure> _  
    Public Shared Sub GetVersion()  
        Using connection As New SqlConnection("context connection=true")  
            connection.Open()  
            Dim command As New SqlCommand("SELECT @@VERSION", connection)  
            SqlContext.Pipe.ExecuteAndSend(command)  
        End Using  
    End Sub  
End Class  

다음은 위에서 정의한 GetVersion 저장 프로시저를 호출하는 테스트 스크립트입니다.

EXEC GetVersion  

또한 참조하십시오

CLR(공용 언어 런타임) 통합 프로그래밍 개념