SSIS 패키지는 SQL Server 에이전트 작업 단계에서 호출할 때 실행되지 않습니다.

이 문서는 SQL Server 에이전트 작업 단계에서 SSIS 패키지를 호출할 때 발생하는 문제를 resolve 데 도움이 됩니다.

원래 제품 버전: SQL Server
원래 KB 번호: 918760

증상

SQL Server 에이전트 작업 단계에서 Microsoft SSIS(SQL Server Integration Services) 패키지를 호출하면 SSIS 패키지가 실행되지 않습니다. 그러나 SSIS 패키지를 수정하지 않으면 SQL Server 에이전트 외부에서 성공적으로 실행됩니다.

해결 방법

이 문제를 해결하려면 다음 방법 중 하나를 사용하세요. 가장 적절한 방법은 환경 및 패키지가 실패한 이유에 따라 달라집니다. 패키지가 실패한 이유는 다음과 같습니다.

  • SQL Server 에이전트 패키지를 실행하는 데 사용되는 사용자 계정은 원래 패키지 작성자와 다릅니다.
  • 사용자 계정에는 SSIS 패키지 외부의 리소스에 연결하거나 액세스하는 데 필요한 권한이 없습니다.

패키지는 다음 시나리오에서 실행되지 않을 수 있습니다.

  • 현재 사용자는 패키지에서 암호를 해독할 수 없습니다. 이 시나리오는 현재 계정 또는 실행 계정이 원래 패키지 작성자와 다르고 패키지의 ProtectionLevel 속성 설정으로 현재 사용자가 패키지의 암호를 해독할 수 없는 경우에 발생할 수 있습니다.
  • 현재 사용자에게 필요한 권한이 없으므로 통합 보안을 사용하는 SQL Server 연결이 실패합니다.
  • 현재 사용자에게 연결 관리자가 액세스하는 파일 공유에 쓸 수 있는 필요한 권한이 없기 때문에 파일 액세스가 실패합니다. 예를 들어 이 시나리오는 로그인 및 암호를 사용하지 않는 텍스트 로그 공급자에서 발생할 수 있습니다. 이 시나리오는 SSIS 파일 시스템 태스크와 같이 파일 연결 관리자에 의존하는 모든 작업에서도 발생할 수 있습니다.
  • 레지스트리 기반 SSIS 패키지 구성은 레지스트리 키를 사용합니다 HKEY_CURRENT_USER . 레지스트리 키는 HKEY_CURRENT_USER 사용자별로 다릅니다.
  • 작업 또는 연결 관리자를 사용하려면 현재 사용자 계정에 올바른 권한이 있어야 합니다.

문제를 resolve 하려면 다음 방법을 사용합니다.

  • 방법 1: SQL Server 에이전트 프록시 계정을 사용합니다. SQL Server 에이전트 프록시 계정을 만듭니다. 이 프록시 계정은 SQL Server 에이전트 패키지를 만든 계정 또는 필요한 권한이 있는 계정으로 작업을 실행할 수 있는 자격 증명을 사용해야 합니다.

    이 메서드는 비밀을 해독하기 위해 작동하며 사용자의 주요 요구 사항을 충족합니다. 그러나 SSIS 패키지 사용자 키에는 현재 사용자와 현재 컴퓨터가 포함되므로 이 메서드의 성공이 제한될 수 있습니다. 따라서 패키지를 다른 컴퓨터로 이동하는 경우 작업 단계에서 올바른 프록시 계정을 사용하는 경우에도 이 메서드가 여전히 실패할 수 있습니다.

  • 방법 2: SSIS 패키지 ProtectionLevel 속성을 ServerStorage로 설정합니다. SSIS 패키지 보호Level 속성을 ServerStorage로 변경합니다. 이 설정은 패키지를 SQL Server 데이터베이스에 저장하고 SQL Server 데이터베이스 역할을 통해 액세스 제어를 허용합니다.

  • 방법 3: SSIS 패키지 ProtectionLevel 속성을 로 EncryptSensitiveWithPassword설정합니다. SSIS 패키지 ProtectionLevel 속성을 로 변경합니다 EncryptSensitiveWithPassword. 이 설정은 암호화에 암호를 사용합니다. 그런 다음 SQL Server 에이전트 작업 단계 명령줄을 수정하여 이 암호를 포함할 수 있습니다.

  • 방법 4: SSIS 패키지 구성 파일을 사용합니다. SSIS 패키지 구성 파일을 사용하여 중요한 정보를 저장한 다음 이러한 구성 파일을 보안 폴더에 저장합니다. 그런 다음 패키지를 암호화하지 않고 패키지에 비밀을 저장하지 않도록 속성을 DontSaveSensitive 로 변경할 ProtectionLevel 수 있습니다. SSIS 패키지를 실행하면 구성 파일에서 필요한 정보가 로드됩니다. 중요한 정보가 포함된 경우 구성 파일이 적절하게 보호되는지 확인합니다.

  • 방법 5: 패키지 템플릿을 만듭니다. 장기 해결을 위해 기본 설정과 다른 보호 수준을 사용하는 패키지 템플릿을 만듭니다. 이 문제는 향후 패키지에서 발생하지 않습니다.

