이 프로그램은 DDL(Data Definition Language)문 실행 기록을 추적하는 프로그램입니다.
예를 들어, 잘 돌아가던 프로그램이 어느날 갑자기 실행되지 않아 살펴보니 SP(Stored Procedure)가 변경되었는데, 개발자들은 모두 자기가 아니라고 발뺌하는 상황을 가정해 보죠.
트랜잭션 로그를 뒤져 보지 않는 이상 언제 누가 변경했고 이전 스크립트는 어땠는지 알 수 있는 방법은 없습니다.
이럴때 이 프로그램이 유용합니다.
물론 이 프로그램은 DDL 변경 기록을 조회하는 기능뿐이고 이 프로그램이 빛을 발하기 위해서는 DDL 트리거를 데이터베이스와 서버에 생성해야 합니다.
DDL 트리거에 관련된 내용은 “DDL 트리거” 포스트를 참고하세요.
그럼 프로그램에 대해서 간략히 살펴보도록 하겠습니다.
▶ 다운로드
DDL Tracker_090617.zip
▶ 사용 환경
SQL Server 2005 환경에서 개발 및 테스트했습니다.
프로그램 구동 환경은 Windows 2000이상, .NET Framework 3.5이상 설치되어 있어야 합니다.
▶ 주요 기능
이 프로그램의 주요 기능은 DDL 문 추적 및 버전 비교 기능과 DDL 트리거 생성 기능입니다.
1. DDL 트리거 생성
DDL 트리거는 서버 트리거와 데이터베이스 트리거를 생성할 수 있습니다.
서버 트리거의 경우 master 데이터베이스에 audit_ddl_event 테이블을 생성하고 ddl_login_events 수준의 서버 DDL 트리거를 생성합니다.
트리거 명은 trg_audit_ddl_login 입니다.
데이터베이스 트리거의 경우 해당 데이터베이스에 audit_ddl_event 테이블을 생성하고 ddl_database_level_events 수준의 데이터베이스 DDL 트리거를 생성합니다.
트리거 명은 trg_audit_ddl_event 입니다.
2. DDL 기록 조회
데이터베이스 DDL 트리거를 생성한 후 SSMS(SQL Server Management Studio)에서 DDL문을 실행하면 DDL 트리거에 의해서 audit_ddl_event테이블에 실행된 DDL문이 기록됩니다. 이 때 SQL Server 로그인정보와 접속한 컴퓨터 정보등이 모두 기록됩니다.
특히 저장 프로시저(PROCEDURE)와 사용자 정의 함수(FUNCTION)는 최종 버전과 작업 버전의 텍스트 비교기능도 있어 어떤 문장이 삭제되고 추가되었는지 한 눈에 살펴볼 수 있습니다.
▶ 사용 방법
간단한 사용방법을 살펴보겠습니다.
먼저 스크린샷을 보도록 하죠.
위 스크린샷은 프로그램의 전체기능을 보여주고 있습니다.
1. 먼저 Connect 메뉴를 클릭해서 SQL Server 연결 팝업윈도우를 엽니다.
Host 입력박스에 SQL Server의 IP(인스턴스가 있을 경우 IP\인스턴스명)와 Port를 입력하고,
SQL Server 인증을 원할 경우 Login 입력박스와 Password 입력박스에 로그인 정보를 입력합니다.
로그인 정보를 입력하지 않을 경우 윈도우 인증을 수행합니다.
Ok 버튼을 클릭해서 서버에 연결합니다.
서버에 성공적으로 연결될 경우 Databases 리스트박스에 데이터베이스 목록이 출력됩니다.
2. DDL 트리거 생성
이미 DDL 트리거가 생성되어 있을 경우(엄밀히 말하면 audit_ddl_event 테이블이 생성되어 있을 경우) 데이터베이스를 클릭하면 해당 데이터베이스의 DDL 실행기록이 검색되어 그리드에 출력됩니다.(master 데이터베이스의 경우 데이터베이스 DDL과 서버 DDL 실행기록이 모두 출력됩니다.)
하지만 DDL 트리거가 없을 경우 오류 메시지박스가 뜨는데 이럴 경우 해당 데이터베이스에 DDL 트리거를 생성하면 됩니다.
Databases 리스트박스에서 마우스 오른쪽 버튼을 클릭하면 다음과 같이 컨텍스트메뉴가 출력됩니다.
“Create DDL Trigger for server” 메뉴를 선택할 경우 master 데이터베이스에 audit_ddl_event 테이블을 생성하고 서버 DDL 트리거를 생성합니다. 이후 로그인을 생성, 수정, 삭제하면 master데이터베이스의 audit_ddl_event 테이블에 DDL 문이 기록됩니다.
“Create DDL Trigger for database” 메뉴를 선택할 경우 현재 선택된 데이터베이스에 audit_ddl_event 테이블을 생성하고 데이터베이스 DDL 트리거를 생성합니다. 이후 데이터베이스에서 개체(테이블, 인덱스, 프로시저, 함수, …)를 생성, 수정, 삭제하면 해당 데이터베이스의 audit_ddl_event 테이블에 DDL 문이 기록됩니다.
트리거 생성 시 오류가 발생하면 해당 데이터베이스의 audit_ddl_event 테이블과 DDL 트리거를 삭제하신 후 다시 시도하면 성공적으로 생성할 수 있습니다.
3. DDL 기록 조회
DDL 트리거를 생성한 후 DDL 문이 여러번 실행되면 데이터베이스를 클릭하여 해당 데이터베이스에서 수행된 DDL 실행기록을 조회할 수 있습니다.
조회된 결과가 많을 경우 object type(TABLE, INDEX, PROCEDURE, FUNCTION, LOGIN…)과 object name(TABLE NAME, INDEX NAME, PROCEDURE NAME, …)으로 필터링해서 볼 수 있습니다.
또한 검색결과가 많을 경우 한 페이지에 50개씩 페이징해 볼 수 있습니다.
4. DDL 문 버전 관리
object type이 PROCEDURE 또는 FUNCTION일 경우 최종 실행된 DDL 문과 특정 시점에 실행된 DDL 문의 텍스트를 비교할 수 있습니다. 텍스트 비교는 삭제되었거나 추가된 문장을 비교합니다.