패키지 실행 문제 해결 도구Troubleshooting Tools for Package Execution

Integration ServicesIntegration Services 에서는 패키지를 완성 및 배포한 후 실행할 때 패키지 문제를 해결하는 데 사용할 수 있는 기능 및 도구를 제공합니다. includes features and tools that you can use to troubleshoot packages when you execute them after they have been completed and deployed.

디자인 타임에 SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT) 에서는 패키지 실행을 일시 중지하기 위한 중단점, 진행률 창 및 데이터가 데이터 흐름을 통과할 때 데이터를 감시하기 위한 데이터 뷰어를 제공합니다.At design time, SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT) provides breakpoints to pause package execution, the Progress window, and data viewers to watch your data as it passes through the data flow. 그러나 배포된 패키지를 실행할 때는 이러한 기능을 사용할 수 없습니다.However, these features are not available when you are running packages that have been deployed. 배포된 패키지의 문제를 해결하는 주요 방법은 다음과 같습니다.The main techniques for troubleshooting deployed packages are as follows:

  • 이벤트 처리기를 사용하여 패키지 오류 파악 및 처리Catch and handle package errors by using event handlers.

  • 오류 출력을 사용하여 잘못된 데이터 캡처Capture bad data by using error outputs.

  • 로깅을 사용하여 패키지 실행 단계 추적Track the steps of package execution by using logging.

    다음 팁과 기술을 사용하여 패키지 실행과 관련된 문제를 방지할 수도 있습니다.You can also use the following tips and techniques to avoid problems with running packages

  • 트랜잭션을 사용하여 데이터 무결성 유지Help to ensure data integrity by using transactions. 자세한 내용은 Integration Services 트랜잭션을 참조하세요.For more information, see Integration Services Transactions.

  • 검사점을 사용하여 실패한 지점에서 패키지 다시 시작Restart packages from the point of failure by using checkpoints. 자세한 내용은 검사점을 사용하여 패키지 다시 시작을 참조하세요.For more information, see Restart Packages by Using Checkpoints.

이벤트 처리기를 사용하여 패키지 오류 파악 및 처리Catch and Handle Package Errors by Using Event Handlers

이벤트 처리기를 사용하여 패키지 및 패키지의 개체에서 발생한 여러 이벤트에 대응할 수 있습니다.You can respond to the many events that are raised by the package and the objects in the package by using event handlers.

  • OnError 이벤트의 이벤트 처리기 만들기Create an event handler for the OnError event. 이벤트 처리기에서 메일 보내기 태스크를 사용하여 관리자에게 오류를 알리거나, 스크립트 작업 및 사용자 지정 논리를 사용하여 문제 해결을 위한 시스템 정보를 가져오거나, 임시 리소스 또는 완전하지 않은 출력을 정리할 수 있습니다.In the event handler, you can use a Send Mail task to notify an administrator of the failure, use a Script task and custom logic to obtain system information for troubleshooting, or clean up temporary resources or incomplete output. 자세한 내용은 Integration Services(SSIS) 이벤트 처리기를 참조하세요.For more information, see Integration Services (SSIS) Event Handlers.

오류 출력을 사용하여 잘못된 데이터 문제 해결Troubleshoot Bad Data by Using Error Outputs

