패키지 실행 문제 해결

업데이트: 2006년 12월 12일

Integration Services에서는 패키지를 완성 및 배포한 후 실행할 때 패키지 문제를 해결하는 데 사용할 수 있는 기능 및 도구를 제공합니다.

디자인 타임에 Business Intelligence Development Studio에서는 패키지 실행을 일시 중지하기 위한 중단점, 진행률 창 및 데이터가 데이터 흐름을 통과할 때 데이터를 감시하기 위한 데이터 뷰어를 제공합니다. 그러나 배포된 패키지를 실행할 때는 이러한 기능을 사용할 수 없습니다. 배포된 패키지의 문제를 해결하는 주요 방법은 다음과 같습니다.

  • 이벤트 처리기를 사용하여 패키지 오류 파악 및 처리
  • 오류 출력을 사용하여 잘못된 데이터 캡처
  • 로깅을 사용하여 패키지 실행 단계 추적

다음 팁과 기술을 사용하여 패키지 실행과 관련된 문제를 방지할 수도 있습니다.

이벤트 처리기를 사용하여 패키지 오류 파악 및 처리

이벤트 처리기를 사용하여 패키지 및 패키지의 개체에서 발생한 여러 이벤트에 대응할 수 있습니다.

  • OnError 이벤트의 이벤트 처리기 만들기 이벤트 처리기에서 메일 보내기 작업을 사용하여 관리자에게 오류를 알리거나, 스크립트 작업 및 사용자 지정 논리를 사용하여 문제 해결을 위한 시스템 정보를 가져오거나, 임시 리소스 또는 완전하지 않은 출력을 정리할 수 있습니다. 자세한 내용은 Integration Services 이벤트 처리기패키지 이벤트 처리기 만들기를 참조하십시오.

외부 데이터 공급자와의 문제 해결

다수의 패키지 오류가 외부 데이터 공급자와 상호 작용하는 동안 발생합니다. 하지만 이러한 공급자가 Integration Services로 반환하는 메시지에서 상호 작용 문제 해결을 시작하기에 충분한 정보를 제공하지 않는 경우가 많습니다. 이 문제 해결 요구를 다루기 위해 Microsoft SQL Server 2005 SP2(서비스 팩 2)에는 외부 데이터 원본과의 패키지 상호 작용 문제를 해결하는 데 사용할 수 있는 새 로깅 메시지가 포함되어 있습니다.

  • 로깅을 설정하고 패키지의 Diagnostic 이벤트를 선택하여 새 문제 해결 메시지를 표시합니다. SP2부터 다음 Integration Services 구성 요소는 외부 데이터 공급자 호출 전후에 로그 메시지를 기록할 수 있습니다.

    • OLE DB 연결 관리자, OLE DB 원본 및 OLE DB 대상
    • ADO.NET 연결 관리자 및 DataReader 원본
    • SQL 실행 작업
    • 조회 변환, OLE DB 명령 변환 및 느린 변경 차원 변환

    새 로그 메시지에는 호출되는 메서드의 이름이 포함됩니다. 예를 들어 이러한 로그 메시지에 OLE DB Connection 개체의 Open 메서드나 Command 개체의 ExecuteNonQuery 메서드가 포함될 수 있습니다. 메시지의 형식은 다음과 같으며 '%1!s!'는 메서드 정보의 자리 표시자입니다.

    ExternalRequest_pre: The object is ready to make the following external request: '%1!s!'.
    ExternalRequest_post: '%1!s!'. The external request has completed.
    

    외부 데이터 공급자와의 상호 작용 문제를 해결하려면 로그를 검토하여 모든 "호출 전" 메시지(ExternalRequest_pre)에 해당하는 "호출 후" 메시지(ExternalRequest_post)가 있는지 확인합니다. 해당하는 "호출 후" 메시지가 없으면 외부 데이터 공급자가 예상대로 응답하지 않은 것을 알 수 있습니다.
    다음 예에서는 새 로깅 메시지를 포함하는 로그의 몇 개 예제 행을 보여 줍니다.

    ExternalRequest_pre: The object is ready to make the following external request: 'ITransactionJoin::JoinTransaction'.
    ExternalRequest_post: 'ITransactionJoin::JoinTransaction succeeded'. The external request has completed.
    ExternalRequest_pre: The object is ready to make the following external request: 'IDbConnection.Open'.
    ExternalRequest_post: 'IDbConnection.Open succeeded'. The external request has completed.
    ExternalRequest_pre: The object is ready to make the following external request: 'IDbConnection.CreateCommand'.
    ExternalRequest_post: 'IDbConnection.CreateCommand finished'. The external request has completed."
    ExternalRequest_pre: The object is ready to make the following external request: 'IDbCommand.ExecuteReader'.
    ExternalRequest_post: 'IDbCommand.ExecuteReader finished'. The external request has completed."
    ExternalRequest_pre: The object is ready to make the following external request: 'IDataReader.GetSchemaTable'.
    ExternalRequest_post: 'IDataReader.GetSchemaTable finished'. The external request has completed."
    ExternalRequest_pre: The object is ready to make the following external request: 'IDataReader.Close'.
    ExternalRequest_post: 'IDataReader.Close finished'. The external request has completed."
    ExternalRequest_pre: The object is ready to make the following external request: 'IDbConnection.Close'.
    ExternalRequest_post: 'IDbConnection.Close finished'. The external request has completed."
    

