2016-09-23 2 views
0

SSIS 패키지에 매개 변수를 전달할 수있는 저장 프로 시저를 만들려고합니다.XP_CMDSHELL SSIS 패키지를 실행하려면 매개 변수

DECLARE @Path VARCHAR(200), 
@ExcelPath VARCHAR(50), 
@DB VARCHAR(100), 
@ExcelSheet VARCHAR(500), 
@Cmd VARCHAR(4000), 
@ReturnCode INT, 
@Msg VARCHAR(1000), 
@SQLServer varchar(255), 
@EmailAddress varchar(255), 
@DTEXEC varchar(255) 


SELECT @Path = 'C:\SpyderNetwork Production\SSIS\IMPORTSC\' 
SELECT @ExcelPath = 'C:\Users\Administrator\Desktop\SR\test.xlsx' 
SELECT @ExcelSheet = 'DATA$' 
select @DTEXEC = 'C:\"Program Files (x86)"\"Microsoft SQL Server"\120\DTS\Binn\dtexec.exe' 



exec xp_cmdshell '' 

SELECT @Cmd = @DTEXEC + ' /FILE "' + @Path + 'package.dtsx" /MAXCONCURRENT 1 /CHECKPOINTING OFF /REPORTING EW' 
+ ' /SET \Package.Variables[User::ExcelPath].Properties[Value];' + @ExcelPath 
+ ' /SET \Package.Variables[User::ExcelSheet].Properties[Value];' + @ExcelSheet 


EXEC @ReturnCode = xp_cmdshell @Cmd 

매개 변수를 값으로 바꾸고 명령 프롬프트에서 실행하면 모든 것이 작동하지만 여기에서 구현할 때 다음 오류가 발생합니다. 다시 이것은 명령 프롬프트에서 실행할 수있을 때 실행할 권한이 없으며 아무런 문제가 없다는 의미가 아닙니다. 여기에 뭔가 기본적인 것이 빠져 있니?

