SQL Server Integration Services에는 패키지, 컨테이너 및 태스크에서 로깅을 구현하는 데 사용할 수 있는 로그 공급자가 포함되어 있습니다. 로깅을 사용하면 패키지에 대한 런타임 정보를 캡처하여 패키지가 실행 될 때마다 감사하고 문제를 해결할 수 있습니다. 예를 들어 로그는 패키지를 실행한 운영자의 이름과 패키지가 시작되고 완료된 시간을 캡처할 수 있습니다.
Integration Services 서버에서 패키지 실행 중에 발생하는 로깅 범위를 구성할 수 있습니다. 자세한 내용은 SSIS 서버에서 패키지 실행에 대한 로깅 설정를 참조하십시오.
dtexec 명령 프롬프트 유틸리티를 사용하여 패키지를 실행할 때 로깅을 포함할 수도 있습니다. 로깅을 지원하는 명령 프롬프트 인수에 대한 자세한 내용은 dtexec 유틸리티를 참조하세요.
SQL Server Data Tools에서 로깅 구성
로그는 패키지와 연결되며 패키지 수준에서 구성됩니다. 패키지의 각 태스크 또는 컨테이너는 모든 패키지 로그에 정보를 기록할 수 있습니다. 패키지 자체가 아닌 경우에도 패키지의 작업 및 컨테이너를 로깅에 사용할 수 있습니다. 예를 들어 부모 패키지에 대한 로깅을 사용하도록 설정하지 않고 SQL 실행 태스크에서 로깅을 사용하도록 설정할 수 있습니다. 패키지, 컨테이너 또는 태스크는 여러 로그에 쓸 수 있습니다. 패키지에 대해서만 로깅을 사용하도록 설정하거나 패키지에 포함된 개별 작업 또는 컨테이너에 대한 로깅을 사용하도록 선택할 수 있습니다.
패키지에 로그를 추가할 때 로그 공급자와 로그의 위치를 선택합니다. 로그 공급자는 로그 데이터의 형식(예: SQL Server 데이터베이스 또는 텍스트 파일)을 지정합니다.
Integration Services에는 다음 로그 공급자가 포함됩니다.
CSV(쉼표로 구분된 값) 형식으로 ASCII 텍스트 파일에 로그 항목을 쓰는 텍스트 파일 로그 공급자입니다. 이 공급자의 기본 파일 이름 확장명은 .log.
SQL Server Profiler로 볼 수 있는 추적 기록을 작성하는 SQL Server Profiler 로그 프로바이더입니다. 이 공급자의 기본 파일 이름 확장명은 .trc입니다.
비고
64비트 모드로 실행되는 패키지에서는 SQL Server Profiler 로그 공급자를 사용할 수 없습니다.
SQL Server 로그 공급자는 SQL Server 데이터베이스의
sysssislog테이블에 로그 항목을 기록합니다.로컬 컴퓨터의 Windows 이벤트 로그에서 애플리케이션 로그에 항목을 쓰는 Windows 이벤트 로그 공급자입니다.
XML 파일에 로그 파일을 쓰는 XML 파일 로그 공급자입니다. 이 공급자의 기본 파일 이름 확장명은 .xml.
패키지에 로그 공급자를 추가하거나 프로그래밍 방식으로 로깅을 구성하는 경우 SSIS 디자이너가 SSIS 로그 구성 대화 상자에 표시하는 이름을 사용하는 대신 ProgID 또는 ClassID를 사용하여 로그 공급자를 식별할 수 있습니다.
다음 표에서는 Integration Services에 포함된 로그 공급자에 대한 ProgID 및 ClassID와 로그 공급자가 쓰는 로그의 위치를 나열합니다.
| 로그 공급자 | ProgID | ClassID | 위치 |
|---|---|---|---|
| 텍스트 파일 | DTS.LogProviderTextFile | {0A039101-ACC1-4E06-943F-279948323883} | 로그 공급자가 사용하는 파일 연결 관리자는 텍스트 파일의 경로를 지정합니다. |
| SQL Server Profiler | DTS.LogProviderSQLProfiler | {E93F6300-AE0C-4916-A7BF-A8D0CE12C77A} | 로그 공급자가 사용하는 파일 연결 관리자는 SQL Server Profiler에서 사용하는 파일의 경로를 지정합니다. |
| SQL Server | DTS.LogProviderSQLServer | {94150B25-6AEB-4C0D-996D-D37D1C4FDEDA} | 로그 공급자가 사용하는 OLE DB 연결 관리자는 로그 항목이 있는 sysssislog 테이블을 포함하는 SQL Server 데이터베이스를 지정합니다. |
| Windows 이벤트 로그 | DTS.LogProviderEventLog | {071CC8EB-C343-4CFF-8D58-564B92FCA3CF} | Windows 이벤트 뷰어의 애플리케이션 로그에는 Integration Services 로그 정보가 포함됩니다. |
| XML 파일 | DTS.LogProviderXMLFile | {440945A4-2A22-4F19-B577-EAF5FDDC5F7A} | 로그 공급자가 사용하는 파일 연결 관리자는 XML 파일의 경로를 지정합니다. |
사용자 지정 로그 공급자를 만들 수도 있습니다. 자세한 내용은 사용자 지정 로그 공급자 만들기를 참조하세요.
패키지의 로그 공급자는 패키지의 로그 공급자 컬렉션의 멤버입니다. SSIS 디자이너를 사용하여 패키지를 만들고 로깅을 구현하는 경우 SSIS 디자이너의 패키지 탐색기 탭에 있는 로그 공급자 폴더의 컬렉션 멤버 목록을 볼 수 있습니다.
로그 공급자에 대한 이름과 설명을 제공하고 로그 공급자가 사용하는 연결 관리자를 지정하여 로그 공급자를 구성합니다. SQL Server 로그 공급자는 OLE DB 연결 관리자를 사용합니다. 텍스트 파일, SQL Server Profiler 및 XML 파일 로그 공급자는 모두 파일 연결 관리자를 사용합니다. Windows 이벤트 로그 공급자는 Windows 이벤트 로그에 직접 쓰기 때문에 연결 관리자를 사용하지 않습니다. 자세한 내용은 OLE DB 연결 관리자 및 파일 연결 관리자를 참조하세요.
로깅 사용자 지정
이벤트 또는 사용자 지정 메시지의 로깅을 사용자 지정하기 위해 Integration Services는 로그 항목에 포함할 일반적으로 기록되는 정보의 스키마를 제공합니다. Integration Services 로그 스키마는 기록할 수 있는 정보를 정의합니다. 각 로그 항목에 대한 로그 스키마에서 요소를 선택할 수 있습니다.
패키지와 해당 컨테이너 및 태스크는 동일한 정보를 기록할 필요가 없으며 동일한 패키지 또는 컨테이너 내의 태스크는 다른 정보를 기록할 수 있습니다. 예를 들어 패키지는 패키지가 시작될 때 운영자 정보를 기록할 수 있고, 한 태스크는 태스크 실패의 원본을 기록할 수 있으며, 다른 작업은 오류가 발생할 때 정보를 기록할 수 있습니다. 패키지와 해당 컨테이너 및 태스크가 여러 로그를 사용하는 경우 모든 로그에 동일한 정보가 기록됩니다.
로그할 이벤트와 각 이벤트에 대해 기록할 정보를 지정하여 요구 사항에 맞는 로깅 수준을 선택할 수 있습니다. 일부 이벤트는 다른 이벤트보다 더 유용한 정보를 제공할 수 있습니다. 예를 들어 PreExecute 이벤트에 대한 컴퓨터 및 연산자 이름만 기록하지만 오류 이벤트에 사용 가능한 모든 정보를 기록할 수 있습니다.
로그 파일이 많은 양의 디스크 공간을 사용하지 못하게 하거나 과도한 로깅을 방지하여 성능을 저하시킬 수 있도록 로그할 특정 이벤트 및 정보 항목을 선택하여 로깅을 제한할 수 있습니다. 예를 들어 각 오류에 대한 날짜 및 컴퓨터 이름만 캡처하도록 로그를 구성할 수 있습니다.
SSIS 디자이너에서는 SSIS 로그 구성 대화 상자를 사용하여 로깅 옵션을 정의합니다.
로그 스키마
다음 표에서는 로그 스키마의 요소에 대해 설명합니다.
| 요소 | 설명 |
|---|---|
| 컴퓨터 | 로그 이벤트가 발생한 컴퓨터의 이름입니다. |
| 오퍼레이터 | 패키지를 시작한 사용자의 ID입니다. |
| SourceName | 로그 이벤트가 발생한 컨테이너 또는 태스크의 이름입니다. |
| SourceID | 패키지의 고유 식별자입니다. For 루프, Foreach 루프 또는 시퀀스 컨테이너 또는 로그 이벤트가 발생한 작업입니다. |
| 실행ID | 패키지 실행 인스턴스의 GUID입니다. 참고: 단일 패키지를 실행하면 ExecutionID 요소에 대한 값이 다른 로그 항목이 생성될 수 있습니다. 예를 들어 SQL Server Data Tools에서 패키지를 실행할 때 유효성 검사 단계에서는 SQL Server Data Tools에 해당하는 ExecutionID 요소를 사용하여 로그 항목을 만들 수 있습니다. 그러나 실행 단계에서는 dtshost.exe해당하는 ExecutionID 요소를 사용하여 로그 항목을 만들 수 있습니다. 또 다른 예로 패키지 실행 태스크가 포함된 패키지를 실행하면 이러한 각 태스크가 자식 패키지를 실행합니다. 이러한 자식 패키지는 부모 패키지가 만드는 로그 항목과 다른 ExecutionID 요소가 있는 로그 항목을 만들 수 있습니다. |
| 메시지 텍스트 | 로그 항목과 연결된 메시지입니다. |
| DataBytes | 로그 항목과 관련된 바이트 배열입니다. 이 필드의 의미는 로그 항목에 따라 다릅니다. |
다음 표에서는 SSIS 로그 구성 대화 상자의 세부 정보 탭에서 사용할 수 없는 로그 스키마의 세 가지 추가 요소를 설명합니다.
| 요소 | 설명 |
|---|---|
| 시작 시간 | 컨테이너 또는 태스크가 실행하기 시작하는 시간입니다. |
| 종료시간 | 컨테이너 또는 태스크의 실행이 중지되는 시간입니다. |
| 데이터코드 | 일반적으로 컨테이너 또는 태스크 실행 결과를 나타내는 열거형의 값을 포함하는 선택적 정수 값 DTSExecResult 입니다. 0 - 성공 1 - 실패 2 - 완료됨 3 - 취소됨 |
로그 항목
Integration Services는 미리 정의된 이벤트에 대한 로그 항목을 지원하고 많은 Integration Services 개체에 대한 사용자 지정 로그 항목을 제공합니다. SSIS 디자이너의 SSIS 로그 구성 대화 상자에는 이러한 이벤트 및 사용자 지정 로그 항목이 나열됩니다.
다음 표에서는 런타임 이벤트가 발생할 때 로그 항목을 작성하도록 설정할 수 있는 미리 정의된 이벤트에 대해 설명합니다. 이러한 로그 항목은 실행 파일, 패키지 및 패키지에 포함된 태스크 및 컨테이너에 적용됩니다. 로그 항목의 이름은 발생된 런타임 이벤트의 이름과 같으며 로그 항목이 기록되도록 했습니다.
| 이벤트 | 설명 |
|---|---|
| onError | 오류가 발생할 때 로그 항목을 씁니다. |
| OnExecStatusChanged | 디버깅 중에 태스크(컨테이너 아님)가 일시 중단되거나 다시 시작될 때 로그 항목을 씁니다. |
| OnInformation | 실행 파일의 유효성 검사 및 실행 중에 정보를 보고하는 동안 로그 항목을 씁니다. |
| OnPostExecute | 실행 파일 실행이 완료된 직후 로그 항목을 씁니다. |
| OnPostValidate | 실행 파일의 유효성 검사가 완료되면 로그 항목을 씁니다. |
| OnPreExecute | 실행 파일이 실행되기 직전에 로그 항목을 씁니다. |
| OnPreValidate | 실행 파일의 유효성 검사가 시작될 때 로그 항목을 씁니다. |
| OnProgress | 실행 파일이 측정 가능한 진행을 할 때 로그를 기록합니다. |
| OnQueryCancel | 실행을 취소할 수 있는 작업 처리의 모든 시점에 로그 항목을 씁니다. |
| OnTaskFailed | 작업이 실패할 때 로그 항목을 씁니다. |
| OnVariableValueChanged | 변수 값이 변경되면 로그 항목을 씁니다. |
| OnWarning | 경고가 발생할 때 로그 항목을 씁니다. |
| PipelineComponentTime | 각 데이터 흐름 구성 요소에 대해 유효성 검사 및 실행의 각 단계에 대한 로그 항목을 작성합니다. 로그 항목은 각 단계의 처리 시간을 지정합니다. |
| 진단 | 진단 정보를 제공하는 로그 항목을 씁니다. 예를 들어 외부 데이터 공급자에 대한 모든 호출 전후에 메시지를 기록할 수 있습니다. 자세한 내용은 패키지 실행을 위한 문제 해결 도구를 참조하세요. |
패키지 및 많은 작업에는 로깅을 사용하도록 설정할 수 있는 사용자 지정 로그 항목이 있습니다. 예를 들어 메일 보내기 태스크는 SendMailTaskBegin 사용자 지정 로그 항목을 제공합니다. 이 로그 항목은 메일 보내기 태스크가 실행되기 시작하지만 태스크가 전자 메일 메시지를 보내기 전에 정보를 기록합니다. 자세한 내용은 로깅에 대한 사용자 지정 메시지를 참조하세요.
패키지 복사본 식별
로그 데이터에는 로그 항목이 속한 패키지의 이름 및 GUID가 포함됩니다. 기존 패키지를 복사하여 새 패키지를 만드는 경우 기존 패키지의 이름 및 GUID도 복사됩니다. 따라서 GUID와 이름이 같은 두 개의 패키지가 있을 수 있으므로 로그 데이터의 패키지를 구분하기가 어려울 수 있습니다.
이 모호성을 제거하려면 새 패키지의 이름 및 GUID를 업데이트해야 합니다. SSDT(SQL Server Data Tools)에서 ID 속성의 GUID를 다시 생성하고 속성 창에서 속성 값을 Name 업데이트할 수 있습니다. 프로그래밍 방식으로 또는 dtutil 명령 프롬프트를 사용하여 GUID 및 이름을 변경할 수도 있습니다. 자세한 내용은 패키지 속성 및 dtutil 유틸리티 설정을 참조하세요.
부모 로깅 옵션
작업 및 For 루프, Foreach 루프 및 시퀀스 컨테이너의 로깅 옵션은 종종 패키지 또는 부모 컨테이너의 로깅 옵션과 일치합니다. 이 경우 부모 컨테이너에서 로깅 옵션을 상속하도록 구성할 수 있습니다. 예를 들어 SQL 실행 태스크가 포함된 For 루프 컨테이너에서 SQL 실행 태스크는 For 루프 컨테이너에 설정된 로깅 옵션을 사용할 수 있습니다. 부모 로깅 옵션을 사용하려면 컨테이너의 LoggingMode 속성을 UseParentSetting으로 설정합니다. SSDT(SQL Server Data Tools)의 속성 창이나 SSIS 디자이너의 SSIS 로그 구성 대화 상자를 통해 이 속성을 설정할 수 있습니다.
로깅 템플릿
SSIS 로그 구성 대화 상자에서 자주 사용되는 로깅 구성을 템플릿으로 만들고 저장한 다음 여러 패키지에서 템플릿을 사용할 수도 있습니다. 이렇게 하면 여러 패키지에 일관된 로깅 전략을 쉽게 적용하고 템플릿을 업데이트한 다음 적용하여 패키지의 로그 설정을 수정할 수 있습니다. 템플릿은 XML 파일에 저장됩니다.
SSIS 로그 구성 대화 상자를 사용하여 로깅을 구성하려면
로깅을 위해 패키지 및 해당 작업을 사용하도록 설정합니다. 로깅은 패키지, 컨테이너 및 작업 수준에서 발생할 수 있습니다. 패키지, 컨테이너 및 작업에 대해 다른 로그를 지정할 수 있습니다.
로그 공급자를 선택하고 패키지에 대한 로그를 추가합니다. 로그는 패키지 수준에서만 만들 수 있으며 태스크 또는 컨테이너는 패키지에 대해 만든 로그 중 하나를 사용해야 합니다. 각 로그는 텍스트 파일, SQL Server Profiler, SQL Server, Windows 이벤트 로그 또는 XML 파일과 같은 로그 공급자 중 하나와 연결됩니다. 자세한 내용은 SQL Server 데이터 도구에서 패키지 로깅 사용을 참조하세요.
로그에서 캡처하려는 각 이벤트에 대한 이벤트 및 로그 스키마 정보를 선택합니다. 자세한 내용은 저장된 구성 파일을 사용하여 로깅 구성을 참조하세요.
로그 공급자 구성
SSIS 디자이너를 사용하거나 프로그래밍 방식으로 속성을 설정할 수 있습니다.
로그 공급자는 패키지에서 로깅을 구현하는 단계로 만들어지고 구성됩니다. 자세한 내용은 Integration Services 로깅을 참조하세요.
로그 공급자를 만든 후 SSDT(SQL Server Data Tools)의 속성 창에서 해당 속성을 보고 수정할 수 있습니다.
이러한 속성을 프로그래밍 방식으로 설정하는 방법에 대한 자세한 내용은 클래스에 대한 LogProvider 설명서를 참조하세요.
데이터 흐름 태스크에 대한 로깅
데이터 흐름 태스크는 성능을 모니터링하고 조정하는 데 사용할 수 있는 많은 사용자 지정 로그 항목을 제공합니다. 예를 들어 메모리 누수를 일으킬 수 있는 구성 요소를 모니터링하거나 특정 구성 요소를 실행하는 데 걸리는 시간을 추적할 수 있습니다. 이러한 사용자 지정 로그 항목 및 샘플 로깅 출력 목록은 데이터 흐름 태스크를 참조하세요.
PipelineComponentTime 이벤트 사용
가장 유용한 사용자 지정 로그 항목은 PipelineComponentTime 이벤트일 수 있습니다. 이 로그 항목은 데이터 흐름의 각 구성 요소가 5가지 주요 처리 단계 각각에 소비하는 시간(밀리초)을 보고합니다. 다음 표에서는 이러한 처리 단계를 설명합니다. Integration Services 개발자는 이러한 단계를 주 메서드로 인식합니다 PipelineComponent.
| 단계 | 설명 |
|---|---|
| 확인 | 구성 요소는 유효한 속성 값 및 구성 설정을 확인합니다. |
| 사전 실행 | 구성 요소는 데이터 행 처리를 시작하기 전에 일회성 처리를 수행합니다. |
| PostExecute | 구성 요소는 모든 데이터 행을 처리한 후 일회성 처리를 수행합니다. |
| ProcessInput | 변환 또는 대상 구성 요소는 업스트림 원본 또는 변환이 전달한 데이터의 들어오는 행을 처리합니다. |
| PrimeOutput | 원본 또는 변환 구성 요소는 다운스트림 변환 또는 대상 구성 요소에 전달할 데이터의 버퍼를 채웁니다. |
PipelineComponentTime 이벤트를 사용하도록 설정하면 Integration Services는 각 구성 요소에서 수행하는 각 처리 단계에 대해 하나의 메시지를 기록합니다. 다음 로그 항목은 Integration Services CalculatedColumns 패키지 샘플 로그 메시지의 하위 집합을 보여 줍니다.
The component "Calculate LineItemTotalCost" (3522) spent 356 milliseconds in ProcessInput.
The component "Sum Quantity and LineItemTotalCost" (3619) spent 79 milliseconds in ProcessInput.
The component "Calculate Average Cost" (3662) spent 16 milliseconds in ProcessInput.
The component "Sort by ProductID" (3717) spent 125 milliseconds in ProcessInput.
The component "Load Data" (3773) spent 0 milliseconds in ProcessInput.
The component "Extract Data" (3869) spent 688 milliseconds in PrimeOutput filling buffers on output "OLE DB Source Output" (3879).
The component "Sum Quantity and LineItemTotalCost" (3619) spent 141 milliseconds in PrimeOutput filling buffers on output "Aggregate Output 1" (3621).
The component "Sort by ProductID" (3717) spent 16 milliseconds in PrimeOutput filling buffers on output "Sort Output" (3719).
이러한 로그 항목은 데이터 흐름 태스크가 내림차순으로 표시된 다음 단계에서 가장 많은 시간을 소비했음을 보여줍니다.
"데이터 추출"이라는 OLE DB 원본은 데이터를 로드하는 데 688ms를 소비했습니다.
"LineItemTotalCost 계산"이라는 파생 열 변환은 들어오는 행에 대한 계산을 수행하는 데 356ms를 소비했습니다.
"Sum Quantity 및 LineItemTotalCost"라는 집계 변환은 PrimeOutput에서 총 220 ms 중 141 ms를, ProcessInput에서 79 ms를 사용하여 계산을 수행하고 데이터를 다음 변환에 전달했습니다.
관련 작업
다음 목록에는 로깅 기능과 관련된 작업을 수행하는 방법을 보여 주는 항목에 대한 링크가 포함되어 있습니다.
관련 내용
전체 및 세부 정보 로깅용 DTLoggedExec 도구(CodePlex 프로젝트)