오류 출력을 사용하여 잘못된 데이터 문제 해결

여러 데이터 흐름 구성 요소에서 사용할 수 있는 오류 출력을 통해 오류가 들어 있는 행을 나중에 분석할 수 있도록 별도의 대상으로 보낼 수 있습니다.

  • 오류 출력을 사용하여 잘못된 데이터 캡처 오류가 들어 있는 행을 오류 테이블이나 텍스트 파일과 같은 별도의 대상으로 보냅니다. 오류 출력에는 행이 거부되도록 한 오류의 번호와 오류가 발생한 열의 ID가 들어 있는 두 개의 숫자 열이 자동으로 추가됩니다. 자세한 내용은 데이터 오류 처리방법: 데이터 흐름 구성 요소에서 오류 출력 구성을 참조하십시오.
  • 오류 출력에 정보 추가 오류 출력에 제공되는 두 개의 숫자 식별자 외에 설명 정보를 추가하여 오류 출력을 분석하기 쉽게 만들 수 있습니다.
    오류의 설명 추가 스크립트 구성 요소를 사용하여 오류 설명을 쉽게 찾을 수 있습니다. 자세한 내용은 Enhancing an Error Output with the Script Component를 참조하십시오.
    오류 열의 이름 추가 스크립트 구성 요소에서는 오류 출력에 저장된 열 ID에 해당하는 열 이름을 쉽게 찾을 수 없으므로 추가 단계가 필요합니다. 데이터 흐름의 각 열 ID는 해당 데이터 흐름 작업 내에서 고유하며 디자인 타임에 패키지에 보관됩니다. 다음은 오류 출력에 열 이름을 추가하는 데 적절한 방법입니다.
    1. 열 이름의 조회 테이블 만들기 Integration Services API를 사용하여 저장된 각 패키지, 패키지의 각 데이터 흐름, 데이터 흐름의 각 개체 및 데이터 흐름 개체의 각 입/출력에 대해 반복하는 별도의 응용 프로그램을 만듭니다. 이 응용 프로그램은 각 열의 열 ID 및 이름을 부모 데이터 흐름 작업의 ID 및 패키지의 ID와 함께 조회 테이블에 보관해야 합니다.
    2. 출력에 열 이름 추가 이전 단계에서 만든 조회 테이블에서 열 이름을 찾는 조회 변환을 오류 출력에 추가합니다. 조회할 때는 오류 출력의 열 ID, 시스템 변수 System::PackageID에서 사용할 수 있는 패키지 ID 및 시스템 변수 System::TaskID에서 사용할 수 있는 데이터 흐름 작업의 ID를 사용할 수 있습니다.