Microsoft (R) SQL Server 실행 패키지 유틸리티 32 비트 용 12.0.2430.0 Copyright (C) Microsoft Corporation. 판권 소유. NULL 시작 : 오전 11시 29분 4초 오류 : 2016년 9월 23일 11 : 29 : 04.92 코드 : 0xC0016016 출처 : 패키지 설명 : 보호 된 XML 노드 "DTS : 비밀 번호"를 해독하는 데 실패 오류 0x8009000B와 함께 " 키가 지정된 상태에서 사용하기에 유효하지 않습니다. " 이 정보에 액세스 할 수있는 권한이 없습니다. 이 오류는 암호화 오류가있을 때 발생합니다. 올바른 키를 사용할 수 있는지 확인하십시오. 오류 : 2016-09-23 11 : 29 : 04.92 코드 : 0xC0016016 원본 : 패키지 설명 : 0x8009000B 오류로 보호 된 XML 노드 "DTS : Password" . " 이 정보에 액세스 할 수있는 권한이 없습니다. 이 오류는 암호화 오류가있을 때 발생합니다. 올바른 키를 사용할 수 있는지 확인하십시오. 최종 오류 오류 : 2016년 9월 23일 11 : 29 : 05.03 코드 : 0xC0202009 출처 : 패키지의 연결 관리자 "TEST.SpyderDB.TESTUSER" 설명 : SSIS 오류 코드 DTS_E_OLEDBERROR. OLE DB 오류가 발생했습니다. 오류 코드 : 0x80040E4D. OLE DB 레코드를 사용할 수 있습니다. 원본 : "Microsoft SQL Server Native Client 11.0"Hresult : 0x80040E4D 설명 : "사용자 'TESTUSER'로그인에 실패했습니다.". 최종 오류 오류 : 2016년 9월 23일 11 : 29 : 05.03 코드 : 0xC020801C 출처 : 데이터 흐름 작업 OLE DB 대상 [69] 설명 : SSIS 오류 코드 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. 연결 관리자 "TEST.SpyderDB.TESTUSER"에 대한 AcquireConnection 메서드 호출이 오류 코드 0xC0202009와 함께 실패했습니다. AcquireConnection 메서드 호출이 실패한 이유에 대한 자세한 내용은 bef 게시 된 오류 메시지가있을 수 있습니다. 최종 오류 오류 : 2016-09-23 11 : 29 : 05.03 코드 : 0xC0047017 원본 : 데이터 흐름 작업 SSIS.Pipeline 설명 : OLE DB 대상의 유효성 검사에 실패했으며 0xC020801C 오류 코드가 반환되었습니다. 최종 오류 오류 : 2016-09-23 11 : 29 : 05.03 코드 : 0xC004700C 원본 : 데이터 흐름 작업 SSIS.Pipeline 설명 : 하나 이상의 구성이 유효성 검사에 실패했습니다. 최종 오류 오류 : 2016-09-23 11 : 29 : 05.03 코드 : 0xC0024107 원본 : 데이터 흐름 작업 설명 : 작업 유효성 검사 중에 오류가 발생했습니다. 최종 오류 경고 : 2016-09-23 11 : 29 : 05.03 코드 : 0x80019002 원본 : importSCSoldUnits 설명 : SSIS 경고 코드 DTS_W_MAXIMUMERRORCOUNTREACHED. Execution 메서드가 성공했지만 발생한 오류 수 (5)가 최대 허용 값 (1)에 도달했습니다. 결과적으로 실패합니다. 이 오류는 오류 수가 MaximumErrorCount의 숫자 지정 d에 도달 할 때 발생합니다. MaximumErrorCount를 변경하거나 오류를 수정하십시오. 경고 끝내기 경고 : 2016-09-23 11 : 29 : 05.03 코드 : 0x80019002 원본 : 패키지 설명 : SSIS 경고 코드 DTS_W_MAXIMUMERRORCOUNTREACHED. Execution 메서드가 성공했지만 발생한 오류 수 (5)가 최대 허용 값 (1)에 도달했습니다. 결과적으로 실패합니다. 이 오류는 오류 수가 MaximumErrorCount의 숫자 지정 d에 도달 할 때 발생합니다. MaximumErrorCount를 변경하거나 오류를 수정하십시오. 경고 끝내기 DTExec : 패키지 실행이 DTSER_FAILURE (1)을 반환했습니다. 시작 : 오전 11시 29분 4초 완료 : 오전 11시 29분 5초 경과 : 0.172 초 NULL

+1

http://stackoverflow.com/questions/17248560/sql-server-jobs-with-ssis-packages-failed-to-decrypt-protected-xml-node-dtsp 나는이 체크 아웃 할 . – Zi0n1

+0

네, 그게 해결책이었습니다. EncryptSensitiveWithPassword 및 Project Protection Level에 동일한 SSIS Package ProtectionLevel 속성을 만들었습니다. SSIS를 실행하기 위해 SQL에 추가/삭제 된 암호 (보호 수준에 사용 된 암호와 동일). 모든 것이 제대로 작동하고 있습니다. –

답변

0

당신은 SQL 2012 이상을 사용하는 경우, xp_cmdshell을 사용하지 않고 사용할 수있는 다른 솔루션이 있습니다.

프로젝트는 프로젝트 배포 모델에 있어야하며 SSISDB 카탈로그에 배포되어야합니다.

EXEC [SSISDB].[catalog].[create_execution] 
     @folder_name = N'Folder', 
     @project_name = N'Test', 
     @package_name = N'Package.dtsx', 
     @reference_id = NULL, 
     @use32bitruntime = FALSE,  
     @execution_id = @executionID OUTPUT 

    EXEC [SSISDB].[catalog].[set_execution_parameter_value] 
    @executionID, 
    @object_type = 20, 
    @parameter_name = N'Var1', 
    @parameter_value = @Var1 

    EXEC [SSISDB].[catalog].[set_execution_parameter_value] 
    @executionID, 
    @object_type = 20, 
    @parameter_name = N'Var2', 
    @parameter_value = @Var2 

    EXEC [SSISDB].[catalog].[start_execution] @executionID 
+0

고맙다. 나는 이것을 시험해보아야 할 것이다. 이것은 내가 시도했던 것보다 훨씬 깨끗합니다. –