다음을 통해 공유


SQL 디버깅 제한

업데이트: 2007년 11월

이 항목은 다음 언어에 적용됩니다.

Edition

Visual Basic

C#

C++

Web Developer

Express

항목이 적용되지 않음 항목이 적용되지 않음 항목이 적용되지 않음 항목이 적용되지 않음

Standard

항목이 적용되지 않음 항목이 적용되지 않음 항목이 적용되지 않음 항목이 적용되지 않음

Pro 및 Team

항목이 적용됨 항목이 적용됨 항목이 적용됨 항목이 적용됨

표의 범례:

항목이 적용됨

해당

항목이 적용되지 않음

해당 없음

항목이 적용되지만 명령은 기본적으로 숨겨짐

명령은 기본적으로 숨겨져 있습니다.

이 단원에서는 SQL 디버깅에 적용되는 여러 가지 일반적인 제한 사항에 대해 설명합니다.

다중 계층 SQL 디버깅

  • 다중 계층 응용 프로그램을 디버깅할 때 한 단계씩 코드 실행으로는 응용 프로그램 계층(C#, Visual Basic 또는 C++)의 코드 실행 단계에서 SQL Server 2005(T-SQL 또는 SQL/CLR)의 코드 실행 단계로 진행할 수 없습니다. 대신 저장 프로시저 코드에 중단점을 설정하고 계속(F5)을 눌러 중단점까지 코드를 실행합니다. 중단점을 사용하지 않고 커서까지 실행을 사용하여 원하는 위치에 도달할 수도 있습니다. SQL Server 2005 계층 내에서는 T-SQL 및 SQL/CLR 코드 간에 앞뒤로 이동하며 실행할 수 있습니다.

  • 또한 역으로 저장 프로시저 코드에서 저장 프로시저를 호출한 계층의 코드로 이동할 수도 없습니다. 응용 프로그램 계층으로 돌아간 후 디버깅을 계속하려면 저장 프로시저가 호출된 위치의 다음에 있는 응용 프로그램 코드에 중단점을 설정합니다.

  • 연결 풀링은 성능을 향상시키는 기술입니다. 응용 프로그램이 데이터 연결을 끊어도 SQL Server 연결은 완전히 끊기지 않고 다음에 응용 프로그램이 다시 연결하려고 할 때 다시 사용할 수 있도록 풀에 보관됩니다. 그러나 연결 풀링을 통해 다시 연결될 때 SQL 디버깅은 다시 활성화되지 않습니다.

    디버깅하는 동안에는 연결 풀링을 일시적으로 사용할 수 없도록 설정해야 합니다. 이렇게 하려면 SQL Server에 연결하는 데 사용되는 연결 문자열에 "Pooling=false"를 설정합니다. 디버깅을 마친 후 연결 문자열에서 이 특성을 제거하면 다시 풀링이 기본적으로 사용됩니다.

  • 관리되는 응용 프로그램은 .NET Framework Data Provider for SQL Server를 사용하여 SQL Server 데이터 소스에 연결할 수 있습니다. 이렇게 하면 OLE DB나 ODBC를 사용하여 연결할 때보다 성능이 향상됩니다. 동일한 디버거 세션에서 관리되는 디버깅과 SQL 디버깅을 모두 수행할 수 있습니다.

    관리되는 응용 프로그램을 실행하고 디버거를 사용하여 해당 응용 프로그램에 연결하면 수행할 디버깅 종류를 선택해야 합니다. SQL 디버깅을 수행하려면 SQL 디버깅을 선택해야 하고, SQL/CLR 코드를 디버깅하려면 관리되는 디버깅도 지정해야 합니다.

  • 실행되고 있는 응용 프로그램에 연결한 후 SQL 디버깅을 수행할 수 있습니다. 단, 연결 후에 만든 데이터베이스 연결만 디버깅할 수 있습니다. 따라서 응용 프로그램에서 매우 오랜 시간이 걸리는 저장 프로시저를 호출할 경우, 저장 프로시저를 호출한 연결에는 연결할 수 없고 해당 응용 프로그램에 연결한 후 저장 프로시저를 호출하는 새 연결에만 연결할 수 있습니다.

  • OleDbDataAdapter 연결을 통해 디버깅할 경우, 중단점이 적중된 후 오랜 시간 동안 대기하면 연결 시간이 초과됩니다. 이 제한 시간 후에 디버깅을 계속(예: 디버그 메뉴에서 계속 선택)하려고 하면 실행이 계속되지 않고 디버거가 중지됩니다. 이는 정상적인 동작입니다. 시간 초과가 발생할 때 SqlDataAdapter와 달리 OleDbDataAdapter는 예외를 throw하지 않기 때문에 디버거가 중지됩니다. 이 문제를 해결하려면 OleDbDataAdapter를 사용할 때 시간 제한 값을 높게 설정하십시오.

    .NET Framework 데이터 공급자의 시간 제한 값 설정에 대한 자세한 내용은 .NET Framework 클래스 라이브러리 설명서의 OleDbCommand.CommandTimeout 속성SqlCommand.CommandTimeout 속성을 참조하십시오.

    MDAC 기술에 대한 최신 뉴스는 Microsoft Universal Data Access 웹 사이트(https://www.microsoft.com/data)를 참조하십시오.

기타 제한

  • 트리거를 디버깅하려면 먼저 트리거를 발생시켜야 합니다. 트리거는 직접 디버깅할 수 없습니다. 대신 트리거를 발생시키는 저장 프로시저에서 디버깅을 시작합니다.

  • 런타임 디버깅에서는 일련의 하위 select 문에서(예: union 사용) netbuffer를 채울 수 있습니다. 이 경우 정상적으로 실행되는 코드가 디버깅 동안 중단됩니다. 따라서 더 많은 데이터를 얻으려면 RecordSet.MoveNext 및 RecordSet.NextRecordSet를 사용합니다.

  • 저장 프로시저 이름에 따옴표가 있으면 디버거 오류 메시지가 나타날 수 있습니다. 자세한 내용은 이름에 따옴표가 포함된 프로시저를 디버깅할 때 발생하는 오류를 참조하십시오.

  • 캐싱된 값은 자동으로 수정되지 않습니다. SQL 문을 단계별로 실행할 때 SQL 인터프리터가 캐싱한 지역 변수나 매개 변수의 변경 내용이 항상 적용되지는 않습니다. 따라서 값을 수정한 후에 다시 확인하지 못할 수도 있습니다. 캐싱된 값을 강제로 새로 고칠 수도 없습니다. 캐싱된 값이 있는 것은 각 문을 실행하거나 참조할 때 일부 변수의 값이 동적으로 로드되지 않도록 SQL Server 실행 계획에서 결정하기 때문입니다. 자세한 내용을 보려면 SQL Server 2005 설명서에서 "SHOWPLAN"을 검색하십시오.

  • 저장 프로시저를 디버깅하는 동안에는 네이티브 SQL Server 프로세스에 연결할 수 없습니다.

참고 항목

개념

디버거 보안

SQL 디버깅

디버거 명령 및 기능의 제한 사항