문제를 재현하는 방법

  1. SQLServerSQLAgentUser 그룹에 속하지 않는 사용자로 로그인합니다. 예를 들어 로컬 사용자를 만들 수 있습니다.
  2. SSIS 패키지를 만든 다음 ExecuteSQL 작업을 추가합니다. 문자열 'Windows Authentication' -SQLSourceType: "Direct Input" -SQLStatement: "sp_who"을 사용하여 로컬 msdb 파일에 대한 OLE DB 연결 관리자를 사용합니다.
  3. 패키지를 실행하여 성공적으로 실행되도록 합니다.
  4. 속성이 ProtectionLevelEncryptSensitiveWithPassword설정됩니다.
  5. SQL Server 에이전트 작업 및 작업 단계를 만듭니다. 실행 목록에서 SQL Server 에이전트 서비스를 클릭하여 작업 단계를 실행합니다. SQL Server 에이전트 작업 기록의 텍스트는 다음과 유사한 정보를 표시합니다.

패키지 비밀 암호 해독

SSIS 패키지 ProtectionLevel 속성의 기본 설정은 입니다 EncryptSensitiveWithUserKey. 패키지를 저장하면 SSIS는 암호, 사용자 이름 및 연결 문자열과 같이 로 표시된 sensitive속성이 포함된 패키지의 일부만 암호화합니다. 따라서 패키지를 다시 로드할 때 현재 사용자는 암호 해독할 속성에 sensitive 대한 암호화 요구 사항을 충족해야 합니다. 그러나 현재 사용자는 패키지를 로드하기 위한 암호화 요구 사항을 충족할 필요가 없습니다. SQL Server 에이전트 작업 단계를 통해 패키지를 실행하는 경우 기본 계정은 SQL Server 에이전트 서비스 계정입니다. 이 기본 계정은 패키지 작성자가 아닌 다른 사용자일 가능성이 높습니다. 따라서 SQL Server 에이전트 작업 단계에서 작업 단계를 로드하고 실행하기 시작할 수 있지만 연결을 완료할 수 없으므로 패키지가 실패합니다. 예를 들어 패키지는 OLE DB 연결 또는 FTP 연결을 완료할 수 없습니다. 패키지는 연결해야 하는 자격 증명의 암호를 해독할 수 없으므로 실패합니다.

중요

개발 프로세스 및 환경을 고려하여 각 컴퓨터에서 필요하고 사용되는 계정을 결정합니다. 속성의 ProtectionLevel EncryptSensitiveWithUserKey 설정은 강력한 설정입니다. 이 설정은 처음에는 배포가 복잡해지므로 할인해서는 안 됩니다. 적절한 계정에 로그인할 때 패키지를 암호화할 수 있습니다. Dtutil.exe SSIS 명령 프롬프트 유틸리티를 사용하여 .cmd 파일 및 SQL Server 에이전트 명령 하위 시스템을 사용하여 보호 수준을 변경할 수도 있습니다. 예를 들어 다음 단계를 수행합니다. 일괄 처리 파일 및 루프에서 Dtutil.exe 유틸리티를 사용할 수 있으므로 여러 패키지에 대해 이러한 단계를 동시에 수행할 수 있습니다.

  1. 암호를 사용하여 암호화하려는 패키지를 수정합니다.

  2. 운영 체제(cmd Exec) SQL Server 에이전트 작업 단계를 통해 Dtutil.exe 유틸리티를 사용하여 속성을 EncryptSensitiveWithUserKey로 변경 ProtectionLevel 합니다. 이 프로세스에는 암호를 사용하여 패키지의 암호를 해독한 다음 패키지를 다시 암호화하는 작업이 포함됩니다. 패키지를 암호화하는 데 사용되는 사용자 키는 실행 목록의 SQL Server 에이전트 작업 단계 설정입니다.

    참고

    키에는 사용자 이름과 컴퓨터 이름이 포함되므로 패키지를 다른 컴퓨터로 이동하는 효과가 제한될 수 있습니다.