여러 데이터 흐름 구성 요소에서 사용할 수 있는 오류 출력을 통해 오류가 들어 있는 행을 나중에 분석할 수 있도록 별도의 대상으로 보낼 수 있습니다.You can use the error output available on many data flow components to direct rows that contain errors to a separate destination for later analysis. 자세한 내용은 데이터 오류 처리를 참조하세요.For more information, see Error Handling in Data.

  • 오류 출력을 사용하여 잘못된 데이터 캡처Capture bad data by using error outputs. 오류가 들어 있는 행을 오류 테이블이나 텍스트 파일과 같은 별도의 대상으로 보냅니다.Send rows that contain errors to a separate destination such as an error table or a text file. 오류 출력에는 행이 거부되도록 한 오류의 번호와 오류가 발생한 열의 ID가 들어 있는 두 개의 숫자 열이 자동으로 추가됩니다.The error output automatically adds two numeric columns that contain the number of the error that caused the row to be rejected, and the ID of the column in which the error occurred.

  • 오류 출력에 정보 추가Add friendly information to the error outputs. 오류 출력에 제공되는 두 개의 숫자 식별자 외에 오류 메시지 및 열 이름을 추가하여 오류 출력을 분석하기 쉽게 만들 수 있습니다.You can make it easier to analyze the error output by adding the error message and the column name in addition to the two numeric identifiers that are supplied by the error output. 스크립트를 사용하여 이러한 두 개의 추가 열을 추가하는 방법에 대한 예는 Enhancing an Error Output with the Script Component을 참조하세요.For an example of how to add these two additional columns by using scripting, see Enhancing an Error Output with the Script Component.

  • 또는 DiagnosticEx 이벤트를 로깅하여 열 이름을 가져옵니다.Or, get the column names by logging the DiagnosticEx event. 이 이벤트는 로그에 데이터 흐름 계보 지도를 작성합니다.This event writes a data flow lineage map to the log. 그런 다음 오류 출력에 의해 캡처된 열 식별자를 사용하여 이 계보 맵에서 열 이름을 조회할 수 있습니다.You can then look up the column name in this lineage map by using the column identifier captured by an error output. 자세한 내용은 데이터 오류 처리를 참조하십시오.For more info, see Error Handling in Data.

    DiagnosticEx 에 대한 메시지 열 값은 XML 텍스트입니다.The value of the message column for DiagnosticEx is XML text. 패키지 실행에 대한 메시지 텍스트를 보려면 catalog.operation_messages(SSISDB 데이터베이스) 뷰를 쿼리합니다.To view the message text for a package execution, query the catalog.operation_messages (SSISDB Database) view. DiagnosticEx 이벤트는 로그의 크기를 줄이기 위해 해당 XML 출력에서 공백을 유지하지 않습니다.Note that the DiagnosticEx event does not preserve whitespace in its XML output to reduce the size of the log. 가독성을 높이기 위해 XML 서식 지정 및 구문 강조를 지원하는 XML 편집기(예: Visual Studio)로 로그를 복사합니다.To improve readability, copy the log into an XML editor - in Visual Studio, for example - that supports XML formatting and syntax highlighting.

작업 보고서를 사용하여 패키지 실행 문제 해결Troubleshoot Package Execution by Using Operations Reports

SQL Server Management StudioSQL Server Management Studio 에서는 Integration ServicesIntegration Services 카탈로그에 배포된 Integration ServicesIntegration Services 패키지를 모니터링하는 데 도움이 되는 표준 작업 보고서가 제공됩니다.Standard operations reports are available in SQL Server Management StudioSQL Server Management Studio to help you monitor Integration ServicesIntegration Services packages that have been deployed to the Integration ServicesIntegration Services catalog. 이러한 패키지 보고서는 패키지 상태 및 기록을 보고 필요한 경우 실패 원인을 파악하는 데 도움이 됩니다.These package reports help you to view package status and history, and, if necessary, identify the cause of failures.

자세한 내용은 Troubleshooting Reports for Package Execution을 참조하세요.For more information, see Troubleshooting Reports for Package Execution.

SSISDB 뷰를 사용하여 패키지 실행 문제 해결Troubleshoot Package Execution by Using SSISDB Views

패키지 실행 및 기타 작업 정보를 모니터링하기 위해 쿼리할 수 있는 다양한 SSISDB 데이터베이스 뷰가 제공됩니다.A number of SSISDB database views are available that you can query to monitor package execution and other operations information. 자세한 내용은 실행 중인 패키지 및 기타 작업 모니터링을 참조하세요.For more information, see Monitor Running Packages and Other Operations.

로깅을 사용하여 패키지 실행 문제 해결Troubleshoot Package Execution by Using Logging

