반응형

이번 강좌에서는 Management Studio의 스크립트 디버깅 기능을 살펴보겠습니다. 디버깅 기능은 SQL Server 2000 버전에 등장했던 기능입니다. 하지만 SQL Server 2005 버전에서 누락이 되었습니다. 그리고 SQL Server 2008에 다시 등장한 기능인데, 예전의 기능과는 비교도 안되는 강력한(?) 기능을 가지고 있습니다. 정말 놀라운 기능이 아닐 수 없습니다. 자, 한번 볼까요?^^

1. 사전 준비 작업

우선 다음 스크립트를 수행해 몇몇 테이블과 저장프로시저와 트리거를 만들겠습니다.

USE AdventureWorks
GO

IF OBJECT_ID('T1', 'U') IS NOT NULL
   DROP TABLE T1
GO

IF OBJECT_ID('T2', 'U') IS NOT NULL
   DROP TABLE T2
GO

CREATE TABLE T1 (
   col1 int,
   col2 int
)
GO

CREATE TABLE T2 (
   col1 int,
   col2 int
)
GO

CREATE PROC TestProc01
   @col1 int
AS
   SET @col1 +=10
   DECLARE @col2 int = @col1 * 10
   EXEC TestProc02 @col1, @col2
GO

CREATE PROC TestProc02
   @col1 int,
   @col2 int
AS
   INSERT INTO T1 VALUES(@col1, @col2)
GO

CREATE TRIGGER TestTrg01
   ON T1
   AFTER INSERT
AS
   INSERT INTO T2 SELECT * FROM Inserted
GO

위 스크립트를 간단히 살펴보겠습니다. T1, T2 두 개의 테이블을 만들었습니다. TestProc01 저장 프로시저를 호출 할 떄 매개변수 값을 전달하면 이 매개변수 값이 @col1에 대인된 후 10이 더해지고, @col1 매개변수에 10을 곱한 값이 @col2에 대입됩니다. 그리고 TestProc02를 이들 두 변수를 매개변수로 하여 호출합니다. TestProc02에서는 전달 받은 매개변수 값을 T1 테이블에 INSERT 합니다. T1 테이블에는 INSERT문에 대한 트리거가 있어서 T1에 INSERT 된 내용이 T2에 그대로 INSERT 됩니다. 이렇듯 TestProc01를 호출하면 연쇄적인 처리가 진행되는 상황입니다.

이 상황에서 TestProc01을 호출하면서 어떤 단계로 처리가 수행되는지 디버깅을 해보고자 합니다.

2. 디버깅 진행

우선 아래 [화면1]에서 TestProc01에 매개변수 값으로 10을 전달하면서 호풀하는 문장을 입력했습니다.이 상태에서 디버깅(D) 메뉴에서 디버깅 시작(S)를 선택하거나 Alt+F5를 누르거나, 아니면 실행(X) 버튼 옆의 삼각형 버튼을 누르면 디버깅이 시작됩니다.


[화면1]

이제 부터는 [화면2]와 같이 화면 우측 상단의 한 단계씩 코드 실행 버튼을 누르거나 F11 키를 눌러 한 단계식 디버깅을 진행합니다.


[화면2]

아래 [화면3] 에서는 TestProc01 저장 프로시저 내부로 들어가 디버깅이 진행됨을 보여줍니다. 좌측 하단의 지역 부분에는 @col1, @col2 변수가 표시되고 이들에 항당되는 값이 보입니다. 현재는 @col1 변수에 10이 매개변수로 전달되어 대입된 모습니다. 디버깅을 진행하면 10이 더해질 겁니다. 한 단계씩 코드 실행을 계속 수행합니다.


[화면3]

아래 [화면4]에서는@col1 변수의 값에 10이 더해져 20이 되었다고 빨간색으로 값의 변경 여부를 알려줍니다. 한 단계씩 코드 실행을 계속 수행합니다.


[화면4]

아래 [화면5]에서는 TestProc02 호출 부분까지 진행이 된 상황입니다. 계속 디버깅을 진행하면 TestProc02 저장 프로시저 내부로 디버깅이 진행될 것입니다. @col2 변수는 200 이 할당되었습니다. 한 단계씩 코드 실행을 계속 수행합니다.


[화면5]

아래 [화면6]에서는 디버깅이 TestProc02 내부로 옮겨진 것을 보여줍니다. 화면 우측 하단의 호출 스택 부분에는 현재 어느 모듈 어느 부분에 대한 디버깅 중인지 표시됩니다. 아래에서 위로 읽어가면 됩니다. 한 단계씩 코드 실행을 계속 수행합니다.


[화면6]

아래 [화면7] 에서는 디버깅이 TestTrg01 트리거 안으로 이동됨을 보여줍니다. 트리거도 디버깅이 되다니 정말 놀랍습니다.


[화면7]

아래 [화면8]은 디버깅이 종료된 상태를 보여줍니다.


[화면8]

3. 고려사항

실제 업무 환경에서는 디버깅 작업을 자제하는것이 당연 할 겁니다. 원격 서버에 대한 디버깅에는 약간의 문제가 있을 수 있다고 합니다.

맺음말

SQL Server 2008에 추가된 스크립트 디버깅 기능은 상당히 강력합니다. 트리거 단계까지 디버깅이 되므로 예측 할 수 없는 데이터 변경에 대한 추적이 가능해졌습니다. 위에서 보여드린 기능이 디버깅의 전부가 아닙니다. 그 일부만을 보여준것 뿐입니다. 시스템 저장 프로시저도 디버깅이 되더군요. 이렇게 해서 지난 강좌에 이번 강좌를 통해 Management Studio의 향상된 기능을 살펴보았습니다.

 

반응형

+ Recent posts