SSIS 패키지 오류에 대한 자세한 오류 정보가 있는지 확인합니다.

SQL Server 에이전트 작업 기록의 제한된 세부 정보를 사용하는 대신 SSIS 로깅을 사용하여 SSIS 패키지 오류에 대한 오류 정보가 있는지 확인할 수 있습니다. SSIS 하위 시스템 명령 대신 exec 하위 시스템 명령을 사용하여 패키지를 실행할 수도 있습니다.

SSIS 로깅 정보

SSIS 로깅 및 로그 공급자를 사용하면 패키지 실행 및 실패에 대한 세부 정보를 캡처할 수 있습니다. 기본적으로 패키지는 정보를 기록하지 않습니다. 정보를 기록하도록 패키지를 구성해야 합니다. 정보를 기록하도록 패키지를 구성하면 다음과 유사한 세부 정보가 표시됩니다. 이 경우 권한 문제임을 알 수 있습니다.

OnError,DOMAINNAME,DOMAINNAME\USERNAME,FTP Task,{C73DE41C-D0A6-450A-BB94-DF6D913797A1},{2F0AF5AF-2FFD-4928-88EE-1B58EB431D74},4/28/2006 1:51:59 PM,4/28/2006 1:51:59 PM,-1073573489,0x,Unable to connect to FTP server using "FTP Connection Manager".
OnError,DOMAINNAME,DOMAINNAME\USERNAME,Execute SQL Task,{C6C7286D-57D4-4490-B12D-AC9867AE5762},{F5761A49-F2F9-4575-9E2B-B3D381D6E1F3},4/28/2006 4:07:00 PM,4/28/2006 4:07:00 PM,-1073573396,0x,Failed to acquire connection "user01.msdb". Connection may not be configured correctly or you may not have the right permissions on this connection.

exec 하위 시스템 명령 및 출력 정보 정보

exec 하위 시스템 명령 접근 방식을 사용하여 자세한 콘솔 로깅 스위치를 SSIS 명령줄에 추가하여 Dtexec.exe SSIS 명령줄 실행 파일을 호출합니다. 또한 출력 파일의 고급 작업 기능을 사용합니다. 기록에서 단계 출력 포함 옵션을 사용하여 로깅 정보를 파일 또는 SQL Server 에이전트 작업 기록으로 리디렉션할 수도 있습니다.

다음은 명령줄의 예입니다.

 dtexec.exe /FILE "C:\_work\SSISPackages\ProtectionLevelTest\ProtectionLevelTest\AgentTesting.dtsx" /MAXCONCURRENT " -1 " /CHECKPOINTING OFF /REPORTING V /CONSOLELOG NCOSGXMT

콘솔 로깅은 다음과 유사한 세부 정보를 반환합니다.

Error: 2006-04-27 18:13:34.76 Code: 0xC0202009 Source: AgentTesting Connection manager "(local).msdb" Description: An OLE DB error has occurred. Error code: 0x80040E4D. An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E4D Description: "Login failed for user 'DOMAINNAME\username'.". End Error
Error: 2006-04-28 13:51:59.19 Code: 0xC0016016 Source: Description: Failed to decrypt protected XML node "DTS:Property" with error 0x80070002 "The system cannot find the file specified.". You may not be authorized to access this information. This error occurs when there is a cryptographic error. Verify that the correct key is available. End Error
Log: Name: OnError Computer: COMPUTERNAME Operator: DOMAINNAME\username Source Name: Execute SQL Task Source GUID: {C6C7286D-57D4-4490-B12D-AC9867AE5762} Execution GUID: {7AFE3D9E-5F73-42F0-86FE-5EFE264119C8} Message: Failed to acquire connection "(local).msdb". Connection may not be configured correctly or you may not have the right permissions on this connection. Start Time: 2006-04-27 18:13:34 End Time: 2006-04-27 18:13:34 End Log

참조

아쉽게도 사용자는 기본 에이전트 작업 단계 설정으로 이 상태가 되었다는 사실을 인식하지 못하고 있습니다. SQL Server 에이전트 프록시 및 SSIS에 대한 자세한 내용은 SQL Server 2005 온라인 설명서의 다음 topics 참조하세요.

  • SQL Server 에이전트 패키지 실행 예약
  • SQL Server 에이전트 프록시 만들기