로깅을 사용하여 패키지 실행 문제 해결

로깅을 설정하여 실행하는 패키지에서 발생하는 문제를 대부분 추적할 수 있습니다. 로그 공급자는 지정된 이벤트에 대한 정보를 나중에 분석할 수 있도록 캡처하고 해당 정보를 데이터베이스 테이블, 플랫 파일, XML 파일 또는 지원되는 다른 출력 형식으로 저장합니다.

  • 로깅 설정 캡처할 이벤트와 정보 항목만 선택하여 로깅 출력을 구체화할 수 있습니다. 자세한 내용은 Integration Services 로그 공급자패키지에서 로깅 구현을 참조하십시오.
  • 패키지의 Diagnostic 이벤트를 선택하여 공급자 문제 해결. SP2에는 외부 데이터 원본과의 패키지 상호 작용 문제를 해결하는 데 유용한 새 로깅 메시지가 있습니다. 자세한 내용은 이 항목의 외부 데이터 공급자와의 문제 해결을 참조하십시오.
  • 기본 로깅 출력 향상 로깅 기능은 일반적으로 패키지가 실행될 때마다 로깅 대상에 행을 추가합니다. 로깅 출력의 각 행이 패키지를 이름과 고유 식별자로 식별하고 패키지 실행을 고유 ExecutionID로 식별하더라도 단일 목록에 많은 양의 로깅 출력이 있으면 분석하기가 어려울 수 있습니다. 다음은 기본 로깅 출력을 향상시키고 보고서를 쉽게 생성할 수 있도록 하는 데 적절한 방법입니다.
    1. 각 패키지 실행을 기록하는 부모 테이블 만들기 이 부모 테이블은 각 패키지 실행에 대한 단일 행만 포함하며, ExecutionID를 사용하여 Integration Services 로깅 테이블의 자식 레코드에 연결합니다. 각 패키지가 시작될 때 SQL 실행 작업을 사용하여 이 새 행을 만들고 시작 시간을 기록할 수 있습니다. 그런 다음 패키지가 끝날 때 다른 SQL 실행 작업을 사용하여 해당 행을 종료 시간, 기간 및 상태로 업데이트할 수 있습니다.
    2. 데이터 흐름에 감사 정보 추가 감사 변환을 사용하여 데이터 흐름의 행에 각 행을 만들었거나 수정한 패키지 실행에 대한 정보를 추가할 수 있습니다. 감사 변환을 통해 PackageName 및 ExecutionInstanceGUID를 비롯한 9가지 정보를 사용할 수 있습니다. 자세한 내용은 감사 변환을 참조하십시오. 감사를 위해 각 행에도 포함할 사용자 지정 정보가 있는 경우 파생 열 변환을 사용하여 이 정보를 데이터 흐름의 행에 추가할 수 있습니다. 자세한 내용은 파생 열 변환을 참조하십시오.
    3. 행 개수 데이터 캡처 행 개수 정보에 대한 별도의 테이블을 만듭니다. 이 테이블에서 패키지 실행의 각 인스턴스는 ExecutionID로 식별됩니다. 행 개수 변환을 사용하여 데이터 흐름의 중요 지점에서 일련의 변수에 행 개수를 저장합니다. 데이터 흐름이 끝난 후에는 나중에 분석 및 보고할 수 있도록 SQL 실행 작업을 사용하여 일련의 값을 이 테이블의 행에 삽입합니다.

런타임 유효성 검사 문제 해결