로깅을 설정하여 실행하는 패키지에서 발생하는 문제를 대부분 추적할 수 있습니다.You can track much of what occurs in your running packages by enabling logging. 로그 공급자는 지정된 이벤트에 대한 정보를 나중에 분석할 수 있도록 캡처하고 해당 정보를 데이터베이스 테이블, 플랫 파일, XML 파일 또는 지원되는 다른 출력 형식으로 저장합니다.Log providers capture information about the specified events for later analysis, and save that information in a database table, a flat file, an XML file, or another supported output format.

  • 로깅 설정Enable logging. 캡처할 이벤트와 정보 항목만 선택하여 로깅 출력을 구체화할 수 있습니다.You can refine the logging output by selecting only the events and only the items of information that you want to capture. 자세한 내용은 SSIS(Integration Services) 로깅을 참조하세요.For more information, see Integration Services (SSIS) Logging.

  • 패키지의 Diagnostic 이벤트를 선택하여 공급자 문제 해결.Select the package's Diagnostic event to troubleshoot provider issues. 외부 데이터 원본과의 패키지 상호 작용 문제를 해결하는 데 유용한 로깅 메시지가 있습니다.There are logging messages that help you troubleshoot a package's interaction with external data sources. 자세한 내용은 Troubleshooting Tools Package Connectivity을 참조하세요.For more information, see Troubleshooting Tools Package Connectivity.

  • 기본 로깅 출력 향상.Enhance the default logging output. 로깅 기능은 일반적으로 패키지가 실행될 때마다 로깅 대상에 행을 추가합니다.Logging typically appends rows to the logging destination each time that a package is run. 로깅 출력의 각 행이 패키지를 이름과 고유 식별자로 식별하고 패키지 실행을 고유 ExecutionID로 식별하더라도 단일 목록에 많은 양의 로깅 출력이 있으면 분석하기가 어려울 수 있습니다.Although each row of logging output identifies the package by its name and unique identifier, and also identifies the execution of the package by a unique ExecutionID, the large quantity of logging output in a single list can become difficult to analyze.

    다음은 기본 로깅 출력을 향상시키고 보고서를 쉽게 생성할 수 있도록 하는 데 적절한 방법입니다.The following approach is one suggestion for enhancing the default logging output and making it easier to generate reports:

    1. 각 패키지 실행을 기록하는 부모 테이블 만들기Create a parent table that logs each execution of a package. 이 부모 테이블은 각 패키지 실행에 대한 단일 행만 포함하며, ExecutionID를 사용하여 Integration ServicesIntegration Services 로깅 테이블의 자식 레코드에 연결합니다.This parent table has only a single row for each execution of a package, and uses the ExecutionID to link to the child records in the Integration ServicesIntegration Services logging table. 각 패키지가 시작될 때 SQL 실행 태스크를 사용하여 이 새 행을 만들고 시작 시간을 기록할 수 있습니다.You can use an Execute SQL task at the beginning of each package to create this new row and to record the start time. 그런 다음 패키지가 끝날 때 다른 SQL 실행 태스크를 사용하여 해당 행을 종료 시간, 기간 및 상태로 업데이트할 수 있습니다.Then you can use another Execute SQL task at the end of the package to update the row with the end time, duration, and status.

    2. 데이터 흐름에 감사 정보 추가Add auditing information to the data flow. 감사 변환을 사용하여 데이터 흐름의 행에 각 행을 만들었거나 수정한 패키지 실행에 대한 정보를 추가할 수 있습니다.You can use the Audit transformation to add information to rows in the data flow about the package execution that created or modified each row. 감사 변환을 통해 PackageName 및 ExecutionInstanceGUID를 비롯한 9가지 정보를 사용할 수 있습니다.The Audit transformation makes nine pieces of information available, including the PackageName and ExecutionInstanceGUID. 자세한 내용은 Audit Transformation을 참조하세요.For more information, see Audit Transformation. 감사를 위해 각 행에도 포함할 사용자 지정 정보가 있는 경우 파생 열 변환을 사용하여 이 정보를 데이터 흐름의 행에 추가할 수 있습니다.If you have custom information that you would also like to include in each row for auditing purposes, you can add this information to rows in the data flow by using a Derived Column transformation. 자세한 내용은 Derived Column Transformation을 참조하세요.For more information, see Derived Column Transformation.

    3. 행 개수 데이터 캡처Consider capturing row count data. 행 개수 정보에 대한 별도의 테이블을 만듭니다. 이 테이블에서 패키지 실행의 각 인스턴스는 ExecutionID로 식별됩니다.Consider creating a separate table for row count information, where each instance of package execution is identified by its ExecutionID. 행 개수 변환을 사용하여 데이터 흐름의 중요 지점에서 일련의 변수에 행 개수를 저장합니다.Use the Row Count transformation to save the row count into a series of variables at critical points in the data flow. 데이터 흐름이 끝난 후에는 나중에 분석 및 보고할 수 있도록 SQL 실행 태스크를 사용하여 일련의 값을 이 테이블의 행에 삽입합니다.After the data flow ends, use an Execute SQL task to insert the series of values into a row in the table for later analysis and reporting.

      이 방법에 대한 자세한 내용은 MicrosoftMicrosoft 백서 Project REAL: 비즈니스 인텔리전스 ETL 디자인 방법의 "ETL 감사 및 로깅" 섹션을 참조하십시오.For more information about this approach, see the section, "ETL Auditing and Logging," in the MicrosoftMicrosoft white paper, Project REAL: Business Intelligence ETL Design Practices.

디버그 덤프 파일을 사용하여 패키지 실행 문제 해결Troubleshoot Package Execution by Using Debug Dump Files

Integration ServicesIntegration Services에서는 패키지 실행에 대한 정보를 제공하는 디버그 덤프 파일을 만들 수 있습니다.In Integration ServicesIntegration Services, you can create debug dump files that provide information about the execution of a package. 자세한 내용은 Generating Dump Files for Package Execution을 참조하세요.For more information, see Generating Dump Files for Package Execution.

런타임 유효성 검사 문제 해결Troubleshoot Run-time Validation Issues

데이터 원본에 연결할 수 없거나 패키지의 이전 태스크가 실행 완료되기 전까지 패키지의 일부에 대해 유효성을 검사할 수 없는 경우가 있습니다.Sometimes you might not be able to connect to your data sources, or portions of your package cannot be validated, until prior tasks in the package have executed. Integration ServicesIntegration Services 에는 이러한 경우에 발생하는 유효성 검사 오류를 방지하는 데 유용한 다음과 같은 기능이 있습니다. includes the following features to help you avoid the validation errors that would otherwise result from these conditions:

  • 패키지가 로드될 때 유효하지 않은 패키지 요소의 DelayValidation 속성 구성Configure the DelayValidation property on package elements that are not valid when the package is loaded. 구성이 유효하지 않은 패키지 요소의 DelayValidationTrue 로 설정하여 패키지가 로드될 때 유효성 검사 오류를 방지할 수 있습니다.You can set DelayValidation to True on package elements whose configuration is not valid, to prevent validation errors when the package is loaded. 예를 들어 런타임에 SQL 실행 작업을 통해 테이블이 만들어지기 전까지는 존재하지 않는 대상 테이블을 사용하는 데이터 흐름 태스크가 있을 수 있습니다.For example, you may have a Data Flow task that uses a destination table that does not exist until an Execute SQL task creates the table at run time. DelayValidation 속성은 패키지 수준 또는 패키지에 포함된 개별 태스크 및 컨테이너 수준에서 설정할 수 있습니다.The DelayValidation property can be enabled at the package level, or at the level of the individual tasks and containers that the package includes.

    DelayValidation 속성은 데이터 흐름 태스크에만 설정할 수 있고 개별 데이터 흐름 구성 요소에는 설정할 수 없습니다.The DelayValidation property can be set on a Data Flow task, but not on individual data flow components. 개별 데이터 흐름 구성 요소의 ValidateExternalMetadata 속성을 false을 참조하세요.You can achieve a similar effect by setting the ValidateExternalMetadata property of individual data flow components to false. 그러나 이 속성 값이 false이면 구성 요소에서 외부 데이터 원본의 메타데이터에 대한 변경 내용을 인식하지 못하게 됩니다.However, when the value of this property is false, the component is not aware of changes to the metadata of external data sources. 로 설정 하면 true, ValidateExternalMetadata 속성 패키지 트랜잭션을 사용 하는 경우에 특히 데이터베이스의 잠금으로 인 한 차단 문제를 방지 하는 데 도움이 될 수 있습니다.When set to true, the ValidateExternalMetadata property can help to avoid blocking issues caused by locking in the database, especially when the package is using transactions.

런타임 권한 문제 해결Troubleshoot Run-time Permissions Issues

SQL ServerSQL Server 에이전트를 사용하여 배포된 패키지를 실행하려고 할 때 오류가 발생하면 에이전트에서 사용하는 계정에 필요한 권한이 없는 것일 수 있습니다.If you encounter errors when trying to run deployed packages by using SQL ServerSQL Server Agent, the accounts used by Agent might not have the required permissions. SQL ServerSQL Server 에이전트 작업에서 실행한 패키지의 문제를 해결하는 방법은 SQL Server 에이전트 작업 단계에서 SSIS 패키지를 호출할 때 SSIS 패키지가 실행되지 않는다를 참조하십시오.For information on how to troubleshoot packages that are run from SQL ServerSQL Server Agent jobs, see An SSIS package does not run when you call the SSIS package from a SQL Server Agent job step. SQL ServerSQL Server 에이전트 작업에서 패키지를 실행하는 방법은 패키지에 대한 SQL Server 에이전트 작업을 참조하세요.For more information on how to run packages from SQL ServerSQL Server Agent jobs, see SQL Server Agent Jobs for Packages.

Excel 또는 Access 데이터 원본에 액세스하려면 SQL ServerSQL Server 에이전트에 TEMP 및 TMP 환경 변수로 지정되는 폴더에서 임시 파일을 읽고, 쓰고, 만들고, 삭제할 수 있는 사용 권한을 가진 계정이 있어야 합니다.To connect to Excel or Access data sources, SQL ServerSQL Server Agent requires an account that has permission to read, write, create, and delete temporary files in the folder that is specified by the TEMP and TMP environment variables.

64비트 문제 해결Troubleshoot 64-bit Issues

  • 일부 데이터 공급자는 64비트 플랫폼에서 사용할 수 없습니다.Some data providers are not available on the 64-bit platform. 특히 Excel 또는 Access 데이터 원본에 연결하는 데 필요한 MicrosoftMicrosoft Jet OLE DB 공급자는 64비트 버전에서 사용할 수 없습니다.In particular, the MicrosoftMicrosoft Jet OLE DB Provider that is required to connect to Excel or Access data sources is not available in a 64-bit version.

설명이 없는 오류 문제 해결Troubleshoot Errors without a Description

설명이 없는 Integration ServicesIntegration Services 오류가 발생할 경우 Integration Services 오류 및 메시지 참조 에서 오류 번호로 조회하여 해당 오류에 대한 설명을 찾을 수 있습니다.If you encounter an Integration ServicesIntegration Services error that does not have an accompanying description, you can locate the description in Integration Services Error and Message Reference by looking up the error by its number. 이 목록에는 현재 문제 해결 정보는 들어 있지 않습니다.The list does not include troubleshooting information at this time.

데이터 흐름 디버깅Debugging Data Flow

dougbert.com의 블로그 항목, 오류 출력에 오류 열 이름 추가Blog entry, Adding the error column name to an error output, on dougbert.com.