데이터 원본에 연결할 수 없거나 패키지의 이전 작업이 실행 완료되기 전까지 패키지의 일부에 대해 유효성을 검사할 수 없는 경우가 있습니다. Integration Services에는 이러한 경우에 발생하는 유효성 검사 오류를 방지하는 데 유용한 다음과 같은 기능이 있습니다.

  • 패키지가 로드될 때 유효하지 않은 패키지 요소의 DelayValidation 속성 구성 구성이 유효하지 않은 패키지 요소의 DelayValidationTrue로 설정하여 패키지가 로드될 때의 유효성 검사 오류를 방지할 수 있습니다. 예를 들어 런타임에 SQL 실행 작업을 통해 테이블이 만들어지기 전까지는 존재하지 않는 대상 테이블을 사용하는 데이터 흐름 작업이 있을 수 있습니다. DelayValidation 속성은 패키지 수준 또는 패키지에 포함된 개별 작업 및 컨테이너 수준에서 설정할 수 있습니다.
    DelayValidation 속성은 데이터 흐름 작업에만 설정할 수 있고 개별 데이터 흐름 구성 요소에는 설정할 수 없습니다. 개별 데이터 흐름 구성 요소의 ValidateExternalMetadata 속성을 false로 설정하면 비슷한 효과를 얻을 수 있습니다. 그러나 이 속성 값이 false이면 구성 요소에서 외부 데이터 원본의 메타데이터에 대한 변경 내용을 인식하지 못하게 됩니다. ValidateExternalMetadata 속성을 true로 설정하면 데이터베이스의 잠금으로 인한 차단 문제를 방지할 수 있습니다. 특히 패키지에서 트랜잭션을 사용하는 경우에 유용합니다.

런타임 권한 문제 해결

SQL Server 에이전트를 사용하여 배포된 패키지를 실행하려고 할 때 오류가 발생하면 에이전트에서 사용하는 계정에 필요한 권한이 없는 것일 수 있습니다. SQL Server 에이전트 작업에서 실행되는 패키지의 문제 해결 방법은 Microsoft 지원 기술 자료 문서 SQL Server 에이전트 작업 단계에서 SSIS 패키지를 호출하면 SSIS 패키지가 실행되지 않음(An SSIS package does not run when you call the SSIS package from a SQL Server Agent job step)을 참조하십시오. SQL Server 에이전트 작업에서 패키지를 실행하는 방법은 SQL Server 에이전트에서 패키지 실행 일정 예약방법: SQL Server 에이전트 작업을 사용하여 패키지 실행을 참조하십시오.

64비트 문제 해결

32비트 모드나 32비트 서버에서 성공적으로 실행되는 패키지를 64비트 서버에서 실행할 때 오류가 발생하는 경우 다음과 같은 일반적인 문제를 살펴보십시오. 자세한 내용은 64비트 컴퓨터에서 Integration Services 고려 사항을 참조하십시오.

  • 일부 데이터 공급자는 64비트 플랫폼에서 사용할 수 없습니다. 특히 Excel 또는 Access 데이터 원본에 연결하는 데 필요한 Microsoft Jet OLE DB 공급자는 64비트 버전에서 사용할 수 없습니다.
  • 스크립트를 64비트 컴퓨터에서 사용하려면 32비트 컴퓨터에서 미리 컴파일해야 합니다. 스크립트 작업이나 스크립트 구성 요소를 사용하는 패키지에서 PreCompile 속성을 True로 설정해야 합니다.
  • DTS 패키지는 64비트 모드에서 실행할 수 없습니다. 패키지에서 DTS 2000 패키지 실행 작업을 사용하여 SQL Server 2000 DTS(데이터 변환 서비스) 패키지를 실행하는 경우에는 해당 패키지를 32비트 모드에서 실행해야 합니다. DTS 패키지에 대한 64비트 런타임 지원은 없습니다.

설명이 없는 오류 문제 해결

설명이 없는 Integration Services 오류가 발생할 경우 Integration Services Error and Message Reference에서 오류 번호로 조회하여 해당 오류에 대한 설명을 찾을 수 있습니다. 이 목록에는 현재 문제 해결 정보는 들어 있지 않습니다.

참고 항목

작업

패키지 개발 문제 해결

개념

패키지 성능 문제 해결
Integration Services 서비스 문제 해결

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2006년 12월 12일

새로운 내용
  • SQL Server 2005 SP2에 포함된 새 로깅 메시지를 사용하여 외부 공급자 문제를 해결할 수 있는 방법에 대한 정보를 추가